Affichage valeur dans userform en fonction d'une autre

osiris150

XLDnaute Occasionnel
Bonjour à tous,

Je galère à trouver une solution en vba afin d'afficher un ou plusieurs valeurs dans un userform en fonction de la valeur d'une autre colonne.
Je m'explique :

En colonne A, j'ai une liste de code article. En colonne B j'ai une liste de nuances.
Un même code article peut avoir plusieurs nuances.
Donc ce que je souhaiterais faire, c'est de pouvoir afficher les nuances de l'article dans le userform.
Si l'on prend l'exemple qui est dans pièce jointe avec l'article 1111 qui peut avoir comme nuance F1, F2 et F3, il faudrait que dans l'userform apparaisse dans les textbox28, textbox29 et textbox30 les valeurs F1, F2 et F3

Je vous remercie par avance pour votre aide.
Codrialement
 

Pièces jointes

  • Nuances.xlsm
    23.5 KB · Affichages: 35

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Osiris, bonjour le forum,

Il faut avouer que ta UserForm est très mal foutue. Je verrai plutôt une ComboBox pour renseigner le code, et une ListBox qui, en fonction du code renseigné afficherait les nuances existantes... Mais là, avec les 5 TextBoxes, je ne vois pas où tu veux en venir...
 

osiris150

XLDnaute Occasionnel
Bonjour Robert,

Et merci de t'intéresser à mon cas :)
en fait ce userform est un de tableau de bord à la base . Dans l'exemple je n'ai laissé que ces 5 textbox et enlevé tout ce qui fonctionnait déjà.
L'idéal c'est que lorsque on fait défiler le curseur cela change en temps réel les valeurs dans les textbox.
Je ne peux pas utiliser de combo ou listbox dans ce cas précis.
Pour infos voici à quoi il ressemble avec l'ensemble des données :
Du coup il ne me manque que ce problème de nuances à résoudre.
upload_2018-6-11_14-43-43.png
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

L'autre jour j'ai amené une photo de mon pneu crevé à mon garagiste ! Il a pas pu me le réparer l'incompétent !... Bon sérieusement, tu renseignes le code où ? Le nom de la TextBox. Si tu veux qu'on t'aide il faut que tu nous donnes les moyens de t' aider non...
 

osiris150

XLDnaute Occasionnel
Le code, je pense qu'il est à mettre d'une part dans l'userform et aussi le Worksheet_Change pour que les valeurs s'actualisent quand on change de ligne avec le curseur et pour le nom des textbox, ils sont indiqués dans l'userform à savoir : textbox28, textbox29,textbox30, textbox31 et textbox32.
Je ne sais pas quoi vous donner de plus comme info... Dites-moi s'il y a un souci.
Merci
 

osiris150

XLDnaute Occasionnel
je voudrais bien le mettre mais il fait plus de 30 Mo ... donc très compliqué. Et j'ai des données confidentielles de mon entreprise dessus donc je ne peux pas. le mettre en ligne.
Je pensais que mon fichier exemple aurait suffit.
Ce n'est pas grave, je vais continier à chercher. Merci quand même.
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Osiris, par Tutatis! :eek: :D
Bonjour Robert :)

Ton fichier exemple en retour. Un petit incovénient pour le chiffre 1111
(et heureusement que t'en a mis 4, sinon j'aurais eu les flics aux fesses :D), le résultat est décalé.

J'ai ajouter une textbox pour la recherche et renommées celles-ci de 1 à 6.
Inscrit un nombre puis ENTER du clavier.
 

Pièces jointes

  • Nuances-1.xlsm
    25.6 KB · Affichages: 49
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Une petite modif car si L'Userform n'est pas fermée certaine anciennes valeurs peuvent rester :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (Tableau TeMPoraire)

If Application.Intersect(Target, Range("A3").CurrentRegion) Is Nothing Then Exit Sub 'si le double-clic a lieu alleurs que dans un code, sort de la procédure
Cancel = True
TV = Me.Range("A3").CurrentRegion 'défini le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les ligne I du tableau des valeur TV
    If CStr(TV(I, 1)) = CStr(Target.Value) Then D(TV(I, 2)) = "" 'si les données correspondent, alimente le dictionnaire D avec la nuance
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'alimente le tableau temporaire D avec la liste du dictionnaire D sans doublon
For I = 0 To 4
    UserForm1.Controls("Textbox" & 28 + I).Value = "" 'vide la Texbox de la boucle
Next I
For I = 0 To 4 'boucle sur les 5 textboxes
    On Error Resume Next 'gestion des erreur, en cas d'erreur va à la ligne suivante
    UserForm1.Controls("Textbox" & 28 + I).Value = TMP(I) 'alimente la textbox de la boucle avec la nuance du tableau (génére une erreur quand plus de nucance)
    If Err > 0 Then Exit For 'si une erreur a été générée, sort de la procédure
Next I 'prochaine textbox de la boucle
On Error GoTo 0 'annule la gestion des erreurs
UserForm1.Show 'affiche l'UserForm1
End Sub
 

osiris150

XLDnaute Occasionnel
Merci Robert ! vraiment excellent en si peu de temps . Respect ! c'est exactement ce que je souhaite
Par contre je vais avoir beaucoup de mal à comprendre le code :).
Je vais essayer de l'adapter à mon tableau de bord sans le double click.

Re

actualiser les données en temps réel
Qu'est-ce que tu veux dire par là?


En fait l'idée c'est que lorsque l'on change de ligne avec le curseur par exemple que l'on passe de A3 à A4, les valeurs changent automatiquement dans l'userform.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 655
Messages
2 111 604
Membres
111 217
dernier inscrit
aladinkabeya2