Problème de protection de la feuille pour une macro

Bonjour le forum,

J'ai un fichier avec pas mal de macro, tout marche bien, sauf la dernière macro que je viens de réaliser et qui me permet de changer les propriétés de validation des données de certaines plages de cellules.

Le pbm vient de la protection de la feuille, or j'utilise bien un code sensé permettre la déprotection des feuilles pendant la réalisation des macros... donc je ne comprends pas!!

J'ai fait des test, et si je déprotège la feuille avant d'utiliser la macro, ça marche, si je ne déprotège pas avant, j'ai un débogage...

Dans le Workbook j'ai :

Private Sub Workbook_Open()
For i = 1 To Worksheets.Count
Worksheets(i).Protect Password:="PROUTPROUT", UserInterfaceOnly:=True
Next
'enlève la protection du classeur pendant les macros

 With Application
    .Calculation = xlAutomatic
    .MaxChange = 0.001
  End With
  ActiveWorkbook.PrecisionAsDisplayed = False
 On Error GoTo Sortie
 Exit Sub
Sortie
End Sub:

Et la macro qui se met en débogage :

Sub validation_données_Wkd_en_logt()
    Application.Goto Reference:="SAISIE_WEEKEND"
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Codes1_weekend2"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = "Attention : Erreur de saisie !"
        .InputMessage = ""
        .ErrorMessage = "Ce choix n'existe pas ! Vérifiez votre saisie."
        .ShowInput = True
        .ShowError = True
    End With
Sheets("Fiche d'informations").Select
Range("A1").Select
End Sub

Merci pour toute aide,

Vincent

Bonjour,

Ton code n'enlève pas la protection... il la met.

Tu dois employer UnProtect pour déprotéger.

A+

Bonjour,

lermite a écrit :

Bonjour,

Ton code n'enlève pas la protection... il la met.

Tu dois employer UnProtect pour déprotéger.

A+

Ce code permet aux macros de passer outre la protection sans être obligé de déprotéger/reprotéger.

On peut donc considérer que c'est un problème lié à la validation et non un problème de protection.

Nota : Protégé ou pas, cette macro appliqué à la feuille produit une erreur.

Nota2 : Selon mes essais beaucoup de macros enregistrées consistant à suprimer une validation pour la remplacer par une autre conduisent à une erreur.

Une des raisons en est (mais ce n'est pas la seule...) l'interprétation des séparateurs par VBA.

Comme d'habitude l'absence de fichier joint ne permet guère d'analyser plus à fond le problème...

A+

galopin01 a écrit :

Bonjour,

Ce code permet aux macros de passer outre la protection sans être obligé de déprotéger/reprotéger.

On peut donc considérer que c'est un problème lié à la validation et non un problème de protection.

Nota : Protégé ou pas, cette macro appliqué à la feuille produit une erreur.

Nota2 : Selon mes essais beaucoup de macros enregistrées consistant à suprimer une validation pour la remplacer par une autre conduisent à une erreur.

A+

D'accord avec toi pour les macros, mais quand une macros veux modifier une feuille protégée... que ce passe-t-il ?

A+

EDIT: OK j'ai tester et la macros peu modifier les cellules. (j'ignorais ce détails) comme quoi ont apprend tout les jours

bonjour,

Dans un classeur dont toute les feuilles sont protégées de cette manière

Private Sub Workbook_Open()

For i = 1 To Worksheets.Count

Worksheets(i).Protect Password:="blabla", UserInterfaceOnly:=True

Next

End Sub

...Toute macro s'exécute normalement.

La seule restriction -non négligeable il est vrai- est que la totalité du code VBA doit être particulièrement chiadé : la propriété UserInterfaceOnly:=True étant volatile toute erreur non interceptée par une gestion d'erreur valide entraîne la nécessité de relancer le Workbook_Open pour permettre aux macros de s'exécuter à nouveau.

A+

ça marche ! Merci !!

enfin... ça marche en modifiant le code ainsi :

Sub validation_données_Wkd_en_logt()
    Application.Goto Reference:="SAISIE_WEEKEND"
    ActiveSheet.Unprotect ("proutprout")
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Codes1_weekend2"
        '.IgnoreBlank = True
        '.InCellDropdown = True
        '.InputTitle = ""
        '.ErrorTitle = "Attention : Erreur de saisie !"
        '.InputMessage = ""
        '.ErrorMessage = "Ce choix n'existe pas ! Vérifiez votre saisie."
        '.ShowInput = True
        '.ShowError = True
    End With
ActiveSheet.Protect ("proutprout")
Sheets("Fiche d'informations").Select
Range("A1").Select
End Sub

Merci pour vos précisions. Il m'est difficile de joindre le fichier car il fait bien 15Mega...

Vincent

Rechercher des sujets similaires à "probleme protection feuille macro"