Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Filtre en excluant une valeur récurrente

Stéfane

XLDnaute Occasionnel
Bonjour à tous,

Je souhaite filtrer une colonne en excluant la valeur la plus récurrente de celle-ci, pour copier coller les autres valeurs.
Grace à une formule en case M1 du type "=SI(MODE" je fais ressortir la valeur la plus récurrente de la colonne dans la case M1.
C'est cette valeur qui apparait dans la case M1 que je souhaite exclure de mon filtrage avec une formule vba du type.

Selection.AutoFilter Field:=13, Criteria1:="<>" & Worksheets("Feuil1").Range("M1").Value, Operator:=xlAnd

Je bloque sur l'écriture et la position de "<>" dans la formule pour exclure la valeur % qui apparait dans la case M1.

En clair filtrer pour qu'il reste toutes les autres valeurs % du filtre (sauf la plus récurrente) pour les copier coller sur une autre feuille.

Merci pour votre aide.
Stefane.
 

job75

XLDnaute Barbatruc
Bonjour Stéfane,

Utilisez un tableau structuré, son repérage est plus facile.

Et pour travailler sur des valeurs décimales en VBA il faut remplacer la virgule par le point :
VB:
Sub Filtrer()
With [Tableau1].ListObject.Range 'tableau structuré
    If IsNumeric(.Parent.[M1]) Then .AutoFilter 13, "<>" & Replace(.Parent.[M1], ",", ".")
End With
End Sub
A+
 

Pièces jointes

  • Filtre(1).xlsm
    18.4 KB · Affichages: 5

Stéfane

XLDnaute Occasionnel
Bonjour Job75,

Merci beaucoup pour votre aide et votre réponse.
Je ne peux malheureusement pas utiliser de tableau structuré car il s'agit d'un tableau pro.
De ce fait j'essaye d'adapter la structure de la macro à mon besoin tel que :
With ActiveWorkbook.Sheets("Feuil1").ListObject.Range
Mais cela me renvoi systématiquement une erreur.

Existe t'il une solution ou une modification permettant de le faire ?

D'avance Merci.
 

job75

XLDnaute Barbatruc
Sans tableau structuré ce sera seulement plus difficile pour agrandir le tableau.

Pour le filtre automatique aucun problème, fichier (2) :
VB:
Sub Filtrer()
With Feuil1 'CodeName de la feuille
    If IsNumeric(.[M1]) Then .[A2:M10000].AutoFilter 13, "<>" & Replace(.[M1], ",", ".")
End With
End Sub
 

Pièces jointes

  • Filtre(2).xlsm
    17.8 KB · Affichages: 4

Stéfane

XLDnaute Occasionnel
Bonjour Job75,

Merci encore pour votre aide.
Après essai j'ai l'erreur "Exécution 424" Objet requis



Dans la case M1 j'ai cette formule qui me permet de trouver valeur la plus récurrente de la colonne.

=SIERREUR(MODE(SI(($J$2:$J$2000=$J$1)*($M$2:$M$2000)>0;$M$2:$M$2000));"")

Pensez-vous que c'est cette formule qui provoque l'erreur ?
 

Pièces jointes

  • 1645797124033.png
    7.3 KB · Affichages: 19

job75

XLDnaute Barbatruc
"Remises" n'est sûrement pas un CodeName.

Dans VBA en haut à gauche c'est le nom de feuille qui n'est pas entre parenthèse (Feuil1, Feuil2...).

Et pourquoi tester A2, c'est M1 qui doit l'être ???

Enfin la plage su filtre doit commencer en A2 puisqu'on parle de la colonne 13.
 

Stéfane

XLDnaute Occasionnel
Effectivement, désolé, je n'avait pas compris le CodeName, cela fonctionne effectivement très bien!!
Pour A2 ou M1, oui la plage commence en A2, mais j'ai l'impression que les 2 fonctionnent, j'ai remis sur [M1:M10000]
Merci beaucoup pour votre aide. j'ai longuement cherché et n'aurait jamais trouvé cela.

Juste une dernière question : Est-ce qu'il est possible de modifier le CodeName justement, par le nom de la Feuill, juste parce que je suis amener à supprimer ma Feuill pour en remettre une nouvelle régulièrement.
C'est juste pour éviter de devoir fermer le classeur et l'ouvrir à nouveau à chaque fois car la Feuill1 passera à Feuill2, Feuill3, etc,..... ou besoin de modifier le CodeName dès que je change de Feuill.

Merci encore, et je prend bonne note du "point" à la place de la virgule pour pour le filtrage des valeurs en décimales.
 

Stéfane

XLDnaute Occasionnel
Oui c'est ça par exemple Sheets("toto") ce serait vraiment bien.
Ok pour M2 oui logique mais 13 par 1 là je comprends moins, pour moi 13 est le numéro de colonne et Colonne M = 13, ou j'ai peut-être raté quelque chose.....
 

Stéfane

XLDnaute Occasionnel
Bonjour à tous,

Je relance ce post car j'ai des petits soucis avec la formule ci dessus.
Après de nombreux tests de cette formule :
With ActiveSheet
If IsNumeric(.[M1]) Then .[M2:M2000].AutoFilter 13, "<>" & Replace(.[M1], ",", ".")
End With
la partie Replace(.[M1], ",", ".") provoque des erreurs lors du copier coller. Celle-ci copie de façon aléatoire la première ligne du tableau (l'entête) au lieu de la deuxième c.a.d celle sur laquelle se trouve les bonnes valeurs à copier coller.
J'ai bien essayé de multiples modifications sans succès.
Existe t'il une solution permettant de résoudre ce problème ?

Merci pour votre aide.
 

Stéfane

XLDnaute Occasionnel
Bonsoir job75,

Oui j'avais bien pris en compte cela lors de votre dernier post mais lorsque je remplace le 13 par 1, le filtrage ne se réalise plus et cela copie et colle quasiment tout le tableau.

J'ai même poussé ma recherche en testant les chiffres de 1 à 15 et cela provoque le même problème.
C'est uniquement lorsque je met 13 que le filtre fonctionne bien mais me copie aussi des ligne de l'entête.
Je viens à l'instant de refaire le test et j'ai toujours ce même problème....
 

Stéfane

XLDnaute Occasionnel
Oui c'est vrai, après de nouveaux tests je remarque que le problème apparait, non pas lors du filtrage, mais lors du copier coller....
Là je ne voit pas d'où cela peux venir, j'ai cette autre formule pour filtrer les valeurs à 0,00% :
Selection.AutoFilter Field:=13, Criteria1:="<>0:00", Operator:=xlAnd et cela fonctionne parfaitement avec le copier coller pas d'erreur.
Et avec cette formule
If IsNumeric(.[M1]) Then .[M2:M2000].AutoFilter 13, "<>" & Replace(.[M1], ",", ".")
Le essais me laisse vraiment à penser que la partie "Replace(.[M1], ",", ".")" provoque des erreurs.......
Je sèche complètement!!
 

Discussions similaires

Réponses
1
Affichages
143
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…