Traduction Excel -> VBA

Madjer

XLDnaute Nouveau
Bonjour à toutes et à tous !

Je me permets de vous solliciter pour un premier problème.
Alors c'est très simple :

J'ai une formule qui fonctionne très bien dans mon classeur. La voici :

Code:
=SOMMEPROD(SOUS.TOTAL(3;DECALER(D1;LIGNE(INDIRECT("1:"&LIGNES(D$2:D$150000)));))*(NBCAR(E$2:E$150000)>1))

(Cette formule renvoie un nombre).

Le problème est le suivant : J'aimerais, via une MsgBox, afficher le résultat de cette formule.
Je sais bien configurer la MsgBox, le problème se situe au moment de définir ma formule pour la placer dans une variable que j'afficherai.

Code:
valeur = "=SUMPRODUCT(SUBTOTAL(3,OFFSET(R[-32920]C[1],ROW(INDIRECT(""1:""&ROWS(R2C[1]:R150000C[1]))),))*(LEN(R2C[2]:R150000C[2])>1))"
MsgBox valeur

En VBA, quelque chose coince, je ne sais pas quoi...

Comme le disait très bien les Beatles : "HELP ! I NEED SOMEBODY HELP !" ;)
 

Caillou

XLDnaute Impliqué
Re : Traduction Excel -> VBA

Bonjour,

Tu peux jeter un œil sur Application.WorksheetFunction qui permet d'utiliser des fonctions de la feuille de calcul en VBA.

Sinon, si ta formule marche, tu peux stocker le résultat dans une cellule et utiliser cette cellule pour ton inputbox....

Caillou
 

Madjer

XLDnaute Nouveau
Re : Traduction Excel -> VBA

Caillou,

Oui, je connais (un peu) Application.WorksheetFunction, c'est d'ailleurs là où je bloque, dans la syntaxe de la formule en VBA qui est précédée par ce fameux "Application.WorksheetFunction".

Pour ta 2ème proposition, j'y ai pensé en effet, mais je trouve cette méthode "sale".
J'aimerais faire un truc propre, sans altérer le classeur vois-tu !

Merci pour ton aide, si tu as d'autres propositions, je suis preneur ! :D
 

job75

XLDnaute Barbatruc
Re : Traduction Excel -> VBA

Bonjour Madjer, salut Caillou, eriiiic,

Pourquoi une formule si compliquée ? A priori il suffit de :

Code:
=SOMMEPROD((Feuil1!$D$2:$D$150000<>"")*(NBCAR(Feuil1!$E$2:$E$150000)>1))
En VBA on utilisera :

Code:
Sub test()
Dim valeur
valeur = ExecuteExcel4Macro("SUMPRODUCT((Feuil1!R2C4:R150000C4<>"""")*(LEN(Feuil1!R2C5:R150000C5)>1))")
MsgBox valeur
End Sub
A+
 

eriiic

XLDnaute Barbatruc
Re : Traduction Excel -> VBA

Tu as regardé l'aide sur evaluate() ?
Il faut la formule entre " " et sans le =
Et si tu avais mis un classeur de travail on pourrait tester avant de te proposer...

eric
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Traduction Excel -> VBA

Re,

Avec Evaluate :

Code:
Sub test1()
Dim valeur
valeur = Evaluate("SUM((Feuil1!$D$2:$D$150000<>"""")*(LEN(Feuil1!$E$2:$E$150000)>1))")
MsgBox valeur
End Sub
SUM suffit.

Ceci est équivalent :

Code:
Sub test1()
Dim valeur
valeur = [SUM((Feuil1!$D$2:$D$150000<>"")*(LEN(Feuil1!$E$2:$E$150000)>1))]
MsgBox valeur
End Sub
Edit : toutes mes formules utilisent Feuil1, nom de la feuille.

Adaptez-les avec le nom véritable.

A+
 
Dernière édition:

Madjer

XLDnaute Nouveau
Re : Traduction Excel -> VBA

Bonjour à tous.

@eriiic :
Excuse ma nullité, mais j'ai beau essayer comme tu dis, j'ai toujours le problème au moment d'évaluer la fonction.
Tu as raison, j'ai joint un Excel qui reprend mon point, c'est plus simple comme ça.

@Job75 :
Job, merci pour ta contribution, mais malheureusement ça ne fonctionne pas ainsi, car je ne traite que sur des tableaux filtrés, j'ai tout expliqué dans le fichier joint, tu peux y jeter un coup d'oeil si tu veux :)
Si tu as d'autres idées, je suis preneur !

Je vous remercie de votre implication :D
 

Pièces jointes

  • Exemple 3.xlsx
    13.4 KB · Affichages: 31
  • Exemple 3.xlsx
    13.4 KB · Affichages: 36
  • Exemple 3.xlsx
    13.4 KB · Affichages: 36

job75

XLDnaute Barbatruc
Re : Traduction Excel -> VBA

Bonjour Madjer, le forum,

OK avec le filtre, alors utilisez :

Code:
Sub test()
Dim valeur
valeur = [SUM(SUBTOTAL(3,OFFSET(D1,ROW(2:150000)-1,))*(LEN(E2:E150000)>1))]
MsgBox valeur
End Sub
Evaluate ou les crochets c'est la même chose.

A+
 

Statistiques des forums

Discussions
312 438
Messages
2 088 417
Membres
103 847
dernier inscrit
Girardon