Activecell.Value = "Une variable"
makks
Messages postés
18
Statut
Membre
-
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
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. :)
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
-
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-
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é. -
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. -
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 : ectActiveCell.FormulaLocal = "exemple"
mais impossible de ressortir la valeur de f. -
-
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.
-
-
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 & "
-
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+ -
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
-
-
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. -
-
-