Evênement change sur ComboBox

  • Initiateur de la discussion Initiateur de la discussion Profane
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Profane

XLDnaute Occasionnel
Bonjour a tous,
sur un userform je dispose de plusieurs combobox (11), je récupére leurs valeurs que j'envoi sur des textBox (11)
pour résumé :
textbox1.Value = combobox1.value
textbox2.Value = combobox2.value
.......
malheureusement je dois coder ceci sur chaque evenement change du combobox concerné (1 à 11)
y a t'il moyen de passer par une boucle ?
Cordialement
 
Re : Evênement change sur ComboBox

Merci pierrot
mais en fait mon soucis se situe sur l'evenement 😛rivate Sub ComboBox(1 à 11)_Change() du userform
car a chaque changement de valeur de comboxbox , je dois réecrire l'evenement correspondant :-> Private Sub ComboBox(1)_change, Private Sub ComboBox(2)_change, Private Sub ComboBox(n)_change....
bon aprés midi
 
Re : Evênement change sur ComboBox

en ajoutant du code , ca devrait être plus "parlant"

'récupération des valeurs des combobox et copie dans les textbox correspondant en mode multi-ligne
Private Sub ComboBox1_Change()
TextBox1.Value = ComboBox1.Value
End Sub
Private Sub ComboBox2_Change()
TextBox2.Value = ComboBox2.Value
End Sub

Private Sub UserForm_Initialize()
'alimentation des combobox service-terminal-réseau

ComboBoxListeService.List = Range("Service").Value
ComboBoxListeTerminaux.List = Range("Terminal").Value
ComboBoxListeReseaux.List = Range("Réseau").Value

'alimentation des combobox critères
Dim k, l, m As Integer
For k = 1 To 11
Controls("ComboBox" & k).List = Range("Rapidité").Value
Next
For l = 12 To 22
Controls("ComboBox" & l).List = Range("Précision").Value
Next
For m = 23 To 33
Controls("ComboBox" & m).List = Range("Disponibilité").Value
Next
End Sub

en gros je veux pas repeter 33 la même ligne en tete sur les evenement change des combo ;-)
 
Re : Evênement change sur ComboBox

Re,

bon, je l'ai fait... dans le module de l'usf :
Code:
Option Explicit
Private MesObjets() As New Classe1
Private Sub UserForm_Initialize()
Dim i As Byte
For i = 1 To 11
    ReDim Preserve MesObjets(1 To i)
    Set MesObjets(i).cb = Me.Controls("ComboBox" & i)
    Set MesObjets(i).tb = Me.Controls("TextBox" & i)
Next i
End Sub

dans un module de classe nommé "Classe1" :
Code:
Option Explicit
Public WithEvents cb As MSForms.ComboBox
Public WithEvents tb As MSForms.TextBox
Private Sub cb_Change()
tb = cb
End Sub
 
Re : Evênement change sur ComboBox

Bonjour à tous,

J'espère que vous allez bien...^_^

Moi, je suis assez débutant en ce qui concerne la prog. et en particulier en vba...

Je suis entrain de mettre au point une facturation automatisée. et depuis au moins une semaine, je fais face à un petit frein... enfin, dû au manque de connaissance.

grosso-modo, je dois déclarer 26 ComboBox dans INITIALISATION ...jusqu'à là pas de souci, avec une boucle "For" et le tour et joué. Mais en ce qui concerne "Private Sub ComboBox_Change()" là je bloque.... bien sur facile de déclarer les combobox une à une , mais on se retrouver très vite dépassant la 500 ième ligne

ma question, est-il possible de créer une boucle/procédure pour pour remplir mes différentes combobox sans avoir à recopier la même chose 26 fois...ça serait bête et surchargerait mon fichier pour rien.

MERCI d'avance.


extrait du code :


Private Sub ComboBox1_Change()
Dim ligne As Long
Dim i
i = 1
If Me.Controls("Combobox" & i).ListIndex = -1 Then Exit Sub
ligne = Me.Controls("Combobox" & i).ListIndex + 2



