Filtre sur plusieurs critères (dans des champs de saisie)
Bonjour à tous,
j'essaie de créer un filtre sur 9 critères au maximum quand les 9 champs sont renseignés.
j'ai créé un bouton de recherche qui me renvoie vers un userform dans lequel je dois renseigner au moins 1 critère de recherche minimum.
je bloque je n'ai jamais fais ce style de recherche. Est ce que vous pourriez m'aider? J'ai l'impression que c'est très simple mais je n'y arrive pas. Tout les lignes sont supprimé quand j'ai fait des essais.
Merci de votre aide.
Mon fichier Ci-joint
Bonjour Dam777
Je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER] et notamment
- Dans tous les cas, ne postez JAMAIS de fichiers avec des informations personnelles ou confidentielles (cet utilitaire peut vous aider à les retirer).
A+
Merci bruno,
Tout les infos que j'ai renseigné "noms prénoms et numéro de tel" ont été mis au hasard. C'est un fichier test.
Re,
Et bien pas de chance
je n'ai pas vérifier le reste du coup
Merci d'utiliser l'utilitaire de ce site pour anonymiser les données
A+
fichier joint sans données perso
Re,
Merci
En effet vous avez de lignes fusionnées (Destinataires, Sujet, Volet) avec une seule valeur pour toutes les lignes
Le filtre ne fonctionnera donc pas comme il faut !
A+
C'est bon j'ai défusionné les cellules.
J'ai fait un filtre sur la date et toujours pareil. il me masque toutes le ligne du tableau.
résultat dans le fichier ci-joint.
Re,
Un 1er jet de ma vision des choses, ça n'a pas l'air tout à fait fonctionnel encore (donc à modifier)
A+
Merci pour ta réponse.
Mais pourquoi avoir rajouter la colonne 23 pour exécuter le filtre?
On ne peut pas filtrer directement la colonne 1 pour le 1er critère, puis la colonne 2 pour prochaine critère et ainsi de suite?
C'est là ou je n'arrive pas à filtrer.
Re,
Tu as tout à fait raison effectivement
Voici le code, qui fonctionnera beaucoup mieux
Private Sub CommandButton2_Click()
Dim Ind As Integer, dLig As Long, sCrit As String
Dim TabCol As Variant, NumCol As Long
' Liste des colonnes à prendre en compte
TabCol = Split("A,B,G,H,I,J,K,R,T", ",")
' Avec la feuille active
With ActiveSheet
' Définir la plage à traiter
Set Rng = .Range("A6").CurrentRegion
' Déplacer la plage d'une ligne vers le bas et la redimensionner
Set Rng = Rng.Resize(Rng.Rows.Count - 1, Rng.Columns.Count).Offset(1, 0)
' Suis l'ordre des TextBox
For Ind = 1 To 9
' Préparer le critère de filtre
sCrit = ""
' Si le TextBox contient une valeur
If Me.Controls("Textbox" & Ind) <> "" Then
' Définir le numéro de colonen à traiter
NumCol = Range(TabCol(Ind - 1) & "1").Column
' Critère de filtre
sCrit = Me.Controls("Textbox" & Ind).Value
' Appliquer le filtre à la colonne
Rng.AutoFilter Field:=NumCol, Criteria1:=sCrit
End If
Next Ind
End With
End Sub
A tester
Merci ton code fonctionne nickel.
Par contre j'ai codé le bouton réinitialiser qui marche.
Mais si je clique plusieurs fois sur le bouton réinitialisé le programme plante. Pourrais me dire quel est le problème stp?
Re,
Je m'aperçois que tu n'as pas compris ou lu mon code pour ne pas faire une boucle au départ pour tes TextBox
Sinon le bug vient du fait que tu veux afficher toutes les données alors que le filtre est déjà désactivé,
il faut donc effectuer un test.
Pour finir, il faudra voir ou revoir la programmation objet
Private Sub CommandButton1_Click()
Dim Ind As Integer, dLig As Long
For Ind = 1 To 9
Me.Controls("TextBox" & Ind).Value = ""
Next Ind
' Test si filtre est activé, affiché toutes les données
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.ShowAllData
' Effectuer le tri
With ActiveWorkbook.Worksheets("RCR")
dLig = .Range("A" & Rows.Count).End(clup).Row
With .AutoFilter.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A6:A" & dLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
' .Apply
End With
End With
End Sub
A+
Il y a un bug dans la ligne suivante:
C'est quoi clup?
dLig = .Range("A" & Rows.Count).End(clup).Row
Private Sub CommandButton1_Click()
Dim Ind As Integer, dLig As Long
For Ind = 1 To 9
Me.Controls("TextBox" & Ind).Value = ""
Next Ind
' Test si filtre est activé, affiché toutes les données
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.ShowAllData
' Effectuer le tri
With ActiveWorkbook.Worksheets("RCR")
dLig = .Range("A" & Rows.Count).End(clup).Row
With .AutoFilter.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A6:A" & dLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
' .Apply
End With
End With
End Sub
Re,
merci pour la punaise.
j'aurais pas pu voir l'erreur je connais rien à la programmation objet.
En tout cas merci beaucoup pour ton aide.
Re,
merci pour la punaise.
De rien c'est gratuit
j'aurais pas pu voir l'erreur je connais rien à la programmation objet.
Ce n'est pas de la programmation objet là, c'est simplement effectuer une recherche sur cette ligne
https://www.google.com/search?q=excel+vba+trouver+derniere+cellule+non+vide
https://www.excel-pratique.com/fr/astuces_vba/derniere-ligne
Et encore plus simple
https://www.google.com/search?q=dLig+%3D+.Range%28%22A%22+%26+Rows.Count%29.End%28clup%29.Row
No comment...