Erreur .validation avec feuille protégée VBA

Résolu/Fermé
123Martin Messages postés 6 Date d'inscription mardi 26 mai 2015 Statut Membre Dernière intervention 28 mai 2015 - 28 mai 2015 à 13:26
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 29 mai 2015 à 08:15
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 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
28 mai 2015 à 15:08
Bonjour,

Pourquoi recreez-vous ces listes de validation systematiquement ????
0
123Martin Messages postés 6 Date d'inscription mardi 26 mai 2015 Statut Membre Dernière intervention 28 mai 2015
28 mai 2015 à 16:21
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 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 28/05/2015 à 18:30
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 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié par eriiic le 28/05/2015 à 19:18
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 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 mai 2015 à 08:15
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 Date d'inscription mardi 26 mai 2015 Statut Membre Dernière intervention 28 mai 2015
28 mai 2015 à 19:37
Oui,

ça marche bien !

Merci beaucoup,
0