FormulaireRecherche par filtres avec renvoi des lignes filtrées dans listbox

SneakyZEKE

XLDnaute Nouveau
Bonjour à tous,

Voici le second problème...ou plutôt les seconds problèmes qui me bloques dans l'avancement de mon projet !

J'ai toujours un tableau A2:J1000 avec un (premier) bouton nommé "Rechercher", qui en fait se trouve n'être qu'une application des filtres Excel par une macro.

L'idée restant toujours d’empêcher l'utilisateur lambda d'avoir accès au tableau et de l'obliger à passer par les boutons et formulaire dont voici un aperçu :

Sans titre.JPG

L'idée serai que l'utilisateur puisse effectué une recherche avec l'un ou plusieurs des champs issus des colonnes B, C, D, G, H et I et que le résultat de ces filtre soient affichés dans une listbox où, un ou plusieurs des résultats pourront être sélectionnés pour ensuite se voir appliquer fonction facile à deviner avec les boutons de mon formulaire mais qui feront l'objet d'autres sujets car trop éloignés de l’intitulé actuel...

Les résultats de la liste box seront en fait les lignes filtrés moins les champs des colonnes E, F et J mais en revanche avec les champs de la colonne A, pourtant pas utilisé dans la fonction de recherche.

Voici ce que j'ai pu pondre pour la recherche en fouinant sur le net et qui fonctionne partiellement mais pas pour la recherche par "Matricule", par "clef" ou par "Date"...rien pour le renvoie dans la listbox, je vois pas :

Code:
Public Const COL_NOM = 2
Public Const COL_PRENOM = 3
Public Const COL_MATRICULE = 4
Public Const COL_NUMCLE = 7
Public Const COL_ETATCLE = 8
Public Const COL_DATEMOD = 9

'Fonction de recherche
Public Function Rechercher(Nom As String, Prenom As String, Clef As String, Matricule As String, DateMod As String, Etat As String)
Nom = UCase(Nom)
Prenom = UCase(Prenom)
Matricule = UCase(Matricule)
Etat = UCase(Etat)

Set w = Worksheets("BASE")

    Application.ScreenUpdating = False
    
    AutoFilterMode = False
    
    If Nom <> "" Then
        w.Range("A1").AutoFilter field:=COL_NOM, Criteria1:="*" & Nom & "*"
    End If
    
    If Prenom <> "" Then
        w.Range("A1").AutoFilter field:=COL_PRENOM, Criteria1:="*" & Prenom & "*"
    End If
    
    If Matricule <> "" Then
        w.Range("A1").AutoFilter field:=COL_MATRICULE, Criteria1:="*" & Matricule & "*"
    End If
    
    If Clef <> "" Then
        w.Range("A1").AutoFilter field:=COL_NUMCLE, Criteria1:="*" & Clef & "*"
    End If
    
    If DateMod <> "" Then
        w.Range("A1").AutoFilter field:=COL_DATEMOD, Criteria1:="*" & DateMod & "*"
    End If
    
    If Etat <> "" Then
        w.Range("A1").AutoFilter field:=COL_ETATCLE, Criteria1:=Etat
    End If
    
Application.ScreenUpdating = True
UserFormChoix.Show
End Function

Je dois avoué que je ne comprend pas trop pourquoi, d'autant qu'un premier essai s'était montré plutôt concluant sur la recherche de clef mais impossible de le faire fonctionner ce tableau !

Un peu compliqué à expliquer mais si quelqu'un voit une solution....
 

Pièces jointes

  • Sans titre.JPG
    Sans titre.JPG
    24.2 KB · Affichages: 160
  • Sans titre.JPG
    Sans titre.JPG
    24.2 KB · Affichages: 158
Dernière édition:

SneakyZEKE

XLDnaute Nouveau
Re : Fonction de recherche par filtres avec renvoie des lignes filtrées dans listbox.

Sinon en fouinant un peu partout j'ai trouvé ce code intéressant qui consiste à récupérer le numéro de la ligne du tableau correspondant à la valeur sélectionnée dans la ListBox :

Code:
Private Sub cmd_Valider2_Click()
'--- Declaration des variables
Dim NuLigne As Integer ' Il faut déclarer NuLigne en integer?
Dim intCurrentRow As Integer

' Boucle de recherche la ligne sélectionnée
For intCurrentRow = 0 To liste_transporteur.ListCount - 1
If liste_transporteur.Selected(intCurrentRow) Then
NuLigne = intCurrentRow '
Exit For ' on sort de la boucle de test ,
End If
Next intCurrentRow

' récuperation de la valeur selectionné dans le listBox
Texte_cout = liste_transporteur.Column(2, NuLigne) 'est ce correct le N°
colonne

End Sub

C'est un peu comme ça que je comptai procéder pour remplir mes formulaires de Modification à la base sauf que je pèche à l'adapter dans mon projet et surtout que je dois pouvoir récupérer plusieurs lignes en même temps pour remplir plusieurs formulaires d'un clique !
 

Dranreb

XLDnaute Barbatruc
Re : Fonction de recherche par filtres avec renvoie des lignes filtrées dans listbox.

