Saisie semi-automatique [Résolu]

Estelle_BNP 25 Messages postés jeudi 14 décembre 2006Date d'inscription 10 mai 2008 Dernière intervention - 13 août 2007 à 16:10 - Dernière réponse : Estelle_BNP 25 Messages postés jeudi 14 décembre 2006Date d'inscription 10 mai 2008 Dernière intervention
- 20 août 2007 à 09:54
Bonjour,

j'ai créé sous Excel une base de donnée de produits. Chaque produit a un identifiant unique composer de chiffres et de lettres.
J'ai créé également un UserForm (UserForm1) avec des TextBox (TextBox1). Cette UserForm contient au début une TextBox où je souhaite saisir l'idendifiant du produit et ensuite des TextBox qui contiennent les différentes caractéristiques du produit.
Je souhaiterai que
1- la machine me propose le plus vite possible l'identifiant du produit lorsque je commence à le saisir (saisie semi-automatique à partir de la colonne (colonne A, de la cellule A7 à A144 pour l'instant) qui contient tous les identifiants). Le nombre d'identifiants évoluera dans le temps.
2- la machine restitue les caractéristiques de ce produit dans les autres TextBox de la UserForm (la colonne B est le nom du produit, par exemple).

J'ai trouvé des programmes tout fait de saisie automatique sur le site mais lorsque je les copie/colle dans Excel, j'ai toujours un message d'erreur. Par ailleurs, je ne suis pas sûre qu'ils conviennent exactement car je n'arrive pas à comprendre le code. Pouvez-vous m'aider ?

Merci beaucoup.
Afficher la suite 

Votre réponse

4 réponses

mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 13 août 2007 à 19:03
+3
Utile
salut,

t'as de la chance, chose qui n'est pas d'origine avec vb6, l'est en VBA,  savoir la saisie semi-automatique.
Le combobox gère ceci.

Ensuite, à l'évènement initialize de ton userform, faut remplir le combobox (et donc supprimes ton TextBox1) :

Dim z as long

z = Range("A7").End(xlDown).Row
Combobox1.RowSource = "Feuil1!A7:A" & z
' remplace Feuil1 par le bon nom de ta feuille contenant les données.

Ensuite, dans l'évènement change du Combobox1 :

TextBox2.Text = Cells(Combobox1.ListIndex + 7, 2)
TextBox3.Text = Cells(Combobox1.ListIndex + 7, 3)
TextBox4.Text = Cells(Combobox1.ListIndex + 7, 4)
TextBox5.Text = Cells(Combobox1.ListIndex + 7, 5)
ets...

En gros, ListIndex c'est la position de l'item choisi, en base 0 (cad que le premier élément choisi et le n°0, le 2nd élément = N°1, etc)
Tes première données sont a partir de la ligne 7, Donc 7 + ListIndex = le numéro de la ligne dans Exce contenant les données à afficher.
Suffit de lire en affectant le bon numéro de colonne (second paramètre de l'objet Cell )

@++

<hr size ="2" width="100%" />(
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de mortalino
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 17 août 2007 à 17:55
+3
Utile
pour reprendre sur mon exemple, tu pourrais gérer l'erreur :

dans l'évènement change du Combobox1 :

On Error GoTo MyErr
TextBox2.Text = Cells(Combobox1.ListIndex + 7, 2)
TextBox3.Text = Cells(Combobox1.ListIndex + 7, 3)
TextBox4.Text = Cells(Combobox1.ListIndex + 7, 4)
TextBox5.Text = Cells(Combobox1.ListIndex + 7, 5)

Exit Sub
MyErr
MsgBox "Valeur non trouvée ! Choisissez la parmi la liste."
Combobox1.Text = vbNullString
End Sub

@++

(
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de mortalino
Estelle_BNP 25 Messages postés jeudi 14 décembre 2006Date d'inscription 10 mai 2008 Dernière intervention - 17 août 2007 à 10:01
0
Utile
C'est exactement ce que je souhaitais. Merci pour cette explication claire et concise.


Il me reste un point en suspens maintenant que j'ai implémenté votre solution : comment ne pas faire planter le programme lorsque le code saisi dans la ComboBox ne correspond pas à un code de la liste (colonne A d'Excel) ?


Je souhaiterais qu'il me mette un message du style 'Code non trouvé' plutôt que d'avoir la fenêtre Erreur d'exécution 13 : Incompatibilité de type.
Commenter la réponse de Estelle_BNP
Estelle_BNP 25 Messages postés jeudi 14 décembre 2006Date d'inscription 10 mai 2008 Dernière intervention - 20 août 2007 à 09:54
0
Utile
Ca marche à condition d'écrire MyErr: au lieu de MyErr.


Par contre le fait d'initialiser le texte de la Combobox1 ) Null relance la fonction Change et donc je dois cliquer deux fois sur le bouton OK de la fenêtre avec le message d'erreur. Y-a-t-il un moyen pour éviter ça ?

Merci.
Commenter la réponse de Estelle_BNP

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.