Filtre élaboré ne filtre pas

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Chouchounette

XLDnaute Nouveau
Bonjour le forum.
J'utlise un filtre élaboré dans une macro. Il y a deux semaines il fonctionnait..maintenant il ne fonctionne plus..strange!!
Je ne comprends pas le souci.
La seule modification que j'ai apporté est que j'ai rajouté une colonne dans ma Database. Est ce que cela change quelque chose?
Merci de votre aide.

Je vous joints le code:

Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 2 And Target.Column = 3 Then
Sheets("Bilan").Range("Critères").Calculate
Worksheets("Bilan").Range("Database") _
.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Bilan").Range("Critères"), _
CopyToRange:=Range("A7:E7"), Unique:=False
 
Re : Filtre élaboré ne filtre pas

Bonsoir Chouchounette, Kotov, bonsoir le forum,

D'accord avec Kotov pour un fichier exemple mais les quelques lignes de code que tu nous montres indiquent déjà que le nombre de colonne est pris en compte. Donc rien de très étonnant à ce que ça ne fonctionne plus si tu as rajouté une colonne.

ton code commentée :

l'événement Change se produit chaque fois qu'il y a un changement dans une cellule (édition, effacement, etc...)
Sub Worksheet_Change(ByVal Target As Range)

si le changement à lieu dans la ligne 2 et la colonne 3 (soit C2) alors
si tu as rajouté une colonne ça peut ne plus fonctionner...
If Target.Row = 2 And Target.Column = 3 Then
c'est ici que tu dois modifier pour adapter à l'ajout de la colonne

la plage nommée "Critères"de l'onglet "Bilan" est recalculée
Sheets("Bilan").Range("Critères").Calculate

code pour le filtre élaboré de l'onglet "Bilan" sur la plage nommé "Database"
Worksheets("Bilan").Range("Database") _
.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Bilan").Range("Critères"), _
CopyToRange:=Range("A7:E7"), Unique:=False
 
Dernière édition:
Re : Filtre élaboré ne filtre pas

Bonjour le forum.
Merci Kotov de l'intérêt que tu as porté à ma question et merci Robert de tes éclaircissements.
Effectivement le problème réside dans le fait d'avoir ajouté une colonne. J'ai finalement abandonné ce filtre car ma base évolue et ce filtre ne peut pas prendre en compte les rajouts de lignes ou de colonnes.
Bonne journée à tous
 
Re : Filtre élaboré ne filtre pas

Bonjour à tous et à toutes.
Merci bhbh de ta remarque, mais alors comment déterminer dynamiquement ma Database?
Pour l'instant j'ai fait (Insertion>Nom>Définir) et je définis une plage "finie" de cellules que j'ai nommé Database..ce qui n'est pas dynamique.

Bonne journée!
 
Re : Filtre élaboré ne filtre pas

Bonjour,
pour déterminer dynamiquement une plage de cellules comportant N colonnes et N lignes, tu fais Insertion/Nom/Définir
tu mets donc ton nom Database, et dans la case du bas (Fait Référence à 🙂
tu tapes :
=DECALER(Feuil2!$A$1;0;0;NBVAL(Feuil2!$A:$A);NBVAL(Feuil2!$1:$1))

Explications : la méthode fonction DECALER permet de définir :
- une cellule de référence (Feuil2!$A$1), où ta base débute.
- de combien de lignes tu veux la décaler vers le bas : le premier 0 (optionnel, je l'ai rajouté pour l'exemple) si tu mets 3, ta cellule de réf sera donc $A$4
- idem pour les colonnes (le deuxième 0, également optionnel)
attention pour ces deux 0, s'ils sont optionnels, les points virgule ne le sont pas
- ensuite la hauteur (nb de lignes) de ta base (NBVAL(Feuil2!$A:$A))
ici, on suppose que toutes les cellules de la ligne A seront forcément remplies dans la base, qu'il n'y aura pas de cellules vides au milieu...
- et enfin la largeur nb de colonnes) de ta base (NBVAL(Feuil2!$1:$1))
ici, on suppose que tous les en-têtes de colonnes, situées dans la ligne 1 ont une valeur. dans ton cas, si tu as mis tes critères en H1:H2 par exemple, il faut donc enlever 1 au résultat, sinon ta base aura une colonne de trop.
donc on fait NBVAL(Feuil2!$A:$A)-1

la formule finale donnera donc :

=DECALER(Feuil2!$A$1;;;NBVAL(Feuil2!$A:$A);NBVAL(Feuil2!$1:$1)-1)

PS pas la peine de tout taper à la main, tu écris :
=decaler(**ici, tu cliques sur ta première cellule**;;;**3 points-virgule** puis nbval(**clique sur la colonne A**);nbval(**clique sur la première ligne(le1 à gauche)**)-1) et tu fais entrer.
J'espère avoir répondu à ton voeu
Bonne lecture

Edit : Bonjour également robert; eu des pb de connexion
Bien vu pour la méthode vba
 
Dernière édition:
Re : Filtre élaboré ne filtre pas

Bonjour le fil, bonjour le forum,

Définir la plage dynamiquement peut s'avérer relativement facile à faire du style de A1 à la dernière ligne éditée de la colonne F, ça donnerait :
Code:
Dim pl As Range
Set pl = Range("A1:F" & Range("F65536").End(xlUp).Row)
pl.Name = "Database "
Ça peut être aussi tout simplement
Code:
Activesheet.UsedRange.Name = "Database "
Mais il serait préférable que tu envoies un petit fichier exemple pour que nous puissions savoir comment la plage peut évoluer et te proposer la meilleure solution.

Édition :

Bonjour bhbh on s'est croisés. Chouchounette, tu as maintenant la version Formule et la version VBA.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
856
Retour