Activecell.Value = "Une variable"

Fermé
makks Messages postés 17 Date d'inscription mercredi 10 février 2016 Statut Membre Dernière intervention 26 février 2016 - 26 févr. 2016 à 10:52
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 26 févr. 2016 à 15:19
Bonjour,

J'ai un petit problème quand je veux mettre la valeur d'une variable dans mes cellules, par exemple je note :

f = "=Somme(A1;B1)", ceci est un exemple, mes formules sont variables normalement d'ou le choix de vouloir une variable.

Ensuite mon problème se pose, j'aimerais insérer ma formule dans des cellules, j'utilise donc activecell.value = f (J'ai aussi essayé avec activecell.formulalocal, et avec toute les formes de concaténation "" && ect..) et rien ne marche, je pense donc que l'erreur vient de la formule ou je ne sais quoi, si vous pourriez m'aider. :)

4 réponses

Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
26 févr. 2016 à 11:00
Bjr,

Avez-vous le code entier svp ?

2 pb que j'entrevois :
- la dimension de f : l'avez-vous déclarée ?
- le caractère variable de f : si vous n'avez pas utilisé la fonction "Set f =..." alors f sera fixe.

Mais encore une fois on y verra plus clair avec votre code
0
makks Messages postés 17 Date d'inscription mercredi 10 février 2016 Statut Membre Dernière intervention 26 février 2016 1
Modifié par makks le 26/02/2016 à 11:22
  For u = 2 To 6

'On change la formule f qui va s'appliquer en fonction de la colonne.
'Les valeurs que peuvent prendre f
If u = 2 Then
f = "=SOMMEPROD((Données!P:P)*((Données!K:K=""E"")+(Données!K:K=""V"")+(Données!K:K=""P""))*(Données!D:D=" & i - x + 1 & ")*(Données!C:C=" & annee & ")*((Données!L:L=""P"")+(Données!L:L=""E"")+(Données!L:L=""V"")))"
End If

If u = 3 Then
f = "=SOMMEPROD((Données!P:P)*((Données!K:K=""E"")+(Données!K:K=""V"")+(Données!K:K=""""))*(Données!D:D=" & i - x + 1 & ")*(Données!C:C=" & annee & ")*(Données!L:L=""P""))"
End If

'L'endroit ou j'utilise f
For annee = 2010 To 2015
For i = x To x + 12
Cells(i, u).Select
If i < x + 12 Then
ActiveCell.FormulaLocal = f


Le code est un plus long mais je pense que cette partie peut suffir, sans le contexte entier, c'est compliqué.

f est bien déclaré en string et j'arrive à remplir mon tableau avec des "f" quand je met des guillemets, sans guillemets j'obtient une erreur "objet ect..."

Je précise que les formules marchent, déjà testé.
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
26 févr. 2016 à 11:29
pour la partie :
    For annee = 2010 To 2015
For i = x To x + 12
Cells(i, u).Select
If i < x + 12 Then
ActiveCell.FormulaLocal = f


A quel moment x est défini en dimension et en valeur initiale ? Avant dans une partie du code que nous n'avons pas ?

A quelle valeur de u le code plante ? Pour le savoir mettez une "msgbox u" avant l'utilisation de f.
0
makks Messages postés 17 Date d'inscription mercredi 10 février 2016 Statut Membre Dernière intervention 26 février 2016 1
26 févr. 2016 à 11:35
Il n'y a aucun problème avec x et u, ils sont bien déclarés avant et les msgbox m'indiquent biens ce que j'attend, f prend bien la valeur de la chaine de caractères que je lui donne, simplement sur la partie
ActiveCell.FormulaLocal = f 


Je suis capable d'afficher n'importe qu'elle chaine de caractère sur mes cellules que je désire : ect
ActiveCell.FormulaLocal = "exemple" 


mais impossible de ressortir la valeur de f.
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
Modifié par Theo.R le 26/02/2016 à 11:39
Avant de résoudre le problème global il faut savoir précisément à quel niveau précis ça plante.

Donc au moment du débogage, quelles sont les valeurs de vos variables : u, i, x et f ?
0
makks Messages postés 17 Date d'inscription mercredi 10 février 2016 Statut Membre Dernière intervention 26 février 2016 1
Modifié par makks le 26/02/2016 à 12:20
Au moment du débogage, u=2; i=9; x=9; f= =SOMMEPROD((Données!P:P)*((Données!K:K=""E"")+(Données!K:K=""V"")+(Données!K:K=""P""))*(Données!D:D=" & i - x + 1 & ")*(Données!C:C=" & annee & ")*((Données!L:L=""P"")+(Données!L:L=""E"")+(Données!L:L=""V"")))

Soit colonne 2(B), ligne 9, ici pas de problème normalement, c'est le début de mon tableau.
0
Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023 181
Modifié par Arkana0 le 26/02/2016 à 11:01
Bonjour,

Attention quand on parle de variable dans du code, ça n'a rien à voir avec une formule Excel.

La syntaxe pour insérer une formule Excel dans une cellule par une macro en vba c'est, en reprenant ton exemple :
ActiveCell.FormulaLocal = "=SOMME(A1:B1)"

Ou bien la variante avec Cells(x,y)

Après, je pense que tu vas vouloir répéter ça sur plusieurs lignes. Donc dans le code que j'ai écris plus haut, il faudra remplacer les "1" par :
" & ActiveCell.Row & "
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
26 févr. 2016 à 11:01
Bonjour,

Pas de problème avec Excel version française :
Sub Test()
Dim f As String
f = "=Somme(A1;B1)"
ActiveCell.FormulaLocal = f
End Sub


A+
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
26 févr. 2016 à 11:48
Bonjour,

Est-ce que i et x et annee sont bien initialisés ?
    Dim u As Long, i As Long, x As Long, annee As Long, f As String
    u = 2
    i = 5
    x = 1
    annee = 2016
    If u = 2 Then
        f = "=SOMMEPROD((Données!P:P)*((Données!K:K=""E"")+(Données!K:K=""V"")+(Données!K:K=""P""))*(Données!D:D=" & i - x + 1 & ")*(Données!C:C=" & annee & ")*((Données!L:L=""P"")+(Données!L:L=""E"")+(Données!L:L=""V"")))"
    End If

    If u = 3 Then
        f = "=SOMMEPROD((Données!P:P)*((Données!K:K=""E"")+(Données!K:K=""V"")+(Données!K:K=""""))*(Données!D:D=" & i - x + 1 & ")*(Données!C:C=" & annee & ")*(Données!L:L=""P""))"
    End If
    [D5].FormulaLocal = f

passe bien.
Le .select suivi du activecell sont inutiles.
eric

0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
26 févr. 2016 à 12:41
et accessoirement si tu pouvais dire quelle erreur tu as ?
Rien ne marche ne veut rien dire
0
makks Messages postés 17 Date d'inscription mercredi 10 février 2016 Statut Membre Dernière intervention 26 février 2016 1
26 févr. 2016 à 13:19
Désolé, je n'avais pas vu la réponse,
Oui oui, toute les valeurs sont bien initialisés avant,
l'erreur qui s'affiche est l'erreur 1004 : Erreur définie par l'application ou par l'objet.
Et comme je l'ai écrit dans une réponse plus haute, mon tableau se remplit bien si je rentre une chaine de caractère exemple : ActiveCell.FormulaLocal = "exemple" mais il ne trouve pas la valeur f, de plus avant l'affichage de l'erreur: u=2; i=9; x=9 et f est égal à la bonne chaine de caractère.
0
makks Messages postés 17 Date d'inscription mercredi 10 février 2016 Statut Membre Dernière intervention 26 février 2016 1
26 févr. 2016 à 13:44
Ok, problème réglé, je ne sais pas trop d'ou ça venait mais bon :/
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
26 févr. 2016 à 15:19
Parfois fermer et rouvrir excel le fait repartir sur de meilleures bases et une pseudo erreur ne se produit plus.
0