Bonjour,

Je suis sous excel 2016.

J'ai fait un fichier avec des listes en cascade VBA (base du fichier transmis par l'excellent Jacques BOISGONTIER) qui fonctionne tres bien tant que je ne l'enregistre pas sous XLSM.

Si je l’enregistre en XLSM et que je le réouvre, il plante à l'ouverture.

Nom : dialogue2.JPG
Affichages : 435
Taille : 118,8 Ko

Ensuite dans l'editeur VBA, cela me creer une feuille (virtelle puisqu'elle n'est pas dans les onglets de l'excel) dans laquelle mon code qui etait dans la feuille planning est transferé.

Nom : code apparu.JPG
Affichages : 445
Taille : 148,3 Ko

Cela n'arrive que lorsque ma liste comporte plus de 186 enregistrements.

Ceci est un grand mystère pour moi mais peut-être pas pour la communauté de developpez !

Je pense que c'est certainement un problème d'options et/ou de compatibilité Excel 2016.

À toutes fins utiles je joins mon code (ou plutôt celui de Jacques )

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
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect([f5:f1000], Target) Is Nothing And Target.Count = 1 Then
    Set f = Sheets("matériel")
    Set d = CreateObject("Scripting.Dictionary")
'    d("demande") = ""
    For Each c In f.Range("a2:a" & f.[a65000].End(xlUp).Row): d(c.Value) = "": Next c
    Target.Validation.Delete
    Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
  End If
End Sub
 
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect([f5:f1000], Target) Is Nothing And Target.Count = 1 Then
   If Target <> "" Then
    Set f = Sheets("matériel")
    Set d = CreateObject("Scripting.Dictionary")
        d("demande") = ""
    For Each c In f.Range("a2:a" & f.[a65000].End(xlUp).Row)
      If c.Value = Target Then d(c.Offset(, 1)) = ""
    Next c
    If d.Count > 0 Then
      Target.Offset(, 1).Validation.Delete
      Target.Offset(, 1).Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
      a = d.keys: Target.Offset(, 1) = a(0)
      If d.Count > 1 Then Target.Offset(, 1).Select: SendKeys "%{down}"
     Else
       Application.EnableEvents = False
       Target = ""
       Target.Offset(, 1) = ""
       Target.Offset(, 1).Validation.Delete
       Application.EnableEvents = True
     End If
   End If
  End If
End Sub

Merci d'avance pour l'aide que vous pourrez m'apporter