Insérer la fonction SOMME.SI dans des cellules par VBA

Bonjour à tous,

J'ai parcourus le forum à la recherche de la bonne syntaxe pour exprimer une SOMME.SI en VBA, en vain.

Mon cas est le suivant:

Je dois mettre à jour des formules dans plus de 600 fichiers Excel. Pour éviter de le faire à la main, j'envisage de créer un bouton par fichier qui activerai une macro pour mettre à jour les formules.

Je connais d'avance les formules et leur emplacement, car les 600 fichiers ont tous le même format.

Exemple: remplacer le contenu des cellules par les formules ci-dessous:

  • cellule X55 =SOMME.SI('BI 2018'!L:L;"FONC_AUT";'BI 2018'!W:W)
  • cellule AG55 =-SOMME.SI.ENS('CJIA 2018'!$Z$2:$Z$10000;'CJIA 2018'!$K$2:$K$10000;"FONC_AUT";'CJIA 2018'!$X$2:$X$10000;"AE 2018")+SOMME.SI.ENS('CJI3 2018'!$E$2:$E$10000;'CJI3 2018'!$J$2:$J$10000;"KR")+SOMME.SI.ENS('CJI3 2018'!$E$2:$E$10000;'CJI3 2018'!$J$2:$J$10000;"GA")-SOMME.SI.ENS('CJI3 2018'!$E$1:$E$10000;'CJI3 2018'!$C$1:$C$10000;"6251000000")-SOMME.SI.ENS('CJI3 2018'!$E$1:$E$10000;'CJI3 2018'!$C$1:$C$10000;"6251100000")

Pour la cellule X55, j'ai tenté d’appliquer ceci, mais ça ne fonctionne pas:

Sub copier_coller_formules()

Sheets("Synthèse").Select

Cells(55, 24).Value = WorksheetFunction.SumIf(Range("'BI 2018'!L:L,"FONC_AUT",range('BI 2018'!W:W")

End Sub

Je vous transmet un fichier en modèle pour mieux visualiser le contexte avec, dans l'onglet synthèse les deux cellules verte que j'aimerai compléter automatiquement via la macro.

Bonjour,

ton fichier n'a pas été envoyé, peux-tu nous le renvoyer?

Ah oui pardon, maintenant ça devrait être bon.

Re,

Merci pour le fichier

Premier soucis quand j'arrive sur la macro, une ligne en rouge, quand je regarde en détail, un certain "FONC_AUT" pose problème:

WorksheetFunction.SumIf(Range("'BI 2018'!L:L,"FONC_AUT",range('BI 2018'!W:W")

J'ai regardé dans le gestionnaire de noms, aucune plage n'est nomée comme ça, et je ne vois vraiment pas à quoi tu fais référence... c'est quoi?

"FONC_AUT" est le compte budgétaire que je veux rechercher dans la clonne L de l'onglet "BI 2018".

Le résultat doit être 2000€ --> montant du budget de type "FONC_AUT" alloué en 2018 (colonne W).

Re, tu avais plusieurs erreurs de saisie dans ta formule:

avant:

Cells(55, 38).Value = WorksheetFunction.SumIf(Range("'BI 2018'!L:L,"FONC_AUT",range('BI 2018'!W:W")

après:

Range("ag55").Value = WorksheetFunction.SumIf(Range("'BI 2018'!L:L"[s=co-f00][/s], "FONC_AUT", Range([s=co-f00][/s]'BI 2018'!W:W")[s=co-f00][/s]

j'ai mis pour ag55, la colonne 38 n'étais pas une cellule en vert.

Super, ça fonctionne grâce aux corrections.

En revanche est-ce normal que seul le résultat apparaisse dans la cellule, et non pas la formule? Je pense que c'est le ".value" qui pose problème, mais par quoi je dois le remplacer?

En ce qui concerne la 2ème formule, la syntaxe pour additionner plusieurs "SOMME.SI.ENS" est-elle particulière?

Merci beaucoup

Re

En fait c'est le .value, qui devrait être .formula, et surtout, il ne faudrait pas utiliser de Worksheetfunction si tu veux laisser une formule.

Le mieux, c'est que tu copie colle la formule que tu veux appliquer aux deux cellules, et que tu les mettes en enregistrant la macro, tu verras alors toute la syntaxe qu'il faut mettre à ta cellule pour lui affecter une formule, tu auras une syntaxe de formule de type R1C1 avec .formulaR1C1. C'est un moyen impecable d'avoir la syntaxe sans erreurs

Merci du conseil, l'enregistreur de macro me sert de google traduction du VBA

En revanche la 2ème formule affiche un message d'erreur lorsque je l'exécute (malgrès la traduction en R1C1): "Erreur d'exécution '1004' (erreur définir par l’application ou par l'objet)"

Range("AG55").Select

ActiveCell.FormulaR1C1 = _

"=-SUMIFS('CJIA 2018'!R2C26:R10000C26,'CJIA 2018'!R2C11:R10000C11,""FONC_AUT"",'CJIA 2018'!R2C24:R10000C24,""AE 2018"")+SUMIFS('CJI3 2018'!R2C5:R10000C5,'CJI3 2018'!R2C10:R10000C10,""KR"")+SUMIFS('CJI3 2018'!R2C5:R10000C5,'CJI3 2018'!R2C10:R10000C10,""GA"")-SUMIFS('CJI3 2018'!R1C5:R10000C5,'CJI3 2018'!R1C3:R10000C3,""6251000000"")-SUMIFS('CJI3 2018'!R1C5:R10000C5,'CJ" & _

"!R1C3:R10000C3,""6251100000"")"

Étant donné que je découvre les formules de type R1C1, je n'arrive pas à trouver d'où vient l'erreur.

Au secours ^^

AHHHH c'est bon c'était le passage à la ligne qui était mal fait!

Désolé, je reprend le VBA après une longue pause, et j'ai perdu beaucoup de notions.

Merci encore

Re

Pas de soucis, c'est vrai que l'enregistreur est pratique, mais il reste hyper limité pour apprendre le langage VBA, tu as plein de fonctions et astuces qui ne seront jamais utilisées par l'enregistreur de macro, tu peux trouver des cours de VBA sur différents sites, dont celui-ci

Rechercher des sujets similaires à "inserer fonction somme vba"