Bonjour.
Moi c'est l'apport de dispositifs conviviaux désirés par les utilisateurs qui m'honnore, pas de les contraindre à quoi que ce soit.
En claire, je souhaite à terme que l'utilisateur n'est plus accès directement au tableau, mais qu'il soit contraint de passer par ces formulaires pour modifier le contenu du tableau...
C'est tellement contraire à ma déontologie que je ne vous aiderai plus, désolé.
 

SneakyZEKE

XLDnaute Nouveau
Re : Fonction de recherche par filtres avec renvoie des lignes filtrées dans listbox.

lol, en même temps j'ai un cahier des charges je m'y tiens...l'exercice comporte une demande explicite où l'on doit empêcher toutes modifications involontaires des utilisateurs, hors à partir du moment ou je peux sélectionner une cellule du tableau, je peux la modifier par inadvertance en appuyant sur touche du clavier...donc après prise de renseignements jouer avec la protection et le verrouillage est une solution gadget indésirable et pas pratique donc je ne vois pas d'autre solutions !

Et dans le genre pas conviviale, perdre par inadvertances des donnée de sa base c'est pas mal !!! Perso ça m'ai arrivé des dizaine de fois avec Excel et ça me rend dingue de me retrouver avec un "jhgfe" au lieu de l'information dont j'ai besoin ! C'est d'ailleurs pour ça qu'Access existe...pour manipuler des bases de données de façon plus sûre...enfin bref chacun son point de vu mais un accès direct et total à l'utilisateur lambda, même Linux le fait pas !
 
Dernière édition:

SneakyZEKE

XLDnaute Nouveau
Re : Fonction de recherche par filtres avec renvoie des lignes filtrées dans listbox.

J'ai trouvé une âme charitable pour me donner un coup de main, donc si ça peut aider quelqu'un je le mets et je clos le sujet :

Code:
Public Sub UserForm_Initialize()
Dim NumCP As String, MDate As String
    On Error Resume Next
    For i = 0 To UserFormChoix.ListBoxfiltre.ListCount - 1
        If UserFormChoix.ListBoxfiltre.Selected(i) = True Then
            Ligne = UserFormChoix.ListBoxfiltre.List(i, 9)
            NumCP = Range("G" & Ligne)
            MDate = Range("I" & Ligne)
            With UserFormModification
                .ComboBox1.Text = Range("A" & Ligne)
                .TextBox1.Text = Range("B" & Ligne)
                .TextBox2.Text = Range("C" & Ligne)
                .TextBox3.Text = Range("D" & Ligne)
                .ComboBox2.Text = Range("E" & Ligne)
                .ComboBox3.Text = Range("F" & Ligne)
                .TextBox4.Text = Left(NumCP, (InStr(NumCP, "-") - 2))
                .TextBox5.Text = Right(NumCP, (InStrRev(NumCP, "-") - 4))
                .ComboBox4.Text = Range("H" & Ligne)
                .TextBox6.Text = CStr(Format(Day(CDate(MDate)), "00"))
                .TextBox7.Text = CStr(Format(Month(CDate(MDate)), "00"))
                .TextBox8.Text = CStr(Year(CDate(MDate)))
                .TextBox9.Text = Range("J" & Ligne)
            End With
        End If
    Next i
    Unload UserFormChoix
    Application.ScreenUpdating = True
End Sub

PS: l'idée c'est de créer une 10ème colonne invisible dans la ListBox, où l'on stock pour chaque ligne le numéro de ligne qui lui correspond dans le tableau. Ensuite on utilise cette 10ème colonne pour savoir d'où charger (et donc vers où renvoyer) les informations du formulaire :

attachment.php
 

Pièces jointes

  • fgh.jpg
    fgh.jpg
    31.8 KB · Affichages: 127
Dernière édition:

SneakyZEKE

XLDnaute Nouveau
Re : FormulaireRecherche par filtres avec renvoi des lignes filtrées dans listbox

Bonjour,

Me revoilà avec ma fonction de recherche qui fonctionne toujours très bien (et que j'ai même améliorée sur quelques petits points), je souhaiterai cette fois la faire évoluer...j'explique :

Actuellement, mes recherches par filtres, bien qu'elles puissent s'opérer avec plusieurs critères de colonnes différentes, ne me permettent pas de faire une recherche sur plusieurs "Etats" (les 7 états étants : !, A, D, HS, PE, PS et S).

J'ai bien songé à créer 7 CheckBox (1 pour chaque état) qui permettrai de composer sa recherche uniquement sur les états qui intéressent. Problème, sous Excel 2003 il n'est possible d'utiliser que 2 Criteria par colonne pour les recherche par filtre avec opérande logique. Pire, après une journée entière de recherche, je ne vois toujours pas comment faire ça avec un filtre avancé !

Mes questions sont donc...est-ce possible de remplacer ma Combobox pour la recherche par état, par 7 CheckBox pour obtenir une recherche "à la carte" ? Si oui, est-ce possible par filtre ? Enfin, avez de meilleures idées pour permettre ce type de recherches ?

attachment.php
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    11.9 KB · Affichages: 115
  • Sans titre.png
    Sans titre.png
    11.9 KB · Affichages: 140
  • Sans titre.png
    Sans titre.png
    11.9 KB · Affichages: 137
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 241
Messages
2 086 526
Membres
103 242
dernier inscrit
Patoshick