If Me.Controls("Combobox" & i) = "BARRE" Then
Me.Controls("Combobox" & i + 100).Visible = True
Me.Controls("TextBox" & i + 150).Visible = True
Me.Controls("TextBox" & i + 200).Visible = False
Me.Controls("TextBox" & i + 250).Visible = True
Me.Controls("TextBox" & i + 350).Visible = True
Me.Controls("TextBox" & i + 400).Visible = True
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Me.Controls("TextBox" & i + 150) = Ws3.Cells(ligne, 2)
Else

If Me.Controls("Combobox" & i) = "CREED" Then
Me.Controls("Combobox" & i + 100).Visible = False
Me.Controls("TextBox" & i + 150).Visible = False
Me.Controls("TextBox" & i + 200).Visible = False
Me.Controls("TextBox" & i + 250).Visible = False
Me.Controls("TextBox" & i + 350).Visible = False
Me.Controls("TextBox" & i + 400).Visible = False
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Else
If Me.Controls("Combobox" & i) = "ASSEMB" Then
Me.Controls("Combobox" & i + 100).Visible = False
Me.Controls("TextBox" & i + 150).Visible = False
Me.Controls("TextBox" & i + 200).Visible = True
Me.Controls("TextBox" & i + 250).Visible = True
Me.Controls("TextBox" & i + 350).Visible = False
Me.Controls("TextBox" & i + 400).Visible = False
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Else
Me.Controls("Combobox" & i + 100).Visible = True
Me.Controls("TextBox" & i + 150).Visible = True
Me.Controls("TextBox" & i + 200).Visible = True
Me.Controls("TextBox" & i + 250).Visible = True
Me.Controls("TextBox" & i + 350).Visible = True
Me.Controls("TextBox" & i + 400).Visible = True
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Me.Controls("TextBox" & i + 150) = Ws3.Cells(ligne, 2)
End If
End If
End If
End Sub

Private Sub ComboBox2_Change()
Dim ligne As Long
Dim i
i = 2
If Me.Controls("Combobox" & i).ListIndex = -1 Then Exit Sub
ligne = Me.Controls("Combobox" & i).ListIndex + 2



If Me.Controls("Combobox" & i) = "BARRE" Then
Me.Controls("Combobox" & i + 100).Visible = True
Me.Controls("TextBox" & i + 150).Visible = True
Me.Controls("TextBox" & i + 200).Visible = False
Me.Controls("TextBox" & i + 250).Visible = True
Me.Controls("TextBox" & i + 350).Visible = True
Me.Controls("TextBox" & i + 400).Visible = True
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Me.Controls("TextBox" & i + 150) = Ws3.Cells(ligne, 2)
Else

If Me.Controls("Combobox" & i) = "CREED" Then
Me.Controls("Combobox" & i + 100).Visible = False
Me.Controls("TextBox" & i + 150).Visible = False
Me.Controls("TextBox" & i + 200).Visible = False
Me.Controls("TextBox" & i + 250).Visible = False
Me.Controls("TextBox" & i + 350).Visible = False
Me.Controls("TextBox" & i + 400).Visible = False
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Else
If Me.Controls("Combobox" & i) = "ASSEMB" Then
Me.Controls("Combobox" & i + 100).Visible = False
Me.Controls("TextBox" & i + 150).Visible = False
Me.Controls("TextBox" & i + 200).Visible = True
Me.Controls("TextBox" & i + 250).Visible = True
Me.Controls("TextBox" & i + 350).Visible = False
Me.Controls("TextBox" & i + 400).Visible = False
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Else
Me.Controls("Combobox" & i + 100).Visible = True
Me.Controls("TextBox" & i + 150).Visible = True
Me.Controls("TextBox" & i + 200).Visible = True
Me.Controls("TextBox" & i + 250).Visible = True
Me.Controls("TextBox" & i + 350).Visible = True
Me.Controls("TextBox" & i + 400).Visible = True
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Me.Controls("TextBox" & i + 150) = Ws3.Cells(ligne, 2)
End If
End If
End If
End Sub

