Conditions pour USF

V

VB_novice

Guest
Kikou à tous !

J’ai un pb d’incrémentation qui ne doit pas être méchant, mais je n’ai pas trouvé comment faire…
Dans un Userform, j’ai une ListBox et une Combobox avec des données.
Quand je sélectionne une ligne de chaque boite et que je clique sur un bouton, je voudrais visualiser mes 2 sélections dans 2 TextBox placées dans le même formulaire. Là ca va encore....
Là ou ça se complique, c'est que si je sélectionne une autre ligne de la ListeBox et de la ComboBox, je voudrais que 2 nouvelles TextBox s’affichent et soient remplies avec cette nouvelle sélection.

C’est une histoire de boucle avec conditions, mais je n’y arrive pô. :(


Private Sub CmdAjouter_Click()

TextBox1 = Lst_Axe_2.Value
TextBox2 = cbxNiveau2.Value

End Sub

Là, à la 2ème sélection, ça va changer le contenu de mes 2 TextBox, alors que je voudrais qu’il me crée les TextBox 3 et 4 et qu’ils me les remplisse avec mon choix. :-(

A vos avis éclairés !
 
@

@+Thierry

Guest
Kikou VB_Novice !! Kikou le Forum ;-)

Huum, oui oui pas de problème, mais tu veux aller jusqu'à combien de TextBox ainsi ?...

Une idée, mais je ne suis pas vraiment sûr dans quoi je mets les pieds car ta demande est peu Orthodoxe...

Donc pour tester cette exemple il faut :

Un UserForm avec : 1 ListBox nommée ListBox1... Et Plusieurs TextBoxs...

Dans le Module du UserForm :

Private Sub UserForm_Initialize()
With ListBox1
.AddItem "Toto"
.AddItem "Zaza"
.AddItem "Lulu"
.AddItem "Titi"
End With
End Sub


Private Sub ListBox1_Click()
Dim CTRL As Control
For Each CTRL In Controls
If TypeOf CTRL Is MSForms.TextBox Then
If CTRL = "" Then CTRL = ListBox1: Exit For
End If
Next
End Sub


Résultat, à chaque click dans la ListBox la première des TextBox sera remplie par la valeur sélectionnée de la ListBox.... Et ensuite ce sera la seconde TextBox vide qui sera remplie au click suivant et etc etc ...

Est-ce que c'est celà ?

Bonne Fin d'Aprèm
@+Thierry


PS : Notez, pour ceux que çà interresse, la rupture dans la boucle ci-dessus avec un "Exit For" qui est très pratique dans des cas de figure comme celui ci...
 
V

VB_novice

Guest
re-kikou !

Waouw ! Tu tombes en plein dans le mille ! ^__^
Merci bcp bcp bcp ! ! !

Là, je comprends bien comment remplir chaque TextBox avec la ListBox.

Concernant ta question sur le nombre de TextBox, il y en a maximum autant que de choix dans la ListBox.
Mais je voudrais qu’elles soient invisibles sauf quand on les remplit. Il doit y avoir du .Visible = True ou False avec des conditions.

Mais le hic là, les TextBox se remplissent par incrémentation de 1. TextBox1, puis TextBox2 etc…
Or, j’ai besoin d’alterner à savoir la TextBox1 qui est remplie par ListBox1 puis TextBox2 par Combobox2 et ainsi de suite…
Comment tu lui dis ça ? ! ? Enfin, si c’est possible….

Private Sub UserForm_Initialize()

With ListBox1
.AddItem "Toto"
.AddItem "Zaza"
.AddItem "Lulu"
.AddItem "Titi"
End With

With ComboBox1
.AddItem "1"
.AddItem "2"
.AddItem "3"
.AddItem "4"
End With

End Sub


Private Sub ListBox1_Click()
Dim CTRL As Control
For Each CTRL In Controls
If TypeOf CTRL Is MSForms.TextBox Then
If CTRL = "" Then CTRL = ListBox1: Exit For
End If
Next
End Sub


Private Sub ComboBox1_Click()
Dim CTRL As Control
For Each CTRL In Controls
If TypeOf CTRL Is MSForms.TextBox Then
If CTRL = "" Then CTRL = ComboBox1: Exit For
End If
Next
End Sub
 
@

@+Thierry

Guest
Salut VB_Novice, le Forum,

Waouw !! c'est assez tiré par les cheveux ton histoire... Mais bon, çà m'amuse... ;-)

Alors voici aussi une procédure assez tirée par les cheveux, mais il faut au moins çà pour gérer un truc de la sorte (lol)

Matériel nécessaire
1 UserForm
1 ComboBox nommée ComboBox1
1 ListBox nommée ListBox1
12 TextBoxs Nommée TextBox1, TextBox2, TextBox3,....TextBox11 !

Le Code !!!

Option Explicit
Dim QuiClick As Boolean

Private Sub UserForm_Initialize()
Dim Numero As Byte, Digit As Byte
Dim CTRL As Control
QuiClick = True


For Each CTRL In Controls
If TypeOf CTRL Is MSForms.TextBox Then
If Len(CTRL.Name) = 8 Then Digit = 1 Else Digit = 2
Numero = CByte(Right(CTRL.Name, Digit))
Select Case Numero
Case 1, 3, 5, 7, 9, 12: CTRL.Tag = "LstBox"
Case 2, 4, 6, 8, 10, 11: CTRL.Tag = "CmbBox"
End Select
CTRL.Visible = False
End If
Next

With ListBox1
.AddItem "Toto"
.AddItem "Zaza"
.AddItem "Lulu"
.AddItem "Titi"
End With

With ComboBox1
.AddItem "1"
.AddItem "2"
.AddItem "3"
.AddItem "4"
End With
End Sub


Private Sub ListBox1_Click()
Static Click As Byte
Click = Click + 1
If Click > 6 Then MsgBox "Y a plus de TextBox !!!": Exit Sub
If QuiClick = False Then MsgBox "C'est au tour de la ComboBox": Exit Sub
Dim CTRL As Control
For Each CTRL In Controls
If CTRL.Tag = "LstBox" Then
If CTRL = "" Then CTRL.Visible = True: CTRL = ListBox1: Exit For
End If
Next
QuiClick = False
ComboBox1.SetFocus
End Sub

Private Sub ComboBox1_Click()
Static Click As Byte
Click = Click + 1
If Click > 6 Then MsgBox "Y a plus de TextBox !!!": Exit Sub
If QuiClick = True Then MsgBox "C'est au tour de la ListBox": Exit Sub
Dim CTRL As Control
For Each CTRL In Controls
If CTRL.Tag = "CmbBox" Then
If CTRL = "" Then CTRL.Visible = True: CTRL = ComboBox1: Exit For
End If
Next
QuiClick = True
ListBox1.SetFocus
End Sub

Hi hi hi !!! C'est assez ouf mais çà fonctionne... (Pour le Fun j'ai ajouté une Boolean "QuiClick" et une Static "Click" Mdrrr)

En fait au point où en on est il faudrait peut être créer carrément les TextBox à la volée par programmation .... Mais là commence une autre histoire... Mais tu peux toujours voir ce Fil avec une ch'ti démo bien tournée de derrière les fagots...

Le Fichier : USF_ListBox_A_La_Volee.zip (48k)

Le Fil : Lien supprimé

Voilà VB_Novice, tu es paré !!

Bon Appétit à tous et toutes
@+Thierry
 
V

VB_novice

Guest
Et 1 statue à l’effigie de @+Thierry, 1 !

Non seulement ton code répond à mes attentes, mais en plus j’ai compris ! Merci à toi vénérable maître. ^__^

Je me serais bien penché pour créer les TextBox à la volée, mais la démo plante chez moi. :-(
Erreur d’exécution ‘1004’
Impossible de lire la propriété Find de la classe Range
« Set C = .Find(Text, LookIn:=xlValues) »

Je suis sous Excel 97, c’est p‘tet pour ça. Mais dans le lien vers le fil, Michel dit qu’il a du faire des modifs pour adapter à Excel 97, donc c’est possible. C’est dommage, car elle a l’air géniale la démo !

En tout cas, merci du fond du cœur !


@+
 
V

VB_novice

Guest
Beh je voudrais bien, mais pour des raisons de compatibilité, je suis obligé d'utiliser Xl97... :-(

En bronze la statue, c'est noté !
Dans 2 questions, elle sera en argent et dans 5 en OR massif ! :))
 

Statistiques des forums

Discussions
312 191
Messages
2 086 051
Membres
103 108
dernier inscrit
Captain NRJ