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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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 &")"
 
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. 🙂
 
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
 
Merci à tous,
Après de longues absences pour diverses raisons et de nombreux tests, j'ai pu - enfin - finaliser mon code avec, au choix, soit la valeur, soit la formule (qui permet donc de vérifier que la formule s'applique à la bonne plage.
L'astuce était d'utiliser somme.si et non pas sumif ...
Pour information, quand même (et parce que cela peut servir à d'autres) je vous joins le code finalisé :
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Sub CalculSumIf()

Critere = "Visa" ' Modifier selon le critère recherché

' Vérifications initiales :
' -------------------------

Set plageCritere = Range(Cells(LigHaut, ColCarte), Cells(LigBas, ColCarte))
Set plageDeb = Range(Cells(LigHaut, ColDeb), Cells(LigBas, ColDeb))
Set plageCred = Range(Cells(LigHaut, ColCred), Cells(LigBas, ColCred))

' Effectuer le calcul SUMIF
resultat = "=SOMME.SI(" & plageCritere.Address & " ; ""Visa"" ; " & plageDeb.Address & ")" & " - " & "SOMME.SI(" & plageCritere.Address & " ; ""Visa"" ; " & plageCred.Address & ")"

' Fonctionne, mais valeur et pas formule
' --------------------------------------
' resultat = Application.WorksheetFunction.SumIf(plageCritere, Critere, plageDeb) - Application.WorksheetFunction.SumIf(plageCritere, Critere, plageCred)

' Affectation du résultat à la cellule à droite de "Visa Date"
Cells(LigIni, ColVisaDate + 1).Clear
Cells(LigIni, ColVisaDate + 1).FormulaLocal = resultat

' Epuration d'éventuelles présences de Visa jj mmmm aaaa sumif
' si en dessous de texte et cellule calculée et dans la plage
' ------------------------------------------------------------

Nettoyage

' Sortie après vérification (après nettoyage)
End

End Sub
------------------------------------------------------------------------------------------------------------------------------------------------------------
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour