Gestion d'une formule SUMIFS dans Excel VBA

Bonjour,

Je cherche à inscrire dans une feuille une formule "somme.si.ens" (SUMIFS) composée par la macro.

Ca fonctionne pour des cas simples mais ça me renvoie une erreur dès que je raffine la formule.

Quelqu'un a une idée pour régler ça ? Merci !

Exemple 1 (ça marche avec la première définition de toto mais pas avec la deuxième) :

Sub Test()

Dim toto As String

'toto = "sdf"
toto = "3 fjfj"

Cells(1, 1).FormulaR1C1 = "=SUMIFS(C[1],C[2]," & toto & ")"

End Sub

Exemple 2 (ça marche dans les 2 premiers cas mais pas dans le 3ème) :

Sub Test2()

origine1 = ActiveSheet.Name
origine2 = ThisWorkbook.Name

'Cells(1, 1).FormulaR1C1 = "=SUMIFS(C[1],C[2],RC[3])"
'Cells(1, 1).FormulaR1C1 = "=SUMIFS([Classeur1]Feuil1!C2,[Classeur1]Feuil1!C1,RC[3])"
Cells(1, 1).FormulaR1C1 = "=SUMIFS([" & origine2 & "]" & origine1 & "!C2,[" & origine2 & "]" & origine1 & "!C1,RC[3])"

End Sub

Bonjour,

ThisWorkbook.Name renvoie aussi l'extension du fichier, par exemple "Classeur1.xlsm".

Pour ne garder que la première partie, tu peux écrire :

origine2 = Split(ThisWorkbook.Name,".")(0)
'Ou
origine2 = Replace(ThisWorkbook.Name,".xlsm","")

Merci pour la réponse, Pedro, je vais essayer.

Ceci dit, ça n'expliquer pas mon exemple 1 - que je trouve très bizarre.

Bonne journée, Luc

Merci pour la réponse, Pedro, je vais essayer.

Ceci dit, ça n'expliquer pas mon exemple 1 - que je trouve très bizarre.

Bonne journée, Luc

C'est par ce que tu omets d'ajouter des guillemets, ton élément cherché étant une chaîne de caractères :

& Chr(34) & toto & Chr(34) &

Idem, si le nom de ta feuille comporte des espaces, il doit être encadré dans la formule par des apostrophes.

Bonjour,

autre point, il y a une référence circulaire

tu mets la formule en cellule A1

et la formule fait référence à la colonne A

Salut Isabelle,

Sauf erreur de ma part, "C[1],C[2]" sont des références relatives, il faut comprendre COLONNE[+1] et COLONNE[+2].

Bonjour Pedro22,

dans l'exemple donnée par Luc,

Cells(1, 1).FormulaR1C1 = "=SUMIFS([" & origine2 & "]" & origine1 & "!C2,[" & origine2 & "]" & origine1 & "!C1,RC[3])"

la formule fait référence à C2 et C1

Bonjour Pedro22,

dans l'exemple donnée par Luc,

Cells(1, 1).FormulaR1C1 = "=SUMIFS([" & origine2 & "]" & origine1 & "!C2,[" & origine2 & "]" & origine1 & "!C1,RC[3])"

la formule fait référence à C2 et C1

MeaCulpa, je ne regardais pas au même endroit...

J'imagine que l'exemple est bidon, puisqu'il n'est pas très intéressant de rendre variable le classeur et la feuille pour au final y assigner le classeur et la feuille active, où l'on placera ce résultat.

re,

à tester,

Sub Test2()
origine1 = ActiveSheet.Name
origine2 = ThisWorkbook.Name
t = "=SUMIFS('[" & origine2 & "]" & origine1 & "'!B:B,'[" & origine2 & "]" & origine1 & "'!A:A,C1)"
Cells(1, 1) = Evaluate(t)
End Sub

Bonjour à tous les deux, merci pour votre aide.

Je confirme que l'exemple est bidon

(les noms de fichier et onglet sont définis ailleurs dans la macro mais j'ai simplifié pour isoler le problème).

Je confirme aussi que les références sont relatives

(il n'y a pas de pb de référence circulaire dans les formules quand j'exécute les essais mis en commentaires).

Je vais essayer avec vos suggestions (j'avoue que j'ai pas mal galéré hier avec les " et les chr(34) et que je désespérais).

Merci à vous, bonne après-midi ! Luc

Merci Pedro et Isabelle : avec les chr(34) et les apostrophes, ça marche nickel. Et je suis content 😊

Juste une question pour bien comprendre : que représentent les apostrophes ? Elles indiquent une référence ?

Bonne journée à tous les deux

Non, les apostrophes servent à délimiter un nom (texte) lorsque celui-ci comporte des espaces. Tu peux tester dans ton classeur :

Exemple avec 2 nom d'onglets : "Feuil1" et "Feuille 2"

='Feuil1'!A1
=Feuil1!A1
='Feuille 2'!A1
=Feuille 2!A1

Les 3 premières écritures fonctionnent, pas la dernière.

Merci pour l'explication : c'est très clair (et ça m'ouvre les yeux sur un pb dont je n'avais pas conscience).

Rechercher des sujets similaires à "gestion formule sumifs vba"