Varibles dans Somme.si.ens/NB.SI

Bonjour,

Je bloque sur l'utilisation de formules de calculs dans VBA,

j'ai défini des plages

        Dim Derligne As Long
        Derligne = Sheets(1).Range("H" & Rows.Count).End(xlUp).Row

        Dim Plage_1
        Plage_1 = Sheets(1).Range("G2:G" & Derligne).Value

        Dim Plage_2
        Plage_2= Sheets(1).Range("B2:B" & Derligne).Value

        Dim Plage_3
        Plage_3 = Sheets(1).Range("D2:D" & Derligne).Value

        Dim Plage_4
        Plage_4= Sheets(1).Range("C2:C" & Derligne).Value

   Cells(24, 6).Value =_
"=SUMIFS(Plage_1,Plage_2,1,Plage_3,""EEE"",Plage_4,"""")/COUNTIFS(Plage_2,1,Plage_3,""EEE"",Plage_4,"""")"

La manière de procéder est elle la bonne ?

la syntaxe est elle bonne ?

Merci d'avance

Bonsoir,

D'abord, les déclarations se mettent en tête de procédure , avant le code exécutable. : (VBA peut donc les lire en premier réserve l'espace mémoire pour toutes les variables...)

En second lieu, plutôt que répéter Sheets(1), il convenait de le mettre sous bloc With, cela permet à VBA de le mettre en mémoire et d'être plus efficace et tu as moins à écrire.

En 3e lieu, tu fais une formule pour Excel (il n'y a pas de formules dans VBA), pour la placer dans une cellule. La propriété Value ne te permets pas d'insérer une formule, Il faut utiliser Formula dans ton cas. (erreur de syntaxe ici)

Range dispose de plusieurs propriétés en ce qui concerne le contenu : Value (la valeur de la cellule, celle qui est mémorisée par Excel), Text (ce que l'on voit dans la cellule, éventuellement formaté), Formula (avec ses déclinaisons en Local et/ou R1C1, obligatoire pour une formule), et Value2 (comme Value, sauf pour les dates et données monétaires).

Enfin la rédaction de la formule : là encore erreur de syntaxe, car tu places entre guillemets tes variables, c'est à dire tu mets dans la formule le nom de la variable (qui ne renverra pas sa valeur). Seuls les éléments que tu taperais dans la cellule pour entrer la formule sont à mettre entre guillemets, les variables dont tu veux inclure le contenu sont raccordés par des &...

Mais ce ne sera pas tout encore ! Une formule est une expression texte qui, affectée avec la propriété Formula, pourra ainsi être transformée en formule par Excel (tu la verras sous la forme sous laquelle tu aurais dû la taper dans la cellule (selon paramètres régionaux). La formule attend normalement des références de plages, hors avec tes variables, tu vas lui inclure des tableaux, soit des matrices de valeurs, ce qui pourrait fonctionner en utilisation de fonctions Excel en VBA (utilisant alors une syntaxe VBA), pour les fonctions acceptant des matrices... Mais NB.SI renvoie #VALEUR! dès que tu essaies de lui fourrer une matrice (non définie comme plage), et SOMME.SI je n'en suis pas certain (pas sûr d'avoir déjà tenté...).

Je pense donc que tu aurais intérêt, à modifier tes variables en String et leur affecter l'adresse des plages... (Address renverra une adresse de plage en références absolues).

NB- Pense que tu as quelques cas dans la formule où entre deux variables tu n'as que la virgule à mettre entre guillemets (ça risque de se louper facilement).

Cordialement.

Tom00 a écrit :

La manière de procéder est elle la bonne ?

Au-delà des remarques de l'expert MFerrand, la meilleure façon de programmer une formule est d'abord par apprentissage pour moi. Cela évite toute erreur de syntaxe.

Mais généralement je ne fais par macro tout sauf des formules !

Bonjour, salut Steelson !

Je dois dire que mon raisonnement habituel (tout à fait primaire) repose sur : Excel <=> Formules / VBA <=> Résultats. Sans naturellement en faire une règle absolue... Tant qu'on ne met pas à contribution VBA les formules sont plus aisées à composer manuellement puis à étendre, et elles joueront leur rôle ; obtenir l'identique avec VBA est plus long et si l'on a intérêt à utiliser VBA c'est souvent pour éviter des formules qui alourdissent, donc pour insérer des résultats de calculs...

D'ailleurs, la formulation de notre ami n'indique pas absolument qu'il voulait insérer une formule.

Je bloque sur l'utilisation de formules de calculs dans VBA,

Il reste possible qu'il visait à opérer le calcul et insérer le résultat, mais n'était pas en mesure d'opérer la réalisation du calcul en VBA et a tenté de le construire en l'instar d'une formule Excel... On saura ce qu'il en est à son retour !

Rechercher des sujets similaires à "varibles somme ens"