Erreur .validation avec feuille protégée VBA

Résolu
123Martin Messages postés 6 Statut Membre -  
f894009 Messages postés 17413 Statut Membre -
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

f894009 Messages postés 17413 Statut Membre 1 715
 
Bonjour,

Pourquoi recreez-vous ces listes de validation systematiquement ????
0
123Martin Messages postés 6 Statut Membre
 
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
f894009 Messages postés 17413 Statut Membre 1 715
 
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
eriiic Messages postés 25847 Statut Contributeur 7 279
 
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
f894009 Messages postés 17413 Statut Membre 1 715
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
123Martin Messages postés 6 Statut Membre
 
Oui,

ça marche bien !

Merci beaucoup,
0