Remplir combobox et textbox via recherche

Bonjour,

Je cherche une solution à mon problème je suis à la recherche d'une aide pour codé une recherche.

Je m'explique :

J'ai userform qui contient plusieurs textbox et combobox ect ...

J'ai séparé en deux colonnes mon userform et j'ai un tableau sur Excel qui s'incrémente à chaque enregistrement.

Dans cette première colonne j'ai une textbox (N° de châssis) contenant que des chiffres à remplir à la main.

Grâce à cette textbox j'aimerai faire une recherche dans mon tableau qui me sert de base de données, à partir de la valeur de la textbox.

J'aimerai savoir si le numéro de châssis existe dans le tableau :

  • S'il n'existe pas juste avoir un message "n'existe pas" et donc de pouvoir poursuivre le remplissage du formulaire normalement
  • S'il existe de pouvoir remplir 3 combobox (Cb1, Cb2 et Cb3) et 2 textbox (T1 et T2) qui sont sur la même ligne du tableau dans différentes colonnes. Pour Cb1 la colonne A pour Cb2 colonne B pour Cb3 colonne G pour T1 colonne Q pour T2 colonne R.

Est ce possible ? Ai je été assez clair ?

Je joins mon fichier vierge

85anomalies1.xlsm (664.06 Ko)

Bonjour Mika, bonjour le forum,

Pas de difficulté particulière mais sans le fichier avec l'Userform on est obligé de recréer tout ton environnement. Et là, j'ai grave la flemme...

Désolé mon fichier était un peu gros j'ai du enlever des choses, pour pouvoir l'envoyer.

Désolé de l'attente, je sais que c'est compliqué de refaire l'environnement c'est pour sa que je joins le fichier

Re,

Ton fichier n'est toujours pas passé...

Tu sais, il suffit d'un fichier exemple avec la même structure que le fichier original (même nom des onglets, plages nommées, etc...) et une poignée de données pour qu'on puisse t'aider...

Si mon fichier est passé, j'étais entrain d'éditer mon message quand tu me l'as demandé

Je le remet ici la

127anomalies1.xlsm (664.06 Ko)

Re,

Essaie avec la procédure Exit qui agit à la sortie de la textbox T3 :

Private Sub T3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément)

Set O = Worksheets("BD") 'définit l'onglet O
TV = O.Range("A3").CurrentRegion 'définit le tableau de valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If TV(I, 3) = Me.T3.Value Then 'condition : si la donnée ligne I colonne 3 de TV est égale à la valeur de T3
        Cb1.Value = TV(I, 1) 'renvoie la donnée ligne I colonne 1 de TV dans Cb1
        Cb2.Value = TV(I, 2) 'renvoie la donnée ligne I colonne 2 de TV dans Cb2
        Cb3.Value = TV(I, 7) 'renvoie la donnée ligne I colonne 7 de TV dans Cb3
        T1.Value = TV(I, 17) 'renvoie la donnée ligne I colonne 17 de TV dans T1
        T2.Value = TV(I, 18) 'renvoie la donnée ligne I colonne 18 de TV dans T2
        GoTo fin 'va à l'étiquette "fin"
    End If 'fin d la condition
Next I 'prochaine ligne de la boucle
MsgBox "nexiste pas" 'message
fin: 'étiquette
End Sub

Est il possible d'enlever le message n'existe pas car c'est chiant en faite ... désolé ?

Et chez moi j'ai un problème sa ne fonctionne pas comme je le souhaiterai

les textbox et combobox ne se remplissent pas automatiquement

Quelqu'un a t il une solution ?

Re,

Si tu avais daigné mettre deux ou trois lignes dans la base de données j'aurais pu tester...

Renvoie un fichier avec quelques lignes de données et je pourrais peut-être corriger.

Le code sans le message :

Private Sub T3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément)

Set O = Worksheets("BD") 'définit l'onglet O
TV = O.Range("A3").CurrentRegion 'définit le tableau de valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If TV(I, 3) = Me.T3.Value Then 'condition : si la donnée ligne I colonne 3 de TV est égale à la valeur de T3
        Cb1.Value = TV(I, 1) 'renvoie la donnée ligne I colonne 1 de TV dans Cb1
        Cb2.Value = TV(I, 2) 'renvoie la donnée ligne I colonne 2 de TV dans Cb2
        Cb3.Value = TV(I, 7) 'renvoie la donnée ligne I colonne 7 de TV dans Cb3
        T1.Value = TV(I, 17) 'renvoie la donnée ligne I colonne 17 de TV dans T1
        T2.Value = TV(I, 18) 'renvoie la donnée ligne I colonne 18 de TV dans T2
    End If 'fin d la condition
Next I 'prochaine ligne de la boucle
End Sub

Voici le fichier avec quelques données.

Désolé j'ai fait un test, et j'ai essayé de modifié le code mais je n'arrive pas a mes fins.

Re,

Je comprend mieux le problème. Le code proposé recherche dans la colonne C de l'onglet BD si le numéro de châssis (tapé dans la textbox T3) existe. Il semblerait que ce que tu demandes en fait c'est de chercher dans l'onglet Data si ce numéro de châssis existe ? Mais dans quelle colonne ?

