Microsoft 365 VBA Sum.if - Application de la formule dans la cellule et non pas sa valeur

JeanPi37

XLDnaute Nouveau
Bonjour à toutes, à tous et à chacun,

J'ai (péniblement) réussi à écrire un ensemble de modules pour mon suivi de budget.

Problème :
Le code
Formule = (Application.WorksheetFunction.SumIf(Range(Cells(LigHaut, ColVisa), Cells(LigBas, ColVisa)), "Visa", _
Range(Cells(LigHaut, ColDeb), Cells(LigBas, ColDeb))) - Application.WorksheetFunction.SumIf(Range(Cells(LigHaut, ColVisa), _
Cells(LigBas, ColVisa)), "Visa", Range(Cells(LigHaut, ColCred), Cells(LigBas, ColCred))))

Me donne une valeur dans la cellule alors que je souhaiterais avoir la formule (comme je l'avais écrite dans ma feuille "=Somme.si ..."

J'espère que je suis assez clair et que quelqu'un a une solution

Merci
JeanPi37
 

vgendron

XLDnaute Barbatruc
bonjour
il faut que ta varialbe "Formule" contienne la formule telle que tu veux la voir dans ta cellule
exemple
formule="=sum(B5:G5")"
range("H5").formula=formule

et si 5 est lui meme dans une varialbe "lig" par exemple
formule="=sum(B" &lig &":G" &lig &")"
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Jean et bienvenu sur XLD, bonjour Vgendron,
Si vous voulez la formule alors elle doit être considérée comme du texte, encadrez la de guillements.
VB:
Formule ="= (Application.WorksheetFunction.SumIf(Range(Cells(LigHaut, ColVisa),
.....
Haut, ColCred), Cells(LigBas, ColCred))))"
Le "= est utilisé si ensuite vous voulez mettre cette formule dans des cellules, comme par exemple :
Code:
Sub essai()
Formule = "= (Application.WorksheetFunction.SumIf(Range(Cells(LigHaut, ColVisa),....Haut, ColCred), Cells(LigBas, ColCred))))"
Range("A1:A10").FormulaLocal = Formule
End Sub
Par contre attention, si dans vos formules vous avez des guillemets il faut les doubler pour qu'ils soient compris par le VBA.
Donc en fait précisez ce que vous voulez en faire ensuite. :)
 

JeanPi37

XLDnaute Nouveau
Bonjour Jean et bienvenu sur XLD, bonjour Vgendron,
Si vous voulez la formule alors elle doit être considérée comme du texte, encadrez la de guillements.
VB:
Formule ="= (Application.WorksheetFunction.SumIf(Range(Cells(LigHaut, ColVisa),
.....
Haut, ColCred), Cells(LigBas, ColCred))))"
Le "= est utilisé si ensuite vous voulez mettre cette formule dans des cellules, comme par exemple :
Code:
Sub essai()
Formule = "= (Application.WorksheetFunction.SumIf(Range(Cells(LigHaut, ColVisa),....Haut, ColCred), Cells(LigBas, ColCred))))"
Range("A1:A10").FormulaLocal = Formule
End Sub
Par contre attention, si dans vos formules vous avez des guillemets il faut les doubler pour qu'ils soient compris par le VBA.
Donc en fait précisez ce que vous voulez en faire ensuite. :)
Merci Sylvanu mais... mon problème n'est pas réglé.
J'ai sûrement mal modifié mon code.
Voici le nouveau :
Formule = "=(Application.WorksheetFunction.SumIf(Range(Cells(LigHaut, ColVisa), Cells(LigBas, ColVisa)), ""Visa"", _
Range(Cells(LigHaut, ColDeb), Cells(LigBas, ColDeb)))" - "Application.WorksheetFunction.SumIf(Range(Cells(LigHaut, ColVisa), _
Cells(LigBas, ColVisa)), ""Visa"", Range(Cells(LigHaut, ColCred), Cells(LigBas, ColCred))))""

Il me met une erreur "Attendu fin d'instruction sur le deuxième range !

Une idée ?
JeanPi37
 

Discussions similaires