Formulaire recherche+listview

Bonjour,

Je suis tout nouveau sur le code VBA. Mon but est de, grosso modo, créer une application Excel comprenant un formulaire de recherche pour trouver le numéro du dossier du jour du patient. Le formualire comprend ainsi un bouton "Rechercher". A partir de 3 critères de recherche (nom, prénom et date de naissance du patient), la ou les réponse(s) sera(ont) affichée(s) dans une listview. L'application travaille sur un fichier d'une base de données régulière. Le problème est que je ne comprends pas du tout comment créer un moteur de recherche, malgré Internet. J'aimerais donc comprendre comment le créer.

Voici la construction de la listview :

Private Sub UserForm_Initialize()
'Configuration de la listview LIST_Clients
    With Recherche_client.LIST_Clients
         'Définit le nombre de colonnes
         With .ColumnHeaders
         'Supprime les anciens entêtes
              .Clear
              'Ajoute 10 colonnes en lien avec la feuille List_clients
              .Add , , Sheets("Liste_clients").Range("I1").Text, 80, lvwColumnLeft 'Colonne Nom
              .Add , , Sheets("Liste_clients").Range("J1").Text, 80, lvwColumnLeft 'Colonne Prénom
              .Add , , Sheets("Liste_clients").Range("K1").Text, 60, lvwColumnLeft 'Colonne DateN
              .Add , , Sheets("Liste_clients").Range("D1").Text, 60, lvwColumnLeft 'Colonne Date du RDV
              .Add , , Sheets("Liste_clients").Range("E1").Text, 60, lvwColumnLeft 'Colonne Heure du RDV
              .Add , , Sheets("Liste_clients").Range("G1").Text, 50, lvwColumnLeft 'Colonne Durée
              .Add , , Sheets("Liste_clients").Range("A1").Text, 80, lvwColumnLeft 'Colonne UF
              .Add , , Sheets("Liste_clients").Range("B1").Text, 40, lvwColumnLeft 'Colonne Statut
              .Add , , Sheets("Liste_clients").Range("F1").Text, 80, lvwColumnLeft 'Colonne IEP
              .Add , , Sheets("Liste_clients").Range("H1").Text, 80, lvwColumnLeft 'Colonne IPP
         End With
        .View = lvwReport 'affichage en mode Rapport
        .Gridlines = True 'affichage d'un quadrillage
        .FullRowSelect = True 'Sélection des lignes complètes
    End With
End Sub

J'ai redistribué l'ordre des colonnes dans le souci de visibilité (qu'est-ce que l'utilisateur préfererait voir globalement?).

Voici la procédure du bouton "Rechercher" :

Private Sub BTN_Rechercher_Click()
    'Déclaration des variables
    Dim prenom As String
    Dim nom As String
    prenom = TXT_Prénom 'TXT_Prénom est la TextBox du champ prénom
    nom = TXT_Nom 'TXT_Nom est la TextBox du champ nom
    'Si ces trois champs de recherche sont corrects alors (voir pb condition string)
    If VarType(prenom) = vbString And VarType(nom) = vbString And IsDate(TXT_DateN) Then
    Else
    MsgBox "Erreur de saisie, vérifiez bien les champs de saisie"
    End If

End Sub

Je pense que le code des conditions n'est pas l'idéal, mais comme les conditions sont liées au moteur de recherche...

Récapitulations, j'aimerais savoir comment créer un moteur de recherche où les réponses seront affichées dans une listview.

Si vous avez des liens qui me permettent de comprendre, je vous prie de les partager.

Merci d'avance de m'aider,

Malitiosus

Après intense réflexion, j'ai pu réaliser une partie du code pour le moteur de recherche :

 'Vide le contenu de la listview "LIST_clients"
    Recherche_client.LIST_Clients.ListItems.Clear

    'Activation de la feuille
    Sheets ("Liste_clients")

    'Définition de la plage de recherche sur la feuille active
    Dim C As Integer
    Dim derli As Integer
    Dim dercol As Integer
    derli = Range("A1").End(xlDown).Row
    dercol = Range("IV1").End(xlToLeft).Column
    For Each C In Range(derli, dercol)

Je suppose qu'il me reste ce genre de code "If C.Text Like "*"& Recherche_client.TXT_Nom.Text & "*" And C.Offset(0,1) etc.

Quand je vois cette instruction, je vois : Si le texte de ladite cellule correspond au texte saisi par l'utilisateur de la deuxième colonne. Que signifie Offset? Ma traduction est-elle correcte?

bonsoir

c'est juste pour dire mettre tes codes apres appuie sur le bouton codes comme ceci entre les mots code

voila

pascal

D'accord, je m'excuse de ne n'y pas avoir prêté attention. Sinon, quelqu'un peut m'eclairer, svp?

PS : Faut-il recopier mes codes?

Re,

J'ai développé le reste de la partie du moteur de recherche. Mon problème est que ça n'affiche rien après le bouton "Rechercher". Je pense que c'est c'est un problème avec Offset. Pourriez-vous m'aider, s'il vous plaît ?

