Bonjour,

Dans un userform assez complexe j'ai un menu déroulant pour trouver une ligne spécifique selon plusieurs critères.
Ci-après 2 exemples :

Nom : Ecran_1.jpg
Affichages : 552
Taille : 15,9 Ko
Nom : Ecran_2.jpg
Affichages : 434
Taille : 14,3 Ko

Comme vous pouvez le voir, dans la 2ème image le champ "Numéro d'affaire" est vide alors que dans la feuille excel avec les données il y a une seule ligne qui correspond au numéro de commande 16/361.
Cela se produit de façon tout à fait aléatoire. Dans cet exemple les données se trouvent sur la ligne 40 de l'onglet avec les données, pour le client concerné il y a d'autres commandes avant et après. Le dossier a été enregistré, fermé puis rouvert et j'obtiens le même résultat sur un autre PC.
Parfois si un jour ça plante sur une recherche le lendemain c'est OK. Parfois, comme dans cet exemple, le blocage persiste.

Ci-dessous le code utilisé pour compléter le menu en cascade.
Le champ "Numéro commande" est rempli lors de la sélection d'un client dans un onglet du formulaire. Cette partie fonctionne correctement, tous les numéros de commande apparaissent bien dans ce champ.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Private Sub Recherche_NumCde_Change()
 
Recherche_DateCde.Clear
If Recherche_NumCde.ListIndex = -1 Then Exit Sub
Societe = [Cdes_Nom]
Commande = [Cdes_NumCde]
For i = 1 To Worksheets("Commandes").Range("Cdes_DateCde").Count
    If Commande(i, 1) = Me.Recherche_NumCde And Societe(i, 1) = Me.Nom Then
        Recherche_DateCde.AddItem Range("Cdes_DateCde")(i)
    End If
Next i
If Me.Recherche_DateCde.ListCount = 1 Then
    Me.Recherche_DateCde.ListIndex = 0
    Else: Me.Recherche_DateCde.ListIndex = -1
End If
 
End Sub
Private Sub Recherche_DateCde_Change()
 
Recherche_Total.Clear
If Recherche_DateCde.ListIndex = -1 Then Exit Sub
Societe = [Cdes_Nom]
Commande = [Cdes_NumCde]
DateCommande = [Cdes_DateCde]
For i = 1 To Worksheets("Commandes").Range("Cdes_Total").Count
    If DateCommande(i, 1) = CDate(Me.Recherche_DateCde) And Commande(i, 1) = Me.Recherche_NumCde And _
        Societe(i, 1) = Me.Nom Then
        Recherche_Total.AddItem Range("Cdes_Total")(i)
    End If
Next i
If Me.Recherche_Total.ListCount = 1 Then
    Me.Recherche_Total.ListIndex = 0
    Else: Me.Recherche_Total.ListIndex = -1
End If
 
End Sub
Private Sub Recherche_Total_Change()
 
Recherche_Affaire.Clear
If Recherche_Total.ListIndex = -1 Then Exit Sub
Societe = [Cdes_Nom]
Commande = [Cdes_NumCde]
DateCommande = [Cdes_DateCde]
TotalAffaire = [Cdes_Total]
For i = 1 To Worksheets("Commandes").Range("Cdes_Affaire").Count
   If TotalAffaire(i, 1) = MyVal(Me.Recherche_Total.Value) And DateCommande(i, 1) = CDate(Me.Recherche_DateCde) _
        And Commande(i, 1) = Me.Recherche_NumCde And Societe(i, 1) = Me.Nom Then
        With Recherche_Affaire
            .AddItem Range("Cdes_Affaire")(i)
            .List(.ListCount - 1, 1) = i + 1 'ajoute le numéro de ligne de l'onglet "Commandes" dans la combo
        End With
    End If
Next i
If Me.Recherche_Affaire.ListCount = 1 Then
    Me.Recherche_Affaire.ListIndex = 0
    Else: Me.Recherche_Affaire.ListIndex = -1
End If
 
End Sub
Private Sub Recherche_Affaire_Change()
 
If Recherche_Affaire.ListIndex = -1 Then Exit Sub
Lignecde = Recherche_Affaire.List(Recherche_Affaire.ListIndex, 1)
 
End Sub
Si quelqu'un avait une bonne idée je serais preneur.

Cdlt.