Du coup je ne comprends plus rien car je 'm'attendais à voir des lignes de données dans l'onglet BD et toi tu les as mises dans l'onglet Data. j'ai beau relire ton premier post je ne comprends plus rien.

Ce que je te propose, c'est tu réexpliques ta requête en nommant précisément les onglets ( et les colonnes si besoin), bref que ce soit compréhensible pour quelqu'un de complètement étranger à ton projet et qui ouvre le fichier pour la première fois.

Désolé erreur de copier coller non c'est bien dans l'onglet BD que je veux chercher (mais quel nul je suis .... )

Je te renvoie le fichier bien modifié

Effectivement comme je me suis trompé cela peut paraitre bizarre.

Je reprend :

Je souhaiterai que dans mon userform si je tape dans la textbox T3 un numéro de chassis qui est déjà présent dans l'onglet BD dans la colonne C que celle ci me renvoie dans :

la textbox T1 la colonne Q

la textbox T2 la colonne R

la combobox Cb1 la colonne A

la combobox Cb2 la colonne B

la combobox Cb3 la colonne G

42anomalies1.xlsm (669.57 Ko)

Re,

Bon j'ai un problème avec ton fichier. Comme je suis sous XP 2010 64 bits il me faut commenter tout le code du Module2 pour que VBA fonctionne. Ça a certainement une incidence sur la suite... mais je ne peux pas tester sans faire cela.

Du coup, je commente aussi le code d'Initialisation et d'Activation de l'Userform qui fait référence au Module2...

Maintenant quand je teste ça marche car j'ai converti le numéro en texte.

Seuls soucis :

• ça renvoie l'heure dans la TextBox T2 mais pas au bon format, il te faudra adapter...

• Je ne sait pas pourquoi j'ai une erreur sur la ligne :

 Cb3 = TV(I, 7) 'renvoie la donnée ligne I colonne 7 de TV dans Cb3

uniquement pour la valeur 87452. Pour les autres ça marche, je n'explique pas pourquoi ?

Peut-être que chez toi avec le code complet ça marchera... Dis moi.

Code à rajouter dans l'Userform :

Private Sub T3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément)

Set O = Worksheets("BD") 'définit l'onglet O
TV = O.Range("A3").CurrentRegion 'définit le tableau de valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If CStr(TV(I, 3)) = Me.T3.Value Then 'condition : si la donnée ligne I colonne 3 de TV est égale à la valeur de T3
        Cb1 = TV(I, 1) 'renvoie la donnée ligne I colonne 1 de TV dans Cb1
        Cb2 = TV(I, 2) 'renvoie la donnée ligne I colonne 2 de TV dans Cb2
        Cb3 = TV(I, 7) 'renvoie la donnée ligne I colonne 7 de TV dans Cb3
        T1 = TV(I, 17) 'renvoie la donnée ligne I colonne 17 de TV dans T1
        T2 = TV(I, 18) 'renvoie la donnée ligne I colonne 18 de TV dans T2
    End If 'fin d la condition
Next I 'prochaine ligne de la boucle
End Sub

Merci bien,

Sa marche très bien

Merci du temps que tu as passé, et de l'energie pour traduire tout le code.

Merci des explications que tu m'as donnée.

Effectivement j'avais trouvé que le problème venait d'une conversion.

Merci bien tu me sauve la vie dans mon projet.

Je vais maintenant cherché a convertir l'heure.

Bien cordialement.

Re,

Pour l'heure, ça devrait donner une ligne du type :

T2 = Format(TV(I, 18), "h:mm;@") 'renvoie la donnée ligne I colonne 18 de TV dans T2

Merci bien effectivement c'est cela.

Encore merci pour l'épine que tu m'as enlevé du pied.

j'ai une petite amélioration a demandé :

La recherche et le remplissage se font bien, maintenant j'ai un deuxième userform qui s'ouvre quand on click sur enregistrer.

je voudrai par rapport aux option bouton sur le deuxième userform faire la recherche ou ne pas la faire.

Donc :

Si l'option button OB1 est vrai donc que vrai apparait dans une cellule de la colonne X je voudrai un message "impossible ce numéro de chassis existe déjà et le contrôle est déjà fini".

Si l'option button OB2 ou OB3 est vrai la recherche et l'affichage peuvent se faire normalement.

est ce possible ? faut il utilisé if else et end if ?

Merci de votre aide.

j'ai remis le fichier a jour en pièce jointe

108anomalies1.xlsm (676.66 Ko)

Bonjour,

Désolé Mika mais avec ma version 64 bits ton fichier fonctionne très mal. Comme je t'ai expliqué, Il me faut commenter tout le Module2 et toutes les lignes qui y font référence. C'est pénible et donc je vais en rester là... Bonne Chance !

OKAY un grand merci ThauThème pour ton aide si précieuse.

Quelqu'un d'autre à une idée pour moi ?

Rechercher des sujets similaires à "remplir combobox textbox via recherche"