Protection dune feuille de calcul

Bonjour

Dans une feuille de calcul Excel en modifiant une cellule je déclenche une "Function" (Et non une macro "Sub") qui va créer des lignes qui sont placées précisément par rapport à des dessins. Si par inadvertance ces dessins sont déplacer mes lignes crées par la "Function" seront mal positionnées.Je protège donc ma feuille (Sauf les cellules non vérrouillées) et je pensais qu'en plaçant en début de ma "Function" l'instruction "Worksheets("Feuil1").Unprotect" et en fin de "Function" l'instruction "Worksheets("Feuil1").Protect" cela marcherait.Et bien non. C'est la mon problème: Avec une macro "Sub" ça marche mais pas avec une macro "Function" ? Je n'ai rien trouvé à ce sujet sur le Web. Je pense peut-être que ces instructions ne marchent pas dans une "Function". Quelle solution me proposez-vous si cela est possible. Ci-dessous l'architecture de la "Function" et de "Sub".

_____________________________________________________________________

Function LeNom (a,b,c) Sub LeNom()

Dim ........ Dim.......

Worksheets("Feuil1").Unprotect Worksheets("Feuil1").Unprotect

Mon code Mon code

Worksheets("Feuil1").Protect Worksheets("Feuil1").Protect

End Function End sub

_____________________________________________________________________

Merci pour votre réponse.

Bonsoir Pigat

Une fonction doit être utilisée pour retourner une valeur ou une info.... ce qui ne semble pas être le cas

Donc il faut appeler une Sub avec les paramètres indiqués

De plus je ne comprends absolument pas le code donné !?
C'est quoi cette Sub après la Fonction

A+

Oui, je me suis sans doute mal expimé. En fait dans mon premier message j'ai mis en parallèle la stucture du code pour un macro "Sub" qui marche et la structure du code pour une macro "Function" qui ne marche pas (Donc 2 codes peu différents mais distinct). Pour revenir à ma demande exprimée d'une autre manière, quel est le moyen en utilisant une "Function" (Qui ne renvoie qu'une valeur) de "déproteger" et de reprotéger ma feuille en court d'éxécution de ma "Function"? Pour info j'ai essayer cette procedure ci-dessous mise dans "ThisWorkbook" sencer faire agir le code VBA même si la feuille est protégée. mais cela ne marche pas non plus.

Private Sub Workbook_Open()
Dim fc As Worksheet
For Each fc in ThisWorkbook.Worksheets
fc.Protect UserInterfaceOnly:=True
Next fc
End Sub

Merci pour votre réponse rapide

A+

Salut,

J'avoue ne pas comprendre le "ça fonctionne avec une Procédure et pas avec une fonction."

Voici un petit test avec cette fonction :

Public Function fProtect(ByRef itemSheet As Excel.Worksheet) As Boolean
    With itemSheet
        .Protect
        fProtect = (.ProtectContents = True)
    End With
End Function

et le résultat du test :

000414

Donc bien pris par la fonction...

Et vérification sur la feuille...

000415

Merci encore pour votre reponse mais j'ai l'impression qu'on tourne en rond car moi aussi je ne comprend pas votre réponse.

Le terme "ça fonctionne avec une Procédure et pas avec une fonction." veux dire que dans une macro "sub" qui a le mème code que ma "Function" si j'utilise les instructions "Worksheets("Feuil1").Unprotect" et "Worksheets("Feuil1").Protect" la feuille est déprotégée , le code s'exécute correctement (créer un "objet Shapes"), puis la feuille est reprotégée alors que ces mêmes instructions dans ma "Function" ne s'exécute pas (Affiche une erreur "#NOM?" dans la cellule ou ma "Function" se trouve). Si j'enlève ces instructions la "Function" ne s'exécute pas (créer un "objet Shapes" puisque la feuille est au départ protégée) mais sans faire d'erreur.

je vais donc reposer mon problème d'un façon plus pragmatique. J'ai une feuille de calcul excel qui est protégée. Quand ma fonction est lancée je voudrais deprotéger ma feuille excel, exécuter mon code, et reprotéger ma feuille de calcul. Que cela se fasse avec des instructions spécifiques ou une procédure annexe.

Merci pour votre patience.

Rechercher des sujets similaires à "protection dune feuille calcul"