Somme Si Ens en vba Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
M
MrVBA
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 25 octobre 2017
Version d'Excel : 2010 FR

Message par MrVBA » 6 mars 2019, 15:54

Bonjour à tous,

Je vous sollicite car j'ai un tableau qui s'étend sur A2:H386298, sur lequel je souhaite réaliser un somme.si.ens.

Jusque là tout va bien, je maitrise la formule sur Excel sauf que le nombre de lignes à traiter fait buguer le fichier.

Je voudrais donc passer par vba, et c'est là que ça se complique pour moi.

Voici mon code actuel, je vous remercie d'avance de vous pencher sur mon cas et de bien vouloir m'indiquer ce qui cloche.
Merci à vous !
Sub Silence1()
Dim derLigne As Long
derLigne = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To derLigne
t = WorksheetFunction.SumIfs(Range("F & i : F & derLigne"), Range("B & i : B & derLigne"), Range("G & i"))
Cells(i, 7) = Evaluate(t)
Next
End Sub
Avatar du membre
Pedro22
Passionné d'Excel
Passionné d'Excel
Messages : 3'933
Appréciations reçues : 401
Inscrit le : 26 janvier 2017
Version d'Excel : 2010 FR
Version de Sheets : FR
Téléchargements : Mes applications

Message par Pedro22 » 6 mars 2019, 16:17

Bonjour,

Tu as une erreur dans le nom de tes ranges. La position de tes guillemets fait que tout est interprété comme un nom, et pas comme des variables.

Pour mieux comprendre, voilà un petit script que tu peux tester :
Sub ComprendreGuillemets()

Nom = "Pedro"
i = 22

MsgBox Nom & i
MsgBox "Nom" & i
MsgBox "Nom & i"

End Sub
En clair, c'est :
Range("F" & i & ":F" & derLigne)
'et pas :
Range("F & i : F & derLigne")
Merci de prendre 30 sec pour lire la charte du forum.
Quelques conseils : ici
M
MrVBA
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 25 octobre 2017
Version d'Excel : 2010 FR

Message par MrVBA » 6 mars 2019, 16:37

Bonjour Pedro et merci pour ta réponse,

J'ai modifié les guillemets comme spécifié dans ton message mais je fais maintenant face à une erreur de compilation au niveau du " : " entre les F..

Merci à toi
Avatar du membre
Pedro22
Passionné d'Excel
Passionné d'Excel
Messages : 3'933
Appréciations reçues : 401
Inscrit le : 26 janvier 2017
Version d'Excel : 2010 FR
Version de Sheets : FR
Téléchargements : Mes applications

Message par Pedro22 » 6 mars 2019, 16:42

MrVBA a écrit :
6 mars 2019, 16:37
Bonjour Pedro et merci pour ta réponse,

J'ai modifié les guillemets comme spécifié dans ton message mais je fais maintenant face à une erreur de compilation au niveau du " : " entre les F..

Merci à toi
Peux-tu transmettre ton dernier code VBA testé et m'en dire un peu plus sur le message d'erreur et sur la ligne surlignée en jaune ?
Si tu pouvais fournir un fichier représentatif et anonymisé, ce serait top.
Merci de prendre 30 sec pour lire la charte du forum.
Quelques conseils : ici
M
MrVBA
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 25 octobre 2017
Version d'Excel : 2010 FR

Message par MrVBA » 6 mars 2019, 16:52

Voici un fichier test, l'erreur se situe au niveau de la ligne 7.

Merci Pedro
TestSomme.xlsm
(19.98 Kio) Téléchargé 23 fois
Avatar du membre
Pedro22
Passionné d'Excel
Passionné d'Excel
Messages : 3'933
Appréciations reçues : 401
Inscrit le : 26 janvier 2017
Version d'Excel : 2010 FR
Version de Sheets : FR
Téléchargements : Mes applications

Message par Pedro22 » 6 mars 2019, 16:59

Tu as mal recopié ma correction. Tes ":" devraient être entre guillemets et il manque un "&" entre ta variable i et ce ":" (voir correction ci-dessous).
Attention aussi aux feuilles à laquelle se rattache chaque Range. J'ai modifié l'écriture de sorte que les Range qui commencent par "." sont rattachés à "Feuil1", les Range rattachés à "Feuil2" sont clairement écrit. Comme ça, pas besoin d'activer ou sélectionner une feuille, il suffit de préciser la feuille dans le code.
Evaluate est inutile, tu peux directement écrire le résultat dans la cellule.
Sub Silence1()
Dim derLigne As Long, i As Long
derLigne = Cells(Rows.Count, 1).End(xlUp).Row
With Sheets("Feuil1")
    For i = 2 To derLigne
        MsgBox ("F" & i)
        Sheets("Feuil2").Cells(i, 7).Value = WorksheetFunction.SumIfs(.Range("F" & i & ":F" & derLigne), .Range("B" & i & ":B" & derLigne), Sheets("Feuil2").Range("G" & i))
    Next i
End With
End Sub
Merci de prendre 30 sec pour lire la charte du forum.
Quelques conseils : ici
M
MrVBA
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 25 octobre 2017
Version d'Excel : 2010 FR

Message par MrVBA » 6 mars 2019, 17:25

Super tout fonctionne merci Pedro !!
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message