RechercheV VBA à partir d'un usf vers Txtbox [Résolu/Fermé]

Signaler
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
-
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
-
Bonjour,

Premièrement : Joyeuse Pâques à tous!

Deuxièmement, voici : J'essaie (via un UsF (dans mon code : facture)de choisir dans une Combobox une info) une fois l'info sélectionnée dans la Combobox j'aimerais qu'une recherche se fasse dans la feuil 1 retrouve la donnée de ma combobox et me donne dans ma textbox de mon Usf la donnée de la colonne 3 sur la même ligne..

ça me semble assez simple et j'ai beaucoup regardé sur Internet mais ce que j'ai trouvé ne fonctionne pas et les autres que j'ai trouvé me semble beaucoup trop complexe pour ce dont j'ai besoin... Je suis débutante en VBA mais avide d'apprendre!

merci à l'avance si quelqu'un peut m'aider!
Mélanie

https://www.cjoint.com/?BDitOaf2WdA

10 réponses

Messages postés
16318
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
2 décembre 2020
3 083
Bonjour

Private Sub ComboBox1_Change()
Dim Lig As Integer

With Sheets("feuil1")
     Lig = .Columns("B").Find(What:=ComboBox1, after:=Range("B2"), LookIn:=xlValues).Row
     TextBox3 = .Cells(Lig, "C")
     TextBox4 = .Cells(Lig, "I")
End With


Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
merci beaucoup!

MÉlanie
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
ça fonctionne très bien merci. Donc avec ma combobox1, ça va rechercher dans ma feuil1 et me donne ce qui se trouve dans la colonne B, dans un textbox de mon usf.. Aussi j'aimerais que ce que je vais entrer manuellement dans ma Textbox1 aille se placer dans la colonne 7 de la même ligne de ma feuil1..j'ai essayé quelques codes mais ils ne fonctionnent pas.. merci à l'avance
Messages postés
16318
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
2 décembre 2020
3 083
Bonjour,

Je te répond dans la journée, patience :o)
Messages postés
16318
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
2 décembre 2020
3 083
Re,

Lorsque tu construis un userform, il est vivement préférable de nommer les contrôles plutôt que de laisser listbox1,combobox1, commandbutton1.... Cela facilite grandement la maintenance et l'évolution du temps de codage total (soit environ 80% du temps passé à automatiser)

donc j'ai rebaptisé les contrôles jusqu'à la 2° ligne des mémos: à toi de finir; attention la propriété "rowsource" des combo doit être Feuil3!G30:G300 et non G30:G300
d'autre part la propriété Tabindex est à 3 pour memo1 et à 4 pour mémo2, là aussi termine
Tabindex te permet de passer d'un mémo à l'autre avec la touche "tab" plut^t qu'avec la souris (on commence ici par le numéro de facture)

Concernant le numéro et la date de facture, je vérifie que le numéro est bien à 5 chiffres et que la date est au format jj/mm/aaaa ( un peu comme sur les sites web )

ci joint le classeur
https://www.cjoint.com/?3DklVhQDtlk
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour,

merci beaucoup (encore une fois!) J'ai suivi tes conseils et changé les noms des tbox et cbox... j'ai fais quelques changements.. il ne me reste juste une chose qui me bloque pour terminer.. le mémo est choisi via la combobox, la quantité (nbre) s'affiche selon le choix de cbox.. par contre le prix est entré manuellement (comme le numéro de facture et la date) donc il faudrait qu'il aille s'ajouter sur la ligne correspondante ("I").. j'ai fais un test mais cela ne fonctionne pas..

https://www.cjoint.com/?BDlgeOS64cy
Messages postés
16318
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
2 décembre 2020
3 083
Bonjour

par contre le prix est entré manuellement (comme le numéro de facture et la date) donc il faudrait qu'il aille s'ajouter sur la ligne correspondante
--


Fallait peut-^tre le dire AVANT !

je regarderai peut-^tre dans la journée mais la méthode est la m^me que pour le numéro de facture avec cells(lig, la colonne)
il faut que tu modifies l'orde des tabindex pour aller directement dans le prix après le choix dans le combo
Essaies et tu dis si tu bloques de trop: d'accord pour un coup de main mais pas pour faire "à la place"



Michel
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour,

Alors voici ce que j'ai fais comme correction :

https://www.cjoint.com/?BDlq5vcK04P

ça fonctionne mais il reste 2 petites choses à règler : quand ça va porter les données dans la feuille1, elles ne vont pas se mettre sur la ligne correspondant au mémo mais dans la première ligne vide disponible...Aussi même si je rempli seulement les 3 premières lingnes, sur la feuille 3, il me donne 9 fois la date et le numéro de facture.. je sais pas trop comment le faire.. Dois-je mettre ce code dans la sub Combobox change ou mettre une condition
Aussi j e ne comprend pas cette ligne du code, peux-tu me l'expliquer svp :
lig = .Columns("G").Find("*", , , , , xlPrevious).Row + 1
que veulent dire les espaces?
quel est le fonctionnenent de "*"

merci, je commence mais je veux comprendre et apprendre!
Mélanie
Messages postés
16318
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
2 décembre 2020
3 083
Ok, il faut que je me remette en t^te le truc; je regarde demain... :o)

Au passage, je te signale que j'avais modifié le code des boutons; regarde sur mon classeur

lig = .Columns("G").Find("*", , , , , xlPrevious).Row + 1
que veulent dire les espaces?

ce sont des paramètres dont je n'ai pas besoin mais je dois garder l'ordre d'écriture de ces parametres
on pourrait écrire
Lig=.columns("G").Find(What:="*", SearchDirection:=xlprevious).Row
"xlprevious" veut dire "précédant" par opposition à xlnext: "suivant"

* est un terme générique qui veut dire: il y a quelque chose dans la cellule

donc on trouve la ligne de la dernière cellule utilisée et on ajoute 1 qui est la première cellule vide

Il y a d'autres formules pour trouver première cellule vide
pas exemple si on est sûr qu'il n'y a pas de cellule vide intercalées
lig=Range("A3").end(xldown).row+1
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour Michel

merci beaucoup pour tes éclaircissements.. je comprends maintenant, alors c'est pour ça que ce que je veux faire ne fonctionne pas.. Le code dit d'aller chercher la première ligne vide à la suite de la dernière rempli et d'y mettre mes infos.
Tandis que moi je voudrais que ça recherche la valeur de ma Combobox et qu'un fois trouvée elle aille mettre les données de mes txbox prix, facture et date de facture via à vis la ligne correpsondante au numéro de mémo

Mélanie
Messages postés
16318
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
2 décembre 2020
3 083
bonjour Mélanie

Version 2 remaniée pour saisie prix dans usf et format numéro et date facture
fait sur le classeur que je t'avais envoyé
rappel:
"Au passage, je te signale que j'avais modifié le code des boutons"
et
"la propriété "rowsource" des combo doit être Feuil3!G30:G300 et non G30:G300 ":
en cours d'essai et maintenance on est + souvent sur la feuil1 que 3 donc G30:G300 sans précisions t'envoies les valeurs G30:G300 de la feuil1==> moment de soilitude

https://www.cjoint.com/?3DmoYq71YHj
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour

merci encore.. Donc là le montant de la facture va se mettre à la bonne place mais pas le numéro de facture ni la date de la facture (eux vont sur la première ligne vide)..tout doit se mettre sur la même ligne.

https://www.cjoint.com/?BDms4FkCcAv
Messages postés
16318
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
2 décembre 2020
3 083
ok, je n'avais pas saisi le truc que je trouvais d'ailleurs bizarre..

donc le num de facture et la date sur la m^ ligne que le mémo, c'est bien cà?
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
excact
Messages postés
16318
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
2 décembre 2020
3 083
Bonjour,
le numéro et date de facture se placent maintenant sur la ligne du numéro de mémo

Private Sub Btn_ok_Click()
Dim Lig_fact As Integer
Dim Tbox_prix As Variant, cptr As Byte
     With Sheets("feuil1")
          For cptr = 0 To 8
               Tbox_prix = Array(Me.Tbox_prix1, Me.Tbox_prix2, Me.Tbox_prix3, Me.Tbox_prix4, Me.Tbox_prix5, _
                                                                 Me.Tbox_prix6, Me.Tbox_prix7, Me.Tbox_prix8, Me.Tbox_prix9)
               If Tbox_prix(cptr) > 0 And T_lig(cptr + 1) > 0 Then .Cells(T_lig(cptr + 1), "I") = Tbox_prix(cptr)
               .Cells(T_lig(cptr + 1), "G") = Me.Tbox_num_fact
               .Cells(T_lig(cptr + 1), "H") = Me.Tbox_date_fact
          Next
     End With
     
     'sortie
     Unload Facture
     Sheets("feuil3").Activate
End Sub


En espèrant que...
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour Michel,

On va y arriver.. ça me donne un message d'erreur :
erreur 1004
erreur définie par l'application ou l'objet
et ça me met cette ligne du code en jaune

.Cells(T_lig(cptr + 1), "G") = Me.Tbox_num_fact

Si je regarde les valeur : T_lig(cptr + 1) = 0

Mélanie
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Re-Bonjour,

une fois le code reparti, je suis allée voir et tout s'est bien placé.. reste juste à savoir pourquoi le code d'erreur...


Et si tu avais la gentillesse de m'expliquer ton code j'aimerais comprendre afin de pouvoir le réutiliser et m'améliorer

merci beaucoup
Mélanie
Messages postés
16318
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
2 décembre 2020
3 083
Bonjour


un peu de précipitation de ma part, excuses moi (je n'avais testé que les 2 premiers combo, les autres n'étant pas rebaptisés )
If Tbox_prix(cptr) > 0 And T_lig(cptr + 1) > 0 Then   
                    .Cells(T_lig(cptr + 1), "I") = Tbox_prix(cptr)   
                    .Cells(T_lig(cptr + 1), "G") = Me.Tbox_num_fact   
                    .Cells(T_lig(cptr + 1), "H") = Me.Tbox_date_fact   
               End If
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour Michel,

Un énorme merci! ça fonctionne parfaitement!

Mélanie