For Each C In Range(Range("A" & ActiveCell.Row), Range("IV" & ActiveCell.Row).End(xlToLeft))
    Dim ligne_rech
    Dim cell_remplir
    Dim LR As Integer
    LR = 1
    Dim num_ligne As Integer

        If C.Text Like "*" & Recherche_client.TXT_Nom.Text & "*" And C.Offset(0, 9) Like "*" & Recherhce_client.TXT_Prénom.Text & "*" And C.Offset(0, 10) Like "*" & Recherche_client.TXT_DateN.Text & "*" Then
             'On place l'adresse de la variable de ligne_rech
             ligne_rech = C.Address
             If ligne_rech <> "$A$1" And C <> "" Then
                  With ThisWorkbook.ActiveSheet
                       'On remplit la première colonne de la listview
                       Recherche_client.LIST_Clients.ListItems.Add , , Range(ligne_rech)
                       'On remplit les autres colonnes de la listview
                       Set cell_remplir = Range(ligne_rech).Offset(0, 9)
                       Recherche_client.LIST_Clients.ListItems(LR).ListSubItems.Add , , ActiveSheet
                       Set cell_remplir = Range(ligne_rech).Offset(0, 10)
                       Recherche_client.LIST_Clients.ListItems(LR).ListSubItems.Add , , ActiveSheet
                       Set cell_remplir = Range(ligne_rech).Offset(0, 3)
                       Recherche_client.LIST_Clients.ListItems(LR).ListSubItems.Add , , ActiveSheet
                       Set cell_remplir = Range(ligne_rech).Offset(0, 4)
                       Recherche_client.LIST_Clients.ListItems(LR).ListSubItems.Add , , AvtiveSheet
                       Set cell_remplir = Range(ligne_rech).Offset(0, 6)
                       Recherche_client.LIST_Clients.ListItems(LR).ListSubItems.Add , , ActiveSheet
                       Set cell_remplir = Range(ligne_rech).Offset(0, 0)
                       Recherche_client.LIST_Clients.ListItems(LR).ListSubItems.Add , , ActiveSheet
                       Set cell_remplir = Range(ligne_rech).Offset(0, 1)
                       Recherche_client.LIST_Clients.ListItems(LR).ListSubItems.Add , , ActiveSheet
                       Set cell_remplir = Range(ligne_rech).Offset(0, 5)
                       Recherche_client.LIST_Clients.ListItems(LR).ListSubItems.Add , , ActiveSheet
                       Set cell_remplir = Range(ligne_rech).Offset(0, 7)
                       Recherche_client.LIST_Clients.ListItems(LR).ListSubItems.Add , , ActiveSheet
                  End With
                  'On ajoute 1 à LR pour la prochaine ligne de réponse (lign_rech)
                  G = G + 1
             End If
        End If
    Next C

Bon, j'ai pu afficher le résultat du bouton de cette manière :

Nom | Prénom | DateN | DateRDV | HeureRDV | DuréeRDV | UF | Statut | IEP | IPP

n°IPP| JEAN | 02/11/1988 | 04/11/2014 | 11h20 | 15mn | 8400 | 214577 | n°IPP

La première colonne est rempli de numéros IPP à la place des noms, et seulement une seule ligne se remplit. J'ai l'impression de tourner en rond pendant des heures...

'Définition de la plage de recherche sur la feuille active
    Dim C
    Dim numero_ligne, num
    For Each C In Range([A2], [A65536].End(xlUp))
    Dim ligne_rech
    Dim cell_remplir
    Dim LR As Integer
    LR = 1

        If C.Offset(0, 8) Like "*" & Recherche_client.TXT_Nom.Text & "*" And C.Offset(0, 9) Like "*" & Recherche_client.TXT_Prénom.Text & "*" And C.Offset(0, 10) Like "*" & Recherche_client.TXT_DateN.Text & "*" Then
             'On place l'adresse de la variable de ligne_rech
             ligne_rech = C.Address
             Set numero_ligne = Columns("I").Find(C.Offset(0, 8))
             num = numero_ligne.Row
             If ligne_rech <> "$A$1" And C <> "" Then
                  With Classeur.ActiveSheet
                       'On remplit la première colonne de la listview
                       Set cell_remplir = Range(ligne_rech).Offset(0, 8)
                       Recherche_client.LIST_Clients.ListItems(LR).ListSubItems.Add , , cell_remplir

Re,

J'ai finalement trouvé l'erreur. J'ai en fait placé LR=1 (1ère ligne de réponse) dans la boucle For each C in Range... Et puis aussi le remplissage de la 1ère colonne par des noms :

'1ère ligne de résultat
    Dim LR As Integer
    LR = 1
    'Définition de la plage de recherche sur la feuille active
    Dim C
    Dim numero_ligne
    For Each C In Range([A2], [A65536].End(xlUp))
    Dim ligne_rech
    Dim cell_remplir

        If C.Offset(0, 8) Like "*" & Recherche_client.TXT_Nom.Text & "*" And C.Offset(0, 9) Like "*" & Recherche_client.TXT_Prénom.Text & "*" And C.Offset(0, 10) Like "*" & Recherche_client.TXT_DateN.Text & "*" Then
             'On place l'adresse de la variable de ligne_rech
             ligne_rech = C.Address
             If ligne_rech <> "$A$1" And C <> "" Then
                  With Classeur.ActiveSheet
                       'On remplit la première colonne de la listview
                       Recherche_client.LIST_Clients.ListItems.Add , , C.Offset(0, 8)

J'espère que je ne l'ai pas posté pour rien.

Rechercher des sujets similaires à "formulaire recherche listview"