Erreur avec xlValidateList entre UserInterfaceOnly

Bonjour,

Voulant exécuter toutes les macros mais en mode protégé, j'ai choisi d'utiliser userinterfaceonly mais elle ne marche pas avec cette macro :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim choix
Dim f As Worksheet
choix = ""
For Each f In Worksheets
    If f.Name <> "Template" Then choix = choix & f.Name & ","
Next
With ActiveSheet.Range("B9").Validation
    .Delete
    .Add xlValidateList, Formula1:=choix
End With
End Sub

L'erreur surligné en jaune : .Add xlValidateList, Formula1:=choix

Mon code complet dans ThisWorkBook :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim choix
Dim f As Worksheet
choix = ""
For Each f In Worksheets
    If f.Name <> "Template" Then choix = choix & f.Name & ","
Next
With ActiveSheet.Range("B9").Validation
    .Delete
    .Add xlValidateList, Formula1:=choix
End With
End Sub
Private Sub Workbook_Open()
Dim Ws As Worksheet

   For Each Ws In ThisWorkbook.Worksheets
      Ws.Protect "mdp", UserInterfaceOnly:=True
   Next Ws
End Sub

Quelqu'un aurait-il une solution ?

Bonjour,

Effectivement, UserInterfaceOnly n'est pas universel ... il y a des cas où cela ne fonctionne pas ...

Il faut donc, dans ce cas-ci, faire une exception ...

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim choix
Dim f As Worksheet
    choix = ""
    For Each f In Worksheets
        If f.Name <> "Template" Then choix = choix & f.Name & ","
    Next
    With ActiveSheet.Range("B9").Validation
        .Delete
        ActiveSheet.Unprotect "mdp"         ' << déprotéger la feuille
        .Add xlValidateList, Formula1:=choix
        ActiveSheet.Protect "mdp"           ' << reprotéger la feuille
    End With
End Sub

Private Sub Workbook_Open()
Dim Ws As Worksheet

    For Each Ws In ThisWorkbook.Worksheets
        Ws.Protect "mdp", UserInterfaceOnly:=True
    Next Ws
End Sub

ric

Bonjour,

Jusqu'à ce jour, je n'ai jamais détecté de cas ou UserInterfaceOnly ne fonctionne pas... Quand c'est utilisé à bon escient !

En premier dans Workbook_Open

En premier dans Workbook_SheetActivate et éventuellement avec piqure de rappel dans la fenêtre d'exécution surtout quand on a provoqué un plantage non intercepté par une gestion d'erreur efficace.

Il n'est pas interdit d'en semer quelques-uns au début des procédure "sensibles" (sans Unprotect)... Surtout quand on débute car UserInterfaceOnly est Volatile.

A+

Bonjour à tous,

@galopin01 ... Suite à ton propos ... je n'ai pas réussi à faire autrement.

Si tu avais l'amabilité de regarder le fichier et nous donner une solution ... sans utiliser unprotect et protect ... ce serait bien aimable ...

ric

Jusqu'à ce jour, je n'ai jamais détecté de cas ou UserInterfaceOnly ne fonctionne pas...

Eh bien ce jour est arrivé : Désolé mais je n'ai pas trouvé de solution !

A+

Bonjour à tous,

@galopin01 ... merci pour tes efforts et ton expertise

ric

Bonjour à tous,

si il n'y a pas de validation à ajouter on peut tricher un peu :
mettre la liste des feuilles dans un coin sur une plage nommée.
Les validations sur ce nom restent inchangées.
eric

Merci pour vos messages, c'est pile ce qu'il me fallait !

Rechercher des sujets similaires à "erreur xlvalidatelist entre userinterfaceonly"