Vba macro excel recherche et userform

Chriscam8786 Messages postés 19 Statut Membre -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je poursuis mon travail sur un système de suivi assez audacieux (pour ce qui me concerne) et voici un point qui me bloque :

Je cherche à permettre à l'utilisateur d'établir une recherche à un ou plusieurs critères combinés depuis un userform et à en restituer le résultat dans un formulaire (ou un autre userform).

Essayons d'illustrer mes propos...

=> supposons ces 4 critères dans le userform de recherche : Nom - Prénom - Age - Profession
=> l'utilisateur recherche les "Dupont" ayant "35ans" (critères combinés)
=> une fois le bouton "Rechercher" activé, la macro procède à cette recherche dans la feuille contenant les données et
=> ouvre un formulaire (ou un userform peu importe finalement) avec le résultat, c'est à dire la ligne complète des informations correspondantes à la recherche mise en forme dans ce formulaire.

En outre, j'aime semble-t-il me compliquer la vie, il doit être possible d'avoir une échapatoire en cas de réponses multiples (plusieurs Dupont agés de 35 ans...) ; dans ce cas, un formulaire multiple peut-il s'envisager?

Enfin, désolé je suis pénible, peut-on imaginer un système permettant une recherche assistée (par exemple, en recherchant les "Dupont" dont on ignore si la dernière lettre est un "D" ou un "T" on pourrait rechercher les "Dupon%")

Je vous remercie d'ores et déjà de toute votre aide et des pistes qui pourraient m'aider à réaliser ce projet fou.

Chris
Configuration: Windows XP
Internet Explorer 6.0

17 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Tu as effectivement une syntaxe incorrecte.
    Si j'ai compris ta modification, je te propose ceci avec décalage des instructions pour bien voir le début et la fin des boucles, des if et autres.
    Option Explicit
    
    Public Sub chercher(rech, c) 'recherche d'une chaine
    Dim sel As Object
    Dim valide As Boolean
    Dim i As Integer
    Dim l As Long
    Dim n As Integer
    l = 2: n = 0
    SuiviActivite.ListBox1.Clear
    With Sheets("BaseDeDonnées")
    If rech = "" Then Exit Sub
    Do
        Set sel = .Cells.Find(What:=rech, after:=.Cells(l, c), _
            LookIn:=xlValues, LookAt:=xlPart, _
            SearchOrder:=xlByColumns, _
            SearchDirection:=xlNext, MatchCase:=False)
        If sel Is Nothing Then Exit Do
        If sel.Column <> c Then Exit Do
        If sel.Row <= l Then Exit Do
        l = sel.Row
        valide = True
        For Each ctrl In SuiviActivite.Controls
            If TypeOf ctrl Is MSForms.TextBox _
                Or TypeOf ctrl Is MSForms.ComboBox Then
                If ctrl.Value <> "" _
                And InStr(1, LCase(.Cells(l, i).Value), LCase(ctrl.Value)) = 0 Then valide = False
            End If
        Next ctrl
        If valide Then
            SuiviActivite.ListBox1.AddItem _
                (.Cells(l, 1).Value & " " & _
                .Cells(l, 2).Value & " " & _
                .Cells(l, 3).Value & " " & _
                .Cells(l, 4).Value & " " & _
                .Cells(l, 5).Value & " " & _
                .Cells(l, 6).Value & " " & _
                .Cells(l, 7).Value & " " & _
                .Cells(l, 8).Value & " " & _
                .Cells(l, 9).Value & " " & _
                .Cells(l, 10).Value & " " & _
                .Cells(l, 11).Value & " " & _
                .Cells(l, 12).Value & " " & _
                .Cells(l, 13).Value & " " & _
                .Cells(l, 14).Value & " " & _
                .Cells(l, 15).Value & " " & _
                .Cells(l, 16).Value)
            SuiviActivite.ListBox1.List(n, 2) = sel.Row
            n = n + 1
        End If
    Loop
    End With
    End Sub
    
    
    1