Simplifier formule sommeprod en VBA

jlbox

XLDnaute Nouveau
Bonjour,

J'ai créer cette dans une feuille excel :

=SI(ET($G$1="Toutes";$G$2="Toutes");-SOMMEPROD((A_MOIS<=12)*((A_ACTIVITE="PLAGE")+(A_ACTIVITE="PLONGEE"))*(GAUCHE(A_CODE_NATURE;2)=TEXTE(64;"0"))*(A_IMPUTE));SI(ET($G$1="Toutes";$G$2<>"Toutes");-SOMMEPROD((GAUCHE(A_CI_SERVICE;NBCAR($G$2))=TEXTE($G$2;"0"))*(A_MOIS<=12)*((A_ACTIVITE="PLAGE")+(A_ACTIVITE="PLONGEE"))*(GAUCHE(A_CODE_NATURE;2)=TEXTE(64;"0"))*(A_IMPUTE));SI(ET($G$1<>"Toutes";$G$2="Toutes");-SOMMEPROD((A_CODE_ETAB=$G$1)*(A_MOIS<=12)*((A_ACTIVITE="PLAGE")+(A_ACTIVITE="PLONGEE"))*(GAUCHE(A_CODE_NATURE;2)=TEXTE(64;"0"))*(A_IMPUTE));-SOMMEPROD((A_CODE_ETAB=$G$1)*(GAUCHE(A_CI_SERVICE;NBCAR($G$2))=TEXTE($G$2;"0"))*(A_MOIS<=12)*((A_ACTIVITE="PLAGE")+(A_ACTIVITE="PLONGEE"))*(GAUCHE(A_CODE_NATURE;2)=TEXTE(64;"0"))*(A_IMPUTE)))))

Comme vous le voyez, elle est très longue.

Etant novice en VBA d'où cette discussion... Je voudrais écrire cette formule en VBA et que son résultat (pas la formule) soit positionner dans la cellule : D1 par exemple.

J'espère que l'exemple suffit.

Merci pour votre aide.
 

vbacrumble

XLDnaute Accro
Re : Simplifier formule sommeprod en VBA

Bonjour



Sélectionne ta cellule (puis fais Outils/Macros/Nouvelle macro

Place le curseur à la fin de la formule puis tape sur ENTREE

Ensuite arrête l'enregistrement de la macro


Va dans VBE, tu auras la macro contenant l'équivalent de la formule en VBA.

Dans cette macro, avant End Sub

saisis la ligne suivante:

ActiveCell.Value=ActiveCell.Value
 

jlbox

XLDnaute Nouveau
Re : Simplifier formule sommeprod en VBA

Merci vbacrumble pour ta réponse, c'est exactement ce que je voulais. Par contre la formule dans la fenêtre VBA est très longue et donc difficile à lire sur une ligne. Y-a-t-il un signe, une ponctuation ou je ne sais quoi pour un renvoi à la ligne après chaque condition (*) ...
 

Tibo

XLDnaute Barbatruc
Re : Simplifier formule sommeprod en VBA

Bonjour,

Pour obtenir un renvoi à la ligne dans une formule, tu peux taper Alt Entrée là où tu souhaites ton retour à la ligne.

Ca permet effectivement une lecture plus facile.

Sinon, pas tout analysé ta formule, mais certaines parties peuvent être simplifiées. Par exemple :

TEXTE(64;"0")) --> "64"

Peut-être d'autres simplifications sont-elles envisageables, mais pas évident sans le fichier qui va avec cette formule.

@+
 

jlbox

XLDnaute Nouveau
Re : Simplifier formule sommeprod en VBA

Ci-joint le code obtenu en vba :

Sub Macro1()
'
' Macro1 Macro
'

'
Range("B50").FormulaR1C1 = _
"=IF(AND(R1C7=""Toutes"",R2C7=""Toutes""),-SUMPRODUCT((A_MOIS<=12)*((A_ACTIVITE=""PLAGE"")+(A_ACTIVITE=""PLONGEE""))*(LEFT(A_CODE_NATURE,2)=TEXT(64,""0""))*(A_IMPUTE))," & Chr(10) & "IF(AND(R1C7=""Toutes"",R2C7<>""Toutes""),-SUMPRODUCT((LEFT(A_CI_SERVICE,LEN(R2C7))=TEXT(R2C7,""0""))*(A_MOIS<=12)*((A_ACTIVITE=""PLAGE"")+(A_ACTIVITE=""PLONGEE""))*(LEFT(A_CODE_NATURE,2)=TEXT(64,""0""))*(A_IMPUTE)),IF(AND(R1C7<>""Toutes"",R2C7=""Toutes""),-SUMPRODUCT((A_CODE_ETAB=R1C7)*(A_MOIS<=12)*((A_ACTIVITE=""PLAGE"")+(A_ACTIVITE=""PLONGEE""))*(LEFT(A_CODE_NATURE,2)=TEXT(64,""0""))*(A_IMPUTE)),-SUMPRODUCT((A_CODE_ETAB=R1C7)*(LEFT(A_CI_SERVICE,LEN(R2C7))=TEXT(R2C7,""0""))*(A_MOIS<=12)*((A_ACTIVITE=""PLAGE"")+(A_ACTIVITE=""PLONGEE""))*(LEFT(A_CODE_NATURE,2)=TEXT(64,""0""))*(A_IMPUTE)))))"
Range("B50").Select
ActiveCell.Value = ActiveCell.Value

End Sub

Le problème est donc que tout est sur une seule ligne... donc pas très simple pour la lecture.

A+.
 

jlbox

XLDnaute Nouveau
Re : Simplifier formule sommeprod en VBA

Bonjour Tibo,

J'essaye Alt Entrée mais cela ne fonctionne pas... ? Je travaille avec Excel 2007, je ne sais pas si cette information est importante...?

Erratum, Alt Entrée fonctionne dans la feuille Excel mais je cherche son "équivalent" en VBA...

A+
 
Dernière édition:

jlbox

XLDnaute Nouveau
Re : Simplifier formule sommeprod en VBA

Re bonjour vbacrumble,

J'ai utiliser l'underscore mais sans succès... ci-joint l'exemple utilisé

Sub Macro1()
'
' Macro1 Macro
'

'
ActiveCell.FormulaR1C1 = "=SUM(R[2]C:R[2]C[2], _
100000000)"


End Sub


J'ai comme message Erreur de compilation : erreur de syntaxe.
 

vbacrumble

XLDnaute Accro
Re : Simplifier formule sommeprod en VBA

Re

Edition: bonjour Pierrot93 (bing ;) )

La bonne syntaxe est la suivante

Code:
Sub Macro1()
ActiveCell.FormulaR1C1 = _
        "=SUM(R[2]C:R[2]C[2]," _
        & "100000000)"
End Sub

Il faut que cela reste une String valide, par exemple cette syntaxe sera bonne également
Code:
Sub Macro2()
ActiveCell.FormulaR1C1 = _
        "=SUM(R[2]C" _
        & ":" _
        & "R[2]C[2]" _
        & "," _
        & "1000" _
        & "0" _
        & "0000)"
End Sub
 
Dernière édition:

Discussions similaires

Réponses
0
Affichages
155
Réponses
17
Affichages
999
Réponses
9
Affichages
460

Statistiques des forums

Discussions
312 310
Messages
2 087 127
Membres
103 479
dernier inscrit
Compta