Comment déprotéger un classeur partagé?

Philippe

XLDnaute Occasionnel
Bonsoir à tous,

J'ai besoin de pouvoir déprotéger par VBA un classeur en mode partagé car j'utilise des cellules protégées pour stocker des variables... Tout fonctionne parfaitement lorsque le classeur n'est pas en mode partagé mais si on le partage :'Erreur 1004'...

Je joins un fichier exemple...

Quelqu'un peut il m'aider SVP ? Merci d'avance pour vos idées

A+
Philippe
 

Pièces jointes

  • test protect partagé.xls
    22.5 KB · Affichages: 71

Luki

XLDnaute Accro
Re : Comment déprotéger un classeur partagé?

Bonsoir Phillipe,

Sans avoir testé sur un classeur partagé (je suis tout seul et pas partageur! :D) mais sur un classeur protégé:

Si tu as peu de variables, tu peux les passer dans des noms (niveau classeur ou niveau feuille), et cacher ces noms. Attention au risque d'écrasement par l'utilisateur, il faut donc qu'il soient assez complexes pour éviter ce cas.

Si tu as beaucoup de variables, mieux vaut les passer dans une feuille cachée (veryHidden) et protéger le projet vba.

A mon avis...

Exemples pour le nom dans un classeur...
Code:
Sub VariableCompteur_NomClasseur()
Dim i As Integer
'Création du nom "compteur" s'il nexiste pas
    On Error Resume Next
    i = Evaluate("Compteur")
    If Err.Number <> 0 Then Names.Add Name:="Compteur", RefersTo:=0, Visible:=True ' passer à FALSE dans un code définitif
    On Error GoTo 0
'lecture du compteur, incrémentation et mise à jour du nom
    MsgBox "Le compteur est maintenant à  " & i
    Names.Add Name:="Compteur", RefersTo:=i + 1, Visible:=True ' passer à FALSE dans un code définitif
End Sub
Et dans un nom de feuille :
Code:
 Sub VariableCompteur_NomFeuille_1()
Dim i As Integer
'Création du nom "compteur" s'il nexiste pas
    On Error Resume Next
    i = Evaluate(ActiveSheet.Name & "!" & "Compteur")
    If Err.Number <> 0 Then Names.Add Name:=ActiveSheet.Name & "!" & "Compteur", RefersTo:=0, Visible:=True ' passer à FALSE dans un code définitif
    On Error GoTo 0
'lecture du compteur, incrémentation et mise à jour du nom
MsgBox "Le compteur est maintenant à  " & i
Names.Add Name:=ActiveSheet.Name & "!" & "Compteur", RefersTo:=i + 1, Visible:=True ' passer à FALSE dans un code définitif
End Sub
Voilà, fais des essais et dis nous.
 

Philippe

XLDnaute Occasionnel
Re : Comment déprotéger un classeur partagé?

Bonjour luki,

merci beaucoup pour cette réponse, je ne connaissais pas cette méthode permettant de stocker "en dur" des variables ailleurs que dans des cellules, ceci va règler pas mal de mes problèmes et accélérer la réalisation de l'appli., car jusqu'ici je passais mon temps à déprotégér, écrire la donnée, reprotéger, etc...

voici donc le code de test que j'ai adapté, j'ai supprimé la partie ou tu crées la variable pour la première fois car de toutes façons à chaque "tour" on recrée la variable, j'ai essayé en modifiant le nom "stock", pas de message d'erreur, même au premier tour...

Sub test_variable()
Dim g As String
a = InputBox("Entrez un nom:", "Test")
Names.Add Name:=ActiveSheet.Name & "!" & "stock", RefersTo:=a, Visible:=False
g = Evaluate(ActiveSheet.Name & "!" & "stock")
MsgBox "La variable est maintenant à " & g
End Sub

par contre que "visible" soit sur true ou false, g apparait bien dans la Msgbox...

encore merci

A+
Philippe
 

Luki

XLDnaute Accro
Re : Comment déprotéger un classeur partagé?

Re,

La partie de création ne sert qu'à éviter le plantage pour la démo, dans le cas où on appelle la variable avant de la créer.

Si tu utilises un nom dans la feuille, tu peux le combiner avec le "codename" de la feuille pour limiter les risques d'écrasement:

Names.Add Name:=ActiveSheet.Name & "!" & ActiveSheet.codename & "stock", RefersTo:=a, Visible:=False

Voilà. Bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
312 320
Messages
2 087 220
Membres
103 497
dernier inscrit
JP9231