Activation évenement "click" pendant initialisation
Bonjour à tous,
J'aurais besoin de votre aide svp
Je possède un userform avec deux combobox.
Lors de l'initialisation de l'userform je remplis ces deux combobox sans doublon et triée
For i = 7 To Sheets("Inventaire PDR limoges SNCF").Range("O65536").End(xlUp).Row
If Sheets("Inventaire PDR limoges SNCF").Range("O" & i) <> "" Then
Modifier_PDR_equipement.Cbx_Emplacement = Sheets("Inventaire PDR limoges SNCF").Range("O" & i)
If Modifier_PDR_equipement.Cbx_Emplacement.ListIndex = -1 Then
Modifier_PDR_equipement.Cbx_Emplacement.AddItem Sheets("Inventaire PDR limoges SNCF").Range("O" & i)
End If
End If
Next i
With Modifier_PDR_equipement.Cbx_Emplacement
For i = 0 To .ListCount - 1
For j = 0 To .ListCount - 1
If .List(i) < .List(j) Then
strTemp = .List(i)
.List(i) = .List(j)
.List(j) = strTemp
End If
Next j
Next i
End With
Puis dans un l'évenement "click" des combo je les relie entre elle
c'est à dire que la sélection d'un item sur l'une d'elle affichera l'item correspondant dans l'autre.
Private Sub Cbx_IO_Click()
Dim X As String
X = Recherche_par_equipement.Cbx_IO.Text
Sheets("Inventaire PDR limoges SNCF").Columns(11).Find(What:=X).Activate
ligne = ActiveCell.Row
Recherche_par_equipement.Cbx_GMAO.Value = Cells(ligne, 14)
Recherche_par_equipement.Lst_Search.Clear
Set C = Range("K:K").Find(Recherche_par_equipement.Cbx_IO.Value)
If Not C Is Nothing Then
premier = C.Address
i = 0
Do
Recherche_par_equipement.Lst_Search.AddItem
Recherche_par_equipement.Lst_Search.List(i, 0) = C.Offset(0, -10).Value
Recherche_par_equipement.Lst_Search.List(i, 1) = C.Offset(0, -9).Value
Recherche_par_equipement.Lst_Search.List(i, 2) = C.Offset(0, 4).Value
Set C = Range("K:K").FindNext(C)
i = i + 1
Loop While Not C Is Nothing And C.Address <> premier
End If
End Sub
Cela fonctionne, seulement, lors de l'initialisation de l'userform, l'événement "click" est également activé, ce qui rend la macro extremement longue.
Pourriez-vous me dire si quelque chose dans mon code active les autres évnéments que l'initialisation, et surtout comment y remédier?
Merci à ceux qui m'accorderont un peu de leur temps =)
Cdt
Bonsoir
Si ton Userform s'appelle Modifier_PDR_equipement tu peux remplacer ce nom (seulement dans le module de l'Userform) par Me.
Pour empêcher (neutraliser) l'évènement clic il faut que tu crées une variable publique pour l'Userform
En haut du module (après l'éventuel (mais très utile) ) Option Explicit
Tu marques Dim EnCours As Boolean
Ensuite avent le remplissage des ComboBox tu initialises cette variable à True et tu la remettra à False une fois le remplissage effectué
Voir ton code
Encours = True
For i = 7 To Sheets("Inventaire PDR limoges SNCF").Range("O65536").End(xlUp).Row
If Sheets("Inventaire PDR limoges SNCF").Range("O" & i) <> "" Then
Modifier_PDR_equipement.Cbx_Emplacement = Sheets("Inventaire PDR limoges SNCF").Range("O" & i)
If Modifier_PDR_equipement.Cbx_Emplacement.ListIndex = -1 Then
Modifier_PDR_equipement.Cbx_Emplacement.AddItem Sheets("Inventaire PDR limoges SNCF").Range("O" & i)
End If
End If
Next i
With Modifier_PDR_equipement.Cbx_Emplacement
For i = 0 To .ListCount - 1
For j = 0 To .ListCount - 1
If .List(i) < .List(j) Then
strTemp = .List(i)
.List(i) = .List(j)
.List(j) = strTemp
End If
Next j
Next i
End With
Encours = False
Ensuite dans la procédure Private Sub Cbx_IO_Click() il faut tester cette variable
Private Sub Cbx_IO_Click()
Dim X As String
If Encours = True Then Exit Sub
X = Recherche_par_equipement.Cbx_IO.Text
Sheets("Inventaire PDR limoges SNCF").Columns(11).Find(What:=X).Activate
ligne = ActiveCell.Row
Recherche_par_equipement.Cbx_GMAO.Value = Cells(ligne, 14)
Recherche_par_equipement.Lst_Search.Clear
Set C = Range("K:K").Find(Recherche_par_equipement.Cbx_IO.Value)
If Not C Is Nothing Then
premier = C.Address
i = 0
Do
Recherche_par_equipement.Lst_Search.AddItem
Recherche_par_equipement.Lst_Search.List(i, 0) = C.Offset(0, -10).Value
Recherche_par_equipement.Lst_Search.List(i, 1) = C.Offset(0, -9).Value
Recherche_par_equipement.Lst_Search.List(i, 2) = C.Offset(0, 4).Value
Set C = Range("K:K").FindNext(C)
i = i + 1
Loop While Not C Is Nothing And C.Address <> premier
End If
End Sub
Si des difficultés il faut joindre ton fichier
Yeaaaaaaaaaaahh !!!!
Fantastique =) ça fonctionne au poil.
Un grand merci à toi =)