Problème avec macro somme sur une colonne

jacksud

XLDnaute Occasionnel
En colonne E j’ai différents critères « ‘TOTO’ ‘TATA’’Vide’
En colonne G j’ai des montants et en cellule G1 j’ai le résultat de la somme.

Si je fais un filtre automatique à la main sur le critère ‘TOTO’ je trouve la valeur 1572k€ et quand je lance ma macro je trouve 2292k€

Je pense que le filtre de la macro n’arrive pas à exclure les cellules vides de la colonne E.
Ou alors il ne fait pas un filtre strict sur TOTO en gardant les cellules vides.

Si vous avez une idée ?

Voir fichier en pièce jointe

Jack Sud
 

Pièces jointes

  • Somme colonne G.xls
    53 KB · Affichages: 48

myDearFriend!

XLDnaute Barbatruc
Re : Problème avec macro somme sur une colonne

Bonjour jacksud, le Forum,

Code:
[COLOR=NAVY]Set[/COLOR] Plage = Range(Range("E65536").[COLOR=NAVY]End[/COLOR](xlUp), Range("E3"))
n'inclue pas la totatlité de la plage souhaitée mais s'arrête à la ligne 393 justement à cause des cellules vides en E394:E403.
Cette plage E394:E403 n'est donc pas filtrée et reste donc inclue dans ton sous-total.

Tu peux faire par exemple :
Code:
[COLOR=NAVY]Set[/COLOR] Plage = Range(Range("D65536").[COLOR=NAVY]End[/COLOR](xlUp).Offset(0, 1), Range("E3"))
pour régler ton problème.

Cordialement,
 

jacksud

XLDnaute Occasionnel
Re : Problème avec macro somme sur une colonne

Merci beaucoup myDearFriends c'est ce que je voulais. J'ai pataugé une partie de l’après midi avec ce problème de somme.

Encore deux questions si je n’abuse pas trop :
Pourquoi AutoField Field=1 alors que lorsque l’on fait par enregistreur de macro il écrit Selection.AutoFilter Field:=5,

Comment mettre deux critères à la suite par exemple filtrer sur TOTO et les vides en même temps ?

Comment écrit une exclusion par exemple les vides ?

Je sais cela fait trois questions…..

Jack
 

myDearFriend!

XLDnaute Barbatruc
Re : Problème avec macro somme sur une colonne

Re,
Pourquoi AutoField Field=1 alors que lorsque l’on fait par enregistreur de macro il écrit Selection.AutoFilter Field:=5,
Tout d'abord, on parle bien d'AutoFilter et non d'AutoField.
Ensuite, tu n'as visiblement pas compris le code que tu essais de mettre en place. Dans le code, tu utilises Field:=1 car il n'y a qu'une seule colonne concernée par le filtre (voir ton code : Plage ne comprend qu'une seule colonne !). Si tu utilises l'enregistreur et qu'il t'indique Field:=5, cela signifie simplement que ta feuille comporte au moins 5 colonnes en autofiltre et que c'est la 5ième que tu as fait jouer.

Comment mettre deux critères à la suite par exemple filtrer sur TOTO et les vides en même temps ?
Là encore tu peux te servir de l'enregistreur de macro et choisir manuellement "(personnalisé...)" dans la liste, puis Egal à Toto OU Egal à (vide)
Ca te donnera un code qui ressemble à ça :
Code:
[COLOR=GRAY][B][I]RÉSULTAT DE L'ENREGISTREUR DE MACRO POUR "TOTO OU VIDE"[/I][/B][/COLOR]

    Selection.AutoFilter Field:=5, Criteria1:="=TOTO", Operator:=xlOr, _
        Criteria2:="="
que tu vas pouvoir adapter comme suit dans ton code :
Code:
Plage.AutoFilter Field:=1, Criteria1:="=*TOTO*", Operator:=xlOr, _
        Criteria2:="="
Comment écrit une exclusion par exemple les vides ?
Le principe reste le même que ci-dessus. Tu utilises l'enregistreur de macro et tu choisis manuellement "(Non vides)" dans la liste... Puis, tu adaptes pour ton code.

Cordialement,
 

jacksud

XLDnaute Occasionnel
Re : Problème avec macro somme sur une colonne

Re,

Tout d'abord, on parle bien d'AutoFilter et non d'AutoField.
Ensuite, tu n'as visiblement pas compris le code que tu essais de mettre en place. Dans le code, tu utilises Field:=1 car il n'y a qu'une seule colonne concernée par le filtre (voir ton code : Plage ne comprend qu'une seule colonne !). Si tu utilises l'enregistreur et qu'il t'indique Field:=5, cela signifie simplement que ta feuille comporte au moins 5 colonnes en autofiltre et que c'est la 5ième que tu as fait jouer.


Là encore tu peux te servir de l'enregistreur de macro et choisir manuellement "(personnalisé...)" dans la liste, puis Egal à Toto OU Egal à (vide)
Ca te donnera un code qui ressemble à ça :
Code:
[COLOR=GRAY][B][I]RÉSULTAT DE L'ENREGISTREUR DE MACRO POUR "TOTO OU VIDE"[/I][/B][/COLOR]

    Selection.AutoFilter Field:=5, Criteria1:="=TOTO", Operator:=xlOr, _
        Criteria2:="="
que tu vas pouvoir adapter comme suit dans ton code :
Code:
Plage.AutoFilter Field:=1, Criteria1:="=*TOTO*", Operator:=xlOr, _
        Criteria2:="="
Le principe reste le même que ci-dessus. Tu utilises l'enregistreur de macro et tu choisis manuellement "(Non vides)" dans la liste... Puis, tu adaptes pour ton code.

Cordialement,

Merci pour toutes ces réponses et pour ta grande pédagogie.
Si tu connais un bouquin ou un site pour se former sur VBA je suis preneur. Car comme tu l’a remarqué je suis plus intuitif que raisonnés. Je ne suis pas programmeur seulement un cadre qui essai de se dépatouiller avec EXCEL.

Encore merci Jack
 

Discussions similaires

Réponses
2
Affichages
388
Réponses
20
Affichages
908
Réponses
5
Affichages
277

Statistiques des forums

Discussions
315 261
Messages
2 117 863
Membres
113 357
dernier inscrit
clem1536