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.
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.
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 ?
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 :
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.
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 :
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.
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.