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 une adresse mail testée au hasard existe (et je tombe dessus )
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

1tri-courrier.xlsm (32.06 Ko)

Re,

Merci en revanche je vois un soucis pour le filtrage

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.

1tri-courrier.xlsm (33.66 Ko)

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,

Punaise un minimum de recherche svp mon doigt à dérapé, c'est XlUp

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

Rechercher des sujets similaires à "filtre criteres champs saisie"