Action generique pour combobox
Bonjour à toutes et à tous,
voila je travail sur une macro Excel pour la conciliation médicamenteuse et j'ai un ensemble de liste déroulante pour lesquelles j'aimerai mettre les mêmes actions.
Plutôt que de faire à la main le code suivant pour l'ensemble des combobox de 51 à 139 (avec un pas de 4) qui lorsque je vais faire un change sur les ComboBox ,la combobox qui suit dans l'ordre numérique soit la 52,56,60 ...140 change de valeur, je souhaiterai faire quelque chose de plus simple.
Private Sub ComboBox51_Change()
If ComboBox51.Value <> "" And ComboBox51.Value <> "Poursuivi" Then
ComboBox52.Value = "Divergente"
Else
ComboBox52.Value = "Validée"
End IfPour résumer ma demande je cherche comment en écrivant quelque ligne de code je puisse avoir la même action qui affecte différente combobox. J'ai pensé à créer une fonction qui prend comme valeur le numéro de la combobox et qui change celle qui suit mais je dois copier coller 23 fois ces lignes de code et je souhaiterai faire quelque chose de plus simple
Private Sub ComboBoxX_Change()
mafonction(X)
End IfMerci d'avance de votre réponse
Bonjour
Le mieux serait d'avoir un fichier. Sinon sur base de votre problème, peut être avec ce code ?
Dim ctrl
For Each ctrl In Me.Controls
If Left(ctrl.Name, 8) = "ComboBox" Then
Select Case ctrl.Value
Case Is <> "", "Poursuivi"
ctrl.Value = "Divergente"
End Select
End If
Next ctrlCordialement
merci beaucoup, du coup pour moi la ligne de code va s'activer une seule fois et non pas quand je vais changer la valeur d'une des ComboBox non ?
Je vois pas l’événement Change en faite, du coup je suis obliger d'attendre que l'utilisateur ait tout saisie, alors que ce que je souhaite c'est creer une action et la relie à chaqu'une des combobox.
Bonjour
Du coup en changeant le Me par le nom de mon Userform j'ai résolue le soucis.
Du coup mon code dans la classe c'est devenu
If Left(GrpCombo.Name, 8) = "ComboBox" And Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) > 50 And Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) < 140 Then
If ((Right(GrpCombo.Name, Len(GrpCombo.Name) - 8)) - 51) = 0 Or ((Right(GrpCombo.Name, Len(GrpCombo.Name) - 8)) - 51) Mod 4 = 0 Then
If GrpCombo.Text <> "Poursuivi" Then
Patient_lec.Controls("Combobox" & Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) + 1).Value = "Divergente"
Patient_lec.Controls("Combobox" & Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) + 2).Visible = True
Patient_lec.Controls("Combobox" & Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) + 3).Visible = True
nume_TextBox = (Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) - 51) / 4
Patient_lec.Controls("TextBox" & ((3 * nume_TextBox) + 118)).Visible = True
Else
Patient_lec.Controls("Combobox" & Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) + 1).Value = "Validée"
Patient_lec.Controls("Combobox" & Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) + 2).Visible = False
Patient_lec.Controls("Combobox" & Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) + 2).Value = ""
Patient_lec.Controls("Combobox" & Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) + 3).Visible = False
Patient_lec.Controls("Combobox" & Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) + 3).Value = ""
nume_TextBox = (Right(GrpCombo.Name, Len(GrpCombo.Name) - 8) - 51) / 4
Patient_lec.Controls("TextBox" & ((3 * nume_TextBox) + 118)).Visible = False
Patient_lec.Controls("TextBox" & ((3 * nume_TextBox) + 118)).Value = ""
End If
End If
End IfMerci pour votre aide