Erreur .validation avec feuille protégée VBA

Résolu
Bonjour,

J'ai un problème avec un code VBA qui crée une liste de validation sur mon fichier. Ma feuille doit être protégée pour les donner accès aux utilisateurs seulement aux cellules où il y a une validation à choisir (cellules A10:A42). Lorsque je met la protection sur la feuille, mon code VBA me donne une erreur dans ma boucle With à la ligne qui commence par .Add Type

Si j'enlève la protection, le code fonctionne comme désiré.

La plage source de la validation n'est pas protégée. (rdp!'A4:ADernièrelignenonvide).

Pouvez-vous me donner un coup de main svp.

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim LCRN As Integer
Dim Range As Range
Dim ShtF As Worksheet
Dim ShtC As Worksheet
Set ShtF = ThisWorkbook.Sheets("Feuil1")
Set ShtC = ThisWorkbook.Sheets("rdp")

LCRN = ShtC.Range("$A$4").End(xlDown).Row + 1
Set Range = ShtC.Range("$A4:A" & LCRN)

With ShtF.Range("A10:A42").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="='" & ShtC.Name & "'!" & Range.Address
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
End Sub

Merci à l'avance !!

5 réponses

  1. Bonjour,

    Pourquoi recreez-vous ces listes de validation systematiquement ????
    0
    1. Parce que je dois avoir une liste de validation avec une source de données variables. La liste se modifie avec l'ajout de lignes dans l'onglet 'rdp'.
      0
      1. Bonjour,

        Vous definissez une formule ici azerty avec quelque chose ex:
        =rdp!A4:A5

        vous selectionnez toutes vos validation de donnees et dans liste vous mettez =azerty

        et vous remplacez votre code par celui-ci:

        il cree une formule azerty avec ce qu'il y a dans rdp!A4:Ax x etant la dernier cellule non vide colonne A

        Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        Dim LCRN As Integer
        Dim Range As Range
        Dim ShtC As Worksheet

        Set ShtC = ThisWorkbook.Sheets("rdp")

        LCRN = ShtC.Range("$A$4").End(xlDown).Row + 1
        Set Range = ShtC.Range("$A4:A" & LCRN)

        'delete de la formule
        ActiveWorkbook.Names("azerty").Delete
        'cree la formule pour les liste de validation
        ActiveWorkbook.Names.Add Name:="azerty", RefersToR1C1:="=rdp!" & Range.Address(ReferenceStyle:=xlR1C1)
        End Sub


        Il est evident que vous pouvez mettre changer le nom de la formule.

        Mefiez vous des variables avec le meme nom que les mots reserves d'excel ou autre ex: Range

        A+
        0
        1. Contributeur
          Bonjour,

          Je n'ai pas testé la proposition de f894009.
          Sinon tu peux déprotèger et re-protèger ta feuille avec unprotect et protect (voir aide pour syntaxe avec ou sans mot de passe).
          eric

          En essayant continuellement, on finit par réussir.
          Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
          En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
          0
          1. Bonjour eriiic,

            Ce que j'ai propose marche mais ai trouve quand meme plus simple avec une formule pour les listes de validation, mais je n'avais jamais essaye de modifier une formule definie alors:

            pour 123Martin:=DECALER(rdp!A4;;;NBVAL(rdp!A:A))
            0
        2. Oui,

          ça marche bien !

          Merci beaucoup,
          0