VBA - Charger une listbox en fonction des caracteres saisis

BIBIDESTMALO - 20 janv. 2013 à 15:21
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 20 janv. 2013 à 21:06
Bonjour à toutes et à tous,

Je cherche auprès de la communauté de programmeur qqu'un qui pourra m'aider dans mon programme VBA Excel.

L'idée est de faire a travers une combobox une option recherche dans ma basse de donnée et de me charger dans dans une listbox le resultat des noms de la colonne excel en fonction de la chaine de caracteres saisi car dans cette liste il est possible que plusieurs clients portent le meme nom.

Ma volonté serait de faire dans l'idée un peu comme dans nos smartphones et tablettes une fonction recherche me permettant ensuite d'accéder à la fiche client en un clic.

Je vous remercie par avance de votre intérêt pour ma demande et de votre soutien et aide apportée.
Bien cordialement.


Jérôme

Je peux vous donner ensuite le prog sur lequel je travail si besoin pour plus de comprehension si besoin.
Merci.

10 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 janv. 2013 à 15:29
Bonjour,
Et qu'as-tu commencé à faire ? Car ici on aide sur une difficulté technique spécifique et parfaitement isolée et non à faire tout un ensemble !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
BIBIDESTMALO
20 janv. 2013 à 15:34
Bonjour,
Je vous remercie de la diligence de votre réponse.
La base de donnée excel est réalisée ainsi que le code.
Je ne sais comment rattacher le fichier excel pour que vous vous en rendiez compte.
Comment puis je faire ?

Cdt
Jérôme
0
BIBIDESTMALO
20 janv. 2013 à 15:40
Bonjour,
Je peux vous donner le code. J'aime a penser que cel pourra vous éclairer.
Merci bien de votre compréhension.

'Fonction qui appelé quand on choisit une personne dans la liste
Private Sub ComboBox1_Change()

'Initialisation de la Coloration des Labels en noir
Label1.ForeColor = RGB(0, 0, 0)
Label2.ForeColor = RGB(0, 0, 0)
Label3.ForeColor = RGB(0, 0, 0)
Label4.ForeColor = RGB(0, 0, 0)
Label5.ForeColor = RGB(0, 0, 0)
Label6.ForeColor = RGB(0, 0, 0)
Label7.ForeColor = RGB(0, 0, 0)
Label8.ForeColor = RGB(0, 0, 0)
Label9.ForeColor = RGB(0, 0, 0)


CommandButton4.Visible = True
CommandButton3.Visible = True
CommandButton1.Visible = False
CommandButton5.Visible = True
CommandButton2.Visible = False

'je récupère cette valeur
Dim t As String
t = ComboBox1.Value
Dim i As Integer
i = 3
Dim ok As Boolean
ok = False
'Je balaye la feuil3 (sauvegarde) pour retrouver la personne
While ok = False
Worksheets("Feuil3").Cells(1, 1).Select
' je test si je suis sur la bonne ligne
If Worksheets("Feuil3").Cells(i, 1).Value = t Then
'Si je suis sur la bonne ligne je recupère les valeur

If Worksheets("Feuil3").Cells(i, 5) = "MME" Then
OptionButton1 = True
Else
OptionButton1 = False
End If

If Worksheets("Feuil3").Cells(i, 5) = "M." Then
OptionButton2 = True
Else
OptionButton2 = False
End If

TextBox1.Text = Worksheets("Feuil3").Cells(i, 1).Value
TextBox2.Text = Worksheets("Feuil3").Cells(i, 2).Value
TextBox3.Text = Worksheets("Feuil3").Cells(i, 3).Value
TextBox4.Text = Worksheets("Feuil3").Cells(i, 4).Value
TextBox5.Text = Worksheets("Feuil3").Cells(i, 6).Value
TextBox6.Text = Worksheets("Feuil3").Cells(i, 7).Value
TextBox7.Text = Worksheets("Feuil3").Cells(i, 11).Value
TextBox8.Text = Worksheets("Feuil3").Cells(i, 10).Value
TextBox9.Text = Worksheets("Feuil3").Cells(i, 9).Value
TextBox10.Text = Worksheets("Feuil3").Cells(i, 12).Value


'je quitte la boucle
ok = True
End If
' si le champ = "" cela veut dire que je suis à la fin de mes données donc que le client n'existe pas
If Worksheets("Feuil3").Cells(i, 1).Value = "" Then
' je quitte la boucle
ok = True
End If
i = i + 1
Wend
' je garde dans une feuille la ligne du client pour pouvoir la reprendre pour pouvoir faire les modification
Worksheets("Feuil2").Cells(2, 2).Value = i - 1


End Sub


Cdt
Jérôme
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 janv. 2013 à 17:16
1)
i = 3
Dim ok As Boolean
ok = False
'Je balaye la feuil3 (sauvegarde) pour retrouver la personne
While ok = False
Worksheets("Feuil3").Cells(1, 1).Select
' je test si je suis sur la bonne ligne
If Worksheets("Feuil3").Cells(i, 1).Value = t Then
'Si je suis sur la bonne ligne je recupère les valeur

Intéresse-toi vite à la méthode Find rubrique Range.Find), à lire dans ton aide VBA, en lieu et place de cette recherche en boucle.
2) où est donc la listbox dont tu parlais dans ton premier message, dans cette affaire ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BIBIDESTMALO
20 janv. 2013 à 18:13
Merci bine pour l'indication sur la méthode Find.
La programmation n'est pour moi qu'un moyen et loisir me permettant une meilleure productivité professionnelle...ce n'est pas mon métier initial.

Voici le code pour charger ma listox:

ListBox2.Clear

For i 3 To 10000 '> pour lister la base client PERSONNE
If Worksheets("Feuil3").Cells(i, 1) = "" Then
Exit For
Else
If Worksheets("Feuil3").Cells(i, 13) <> "OUI" Then
ListBox2.AddItem Worksheets("Feuil3").Cells(i, 16)
End If
End If
Next


Ma problématique c'est que je ne sais pas comment faire interagir les deux et surtout comment lorsque je rentre des lettres dans ma combobox cela m'affiche tous les noms comportant les lettres soit comme indiqué dans la suite de caractères soit de manière disparate dans le nom.

Avez vous dejà été confronté a ce genre de demande ?
Connaissez vous des liens traitant de ce thème ?


Je vous remercie de votre soutien dans ma recherche.
Cordialement.

Jérôme
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 janv. 2013 à 18:41
Pas vraiment clair et précis, tout cela.
Essaye d'exprimer avec précision tant les tenants que les aboutissants (en évitant d'utiliser des formules de genre "un peu comme dans ...")
Fais-le de manière technique, en ne parlant que de cellules, de lignes, de colonnes (tant pour ce qui est des tenants que pour ce qui est des aboutissants).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
BIBIDESTMALO
20 janv. 2013 à 18:58
Je suis bien desolé de ne pas etre assez précis. Je vais essayé d'être plus factuel.

Ce que je recherche c'est:
Créer un bouton, fonction recherche dans ma base de donné qui s'affiche dans une listbox ou si vous avez meilleur conseil puis cliquer sur le nom client pour acceder a sa fiche d'information.

Le nom clients sont inscrit dans la colonne A.
Le données correspondantes au client tel que adresse, tel....sont enregistrées dans les colonnes B, C.....

Quant je tape par exemple "dupont"
Je souhaite que s'affiche dans une listbox tous les "dupont" de ma base de donnée ie calonne A (car dans ma combobox je n'aurai que le premier dupont de ma base de donnée) ou tous les noms comportant les lettres quand je les ecrit: dupont mais aussi "ducomptes", "deuperme"...

je ne sais comment la chaine de caractere peut analyser ma base de donnée soit de manière imumable cad que les lettres se suivent ou alors qu'elles soient contenuees dans le nom client.

Avoir les deux possibilités afin de trouver la methode qui me sera la plus efficace.

Si j'avais moyen de vous transmettre mon fichier nos echanges vous serez plus clair.

Je vous remercie de votre implication pour m'aider.

Cordialement.
Jérôme
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 janv. 2013 à 19:27
1)
Quant je tape par exemple "dupont"

quant tu le "tapes" dans quoi ?
2) j'espère que la feuille des données n'en contient pas un très grand nombre, car sinon : bonjour les lenteurs induites (puisque recherche tout au long de la saisie).
Et à ce propos :
Ce que je recherche c'est:
Créer un bouton, fonction recherche dans ma base de donné qui s'affiche dans une listbox ou si vous avez meilleur conseil puis cliquer sur le nom client pour acceder a sa fiche d'information

est un "peu" (!) différent de "quand je tape ..."
3)
je ne sais comment la chaine de caractere peut analyser ma base de donnée soit de manière imumable cad que les lettres se suivent ou alors qu'elles soient contenues dans le nom client.

Avoir les deux possibilités afin de trouver la methode qui me sera la plus efficace

il va falloir que tu en décides avant, car méthodes très différentes selon le cas (la seconde étant encore plus lente que la première)
4) où as-tu placé tes contrôles ? sur ta feuille Excel ou sur un Userform (car pas pareil).

Tu commences à voir la nécessité d'être extrêmement clair et complet dans tes explications ?
Si j'avais moyen de vous transmettre mon fichier nos echanges vous serez plus clair

Seuls les moins prudents ouvriraient ton classeur.
Si les choses sont claires dans ton esprit, elles peuvent et doivent être exprimées clairement et simplement. Il est probable que je t'en ferai la démonstration (en te montrant comment tu aurais dû exposer tes tenants et aboutissants) dès qu'auront été levées toutes les ambiguïtés et incertitudes encore présentes. Cet "démonstration" ne sera pas celle d'un développeur, mais tout bêtement celle d'un rédacteur qui sait ce qu'il veut exposer (exactement ce que ferait un examinateur pour rédiger l'énoncé d'un exercice) .
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
BIBIDESTMALO
20 janv. 2013 à 20:56
Ma base de donnée contient actuellement 438 lignes mais elle est vouée à être incrémentée.

Tous mes controles sont placés dans un Userform qui s'affiche automatiquement à l'ouverture du fichier.xlsm

Voici l'image des mon userform si elle vous parvient



Je rentre le nom du client dans une combobox qui me charge directement ses données dans les textbox correspondantes sauf si plusieurs meme nom seul le premier de ma base qui n'est pas forcement celui que je voulais.
Sinon je passe par une listbox qui charge l'integralite de ma base de donnée puis selectionne celui que je cherche et remplie ma combobox pour enfin avoir mes informations clients....donc un peu un bidouillage ....lol.

C'est pour cela que je souhaiterai mettre en place cette recherche via une combobox, textbox...qui me permettrait de charger une listbox de mes clients correspondant au caractère saisis pour ensuite charger leurs données en cliquant sur le nom client dans cette listbox.

Vous avez entièrement raison, la première methode serait plus rapide pour charger les nom clients. Intellectuellement cela m'interresse egalement de savoir comment mettre en place un tel code pour la deuxieme methode si cela vous est possible.

J'espère que ces informations vous permettront de mieux "voir" ce qui se passe dans ma tête.

A defaut, je ne doute pas que je continuerai à m'efforcer à mieux vous definir à ce dont je pense.

Je vous remercie de votr epatience ainsi que de vos bons conseils.

Cordialement.

Jérôme
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 janv. 2013 à 21:06
Hé bien ... Bonne chance. J'avais pourtant essayé de te conduire à être précis et techniquement précis et complet !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Rejoignez-nous