Private Sub ComboBox3_Change()
Dim ligne As Long
Dim i
i = 3
If Me.Controls("Combobox" & i).ListIndex = -1 Then Exit Sub
ligne = Me.Controls("Combobox" & i).ListIndex + 2



If Me.Controls("Combobox" & i) = "BARRE" Then
Me.Controls("Combobox" & i + 100).Visible = True
Me.Controls("TextBox" & i + 150).Visible = True
Me.Controls("TextBox" & i + 200).Visible = False
Me.Controls("TextBox" & i + 250).Visible = True
Me.Controls("TextBox" & i + 350).Visible = True
Me.Controls("TextBox" & i + 400).Visible = True
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Me.Controls("TextBox" & i + 150) = Ws3.Cells(ligne, 2)
Else

If Me.Controls("Combobox" & i) = "CREED" Then
Me.Controls("Combobox" & i + 100).Visible = False
Me.Controls("TextBox" & i + 150).Visible = False
Me.Controls("TextBox" & i + 200).Visible = False
Me.Controls("TextBox" & i + 250).Visible = False
Me.Controls("TextBox" & i + 350).Visible = False
Me.Controls("TextBox" & i + 400).Visible = False
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Else
If Me.Controls("Combobox" & i) = "ASSEMB" Then
Me.Controls("Combobox" & i + 100).Visible = False
Me.Controls("TextBox" & i + 150).Visible = False
Me.Controls("TextBox" & i + 200).Visible = True
Me.Controls("TextBox" & i + 250).Visible = True
Me.Controls("TextBox" & i + 350).Visible = False
Me.Controls("TextBox" & i + 400).Visible = False
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Else
Me.Controls("Combobox" & i + 100).Visible = True
Me.Controls("TextBox" & i + 150).Visible = True
Me.Controls("TextBox" & i + 200).Visible = True
Me.Controls("TextBox" & i + 250).Visible = True
Me.Controls("TextBox" & i + 350).Visible = True
Me.Controls("TextBox" & i + 400).Visible = True
Me.Controls("TextBox" & i + 100) = Ws3.Cells(ligne, 3)
Me.Controls("TextBox" & i + 150) = Ws3.Cells(ligne, 2)
End If
End If
End If
End Sub
 
Re : Evênement change sur ComboBox

Bonjour,

Un petit fichier simplifié, please ! Pour mieux comprendre ton problème. Pour ne pas réinventer une structure de fichier différente de la tienne et partir sur des fausses pistes. Pour ne pas créer 400 textbox sans savoir ce qu'il faut mettre dedans. Pour tester si les solutions qui te sont données ne comportent pas d'erreurs.... Aide les autres à t'aider.

Cordialement.
 
Re : Evênement change sur ComboBox

Bonsoir Mikeo,

Bien écoute, tu trouveras ci-joint un extrait de code qui fonctionne bien....pas besoin de diffuser le classeur en entier car >10MO et près de 15 000 lignes... on s'y perdrait très vite....llooooll

Cet extrait, résume le problème auquel je fais face, c'est à dire une réitération de déclaration des "ComboBox_change". alors, qu'il faudrait mettre en place un petit truc pour éviter de répéter les mêmes commande x fois.

à titre indicatif, je dois déclarer 2x 26 Combobox dans la même UFM

Bien à toi,
 

Pièces jointes

Re : Evênement change sur ComboBox

Bonjour,

Tu peux essayer de faire quelque chose comme le fichier joint, en transférant tes changements de combobox dans un module de classe. N'ayant pas ton fichier, aucun moyen de savoir si cela marche ou pas. Dans ce forum, tu as des spécialistes de modules de classe beaucoup plus compétents que moi.

Cordialement,

Mikeo
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
389
Réponses
3
Affichages
924
L
Réponses
2
Affichages
703
Retour