recherche dans base avec boite de dialogue

Blafi

XLDnaute Occasionnel
Bonjour à tous,

Voila mon pb : j'ai une base de données comportant 1400 enregistrements et la personne qui gère cette base voudrait pouvoir savoir si une personne dont le nom commence par certaines lettres est déja dans la base en évitant de faire défiler les 1400 noms pour la trouver.
J'ai donc commencé à faire une macro affichant une boite de dialogue qui comporte une textbox et une combobox. Dans la textbox l'utilisateur peut rentrer les 2 premières lettres d'un nom et le premier nom commençant par ces lettres est sélectionné dans la base.
Je voudrais perfectionner la chose en affichant dans la combobox la liste des noms commençant par ces 2 lettres ainsi que le prénom de chacune des personnes (il y a en effet des homonimes dans la base qui peuvent être des parents ou enfants).
Le but serait donc d'afficher ces noms et prénoms dans la combobox:
- afin qu'en cliquant sur l'un des items de la liste, la cellule correspondante dans la base soit sélectionnée et que la bdd se ferme
- ou, si le nom n'est pas trouvé dans la base, qu'un message indique "nom pas trouvé"...

J'ai bien réussi à traiter la première partie (trouver le 1er nom commençant par les lettres) mais pour ce qui est de l'affichage dans la combobox.... je n'y arrive pas!

Quelqu'un peut-il m'aider en me guidant sur le sujet ?
Je joins un extrait de ma base et de ma bdd pour montrer ce que je voudrais faire.

Merci et à ++
 

Pièces jointes

  • essai macro recherche adh.xlsm
    43.3 KB · Affichages: 68
G

Guest

Guest
Re : recherche dans base avec boite de dialogue

Bonjour,

J'ose espérer que ce sont des données anonymisées qui sont dans le fichier.

Sinon dans le fichier joint j'ai utilisé un tableau structuré (Onglet / insertion/tableau).
A l'initialisation du userForm les nom et prénoms sont chargé dans un tableau en mémoire pour accélerer les recherches.
J'ai changé la combobox par une listBox pour que tu vois les effets immédiats de la recherche.

A+
 

Blafi

XLDnaute Occasionnel
Re : recherche dans base avec boite de dialogue

Re,

Je viens de regarder le fichier proposé. Est-on obligé de passer par le tableau ?
Autrement ça marche bien, sauf que je voudrai en plus (je très emm...) que dans le userform lorsque l'utilisateur clique sur un nom affiché dans la listbox, l'USF se ferme et la base s'affiche avec la cellule correspondante sélectionnée dans la base.
Peut-on faire cela... merci d'avance.
 
G

Guest

Guest
Re : recherche dans base avec boite de dialogue

Re,

Voici le code de ton userForm.
Code:
Dim tblAdh()
Private Sub ListBox1_Click()
If ListBox1.ListIndex > -1 Then
    Sheets("Base").ListObjects("Adherents").DataBodyRange.Cells(ListBox1.Value, 1).Select
    Unload Me
End If
End Sub
Private Sub TextBox1_Change()
Dim i As Integer, nom
    ListBox1.Clear
    nom = Trim(TextBox1.Text)
    If nom = "" Then
        Me.ListBox1.List = tblAdh
    Else
        For i = 1 To UBound(tblAdh)
            If UCase(tblAdh(i, 1)) Like UCase(nom & "*") Then
                With Me.ListBox1
                    'Ajoute le nom + le prénom dans la première colonne
                    .AddItem tblAdh(i, 1) & " " & tblAdh(i, 2)
                    'ajoute l'index du nom prénom dans la colonne 2 (cachée) de la listbox
                    .List(.ListCount - 1, 1) = i
                End With
            End If
        Next
    End If
End Sub
Private Sub UserForm_Initialize()
    tblAdh = Sheets("Base").ListObjects("Adherents").ListColumns(3).DataBodyRange.Resize(, 2).Value
    Dim i As Integer
    With Me.ListBox1
        .ColumnCount = 2    '2 colonnes dans la listBox 1 pour nom prénom l'autre pour la valeur de i
        .BoundColumn = 2    'La valeur de cette colonne sera la valeur retournée par la sélection dans la liste
        .ColumnWidths = ";0 pt"   ' 0 pt cache la colonne 2
        For i = 1 To UBound(tblAdh)
            'Ajoute le nom + le prénom dans la première colonne
            .AddItem tblAdh(i, 1) & " " & tblAdh(i, 2)
            'ajoute l'index du nom prénom dans la colonne 2 (cachée de la listbox
            .List(.ListCount - 1, 1) = i
        Next i
    End With
End Sub

Maintenant à toi d'essayer d'adapter à tes besoins.
A+
 

Blafi

XLDnaute Occasionnel
Re : recherche dans base avec boite de dialogue

Encore merci Hasco,
Je parlais naturellement du "tableau" dans la base (obtenu par "filtrer"..)
je vais essayer de me débrouiller avec ton travail qui me parait très bien...
Si je n'en sors pas, je reviendrai sur ce fil...
Bon courage et à ++
 

Blafi

XLDnaute Occasionnel
Re : recherche dans base avec boite de dialogue

Bonjour à tous et à Hasco en particulier,

Pour Hasco : J'ai essayé de supprimer dans ton fichier le nom de zone "Adherents" afin de lui donner un autre nom dans ma macro et je me heurte à l'impossibilité de le faire, dans la boite de gestion des noms, le bouton supprimer et le bouton modifier étant grisés et inutilisables. Comment expliquer cela..
 
G

Guest

Guest
Re : recherche dans base avec boite de dialogue

Bonjour Blafi,

Adherents est le nom d'un tableau structuré, créée au moyen comme dit plus haut par l'onglet Insertion/tableau.
Clique dans une cellule du tableau et tu verras un onglet création
Tu verras à gauche de la barre d'outils, un zone de texte dans laquelle tu pourras changer le nom de ton tableau.(faudra le changer aussi dans les macros)
Va voir Les tableaux dans Excel 2007 pour un excellent tuto .

A+
 

Blafi

XLDnaute Occasionnel
Re : recherche dans base avec boite de dialogue

RE bonjour Hasco,

J'ai essayé d'utiliser ta macro mais en supprimant le tableau dans la feuille et le tablAdh dans la macro car ma base est très grosse et sa composition change souvent, notamment en nombre d'adhérents.
J'ai donc essayé d'adapter l'userform initialize en définissant la zone où doivent être cherchés les noms : tout va bien le userform s'initialise parfaitement en m'affichant la liste de tous les adhérents avec leur prénom et l'indice.
Par contre lorsque j'essaye d'utiliser le textbox1_change, j'obtiens une erreur au niveau du for i=1 to Ubound(tablAdh) alors que cette commande marche parfaitement dans l'initialize.
Je ne comprend pas d'où vient le problème... peut-être peux tu m'aider à le résoudre...
Je joins ton fichier modifié avec mes "aménagements" (pas très efficaces!)

Merci et à bientôt...
 

Pièces jointes

  • h_blafi.xlsm
    50 KB · Affichages: 39
G

Guest

Guest
Re : recherche dans base avec boite de dialogue

Bonjour,


Tu déclares le tableau par Dim tbAdh et tu l'utilise par tblAdh. Ce sont deux variables différentes!
Si tu rajoutes le l manquant dans ta déclaration, plus de problème

Je t'invite à modifier tes options de l'éditeur de macro en allant dans Outils/Options et dans le premier onglet (Editeur) cocher 'Déclaraction obligatoire des variables'.

Après cela tu auras en tête de chaque nouveau module le prédicat Option Explicit qui t'obligeras à déclarer toutes tes variables et te signalera au moment de la compilation les variables non déclarée.

Ici il t'aurait signaler le problème au moment ou tu charges tblAdh, alors que cette variable n'était (pour lui) pas déclarée.

Je t'invite également à suivre un tuto sur les variables, leur déclaration et leur portée.

A+
 

Blafi

XLDnaute Occasionnel
Re : recherche dans base avec boite de dialogue

Merci Hasco pour toute cette aide...
Pourtant j'avais cherché mon erreur un bon moment mais je n'avais pas tout compris dans le mesage d'erreur...
Promis, je vais faire ce que tu medis pour l'option explicit et kle tuto sur les variables..
Bon courage et à +
 

Discussions similaires

Statistiques des forums

Discussions
312 239
Messages
2 086 495
Membres
103 236
dernier inscrit
Menni