VBA déverrouillage de feuille excel

mabool

Nouveau membre
Bonjour,

je suis nouveau dans la programmation, et j'essaie de faire des petits scripts pour me faciliter la vie dans Excel.
Je voulais faire notamment un scrit pour verrouiller/déverrouiller toutes les feuilles d'un classeur Excel, avec demande de password.

Je crois que j'ai réussi en ce qui concerne le verrouillage. Par contre, pour déverrouiller, j'ai des problèmes.

Je voudrais pouvoir faire en sorte qu'on demande à l'utilisateur de saisir le password. S'il est faux, il faut qu'il le ressaisisse. Sinon, c'est bon, on déverrouille tout. Mais je n'y arrive pas !

En fait, j'arrive à tout déverrouiller sans password, mais je n'arrive pas à intégrer le fait de faire saisir/ressaisir le code.

Voici mon script :



[cpp]Sub Unprotect_all_sheets()

' déprotège toutes les feuilles du classeur avec le code défini auparavant par l'utilisateur

' Demander la saisie du mot de passe
Do
restart:
MotDePasse = InputBox("Enter correct password")
If MotDePasse <> Password Then
GoTo restart
Loop Until MotDePasse = Password

' Déverrouiller toutes les feuilles si le mot de passe saisi est correct
Dim I As Integer
For I = 1 To ActiveWorkbook.Worksheets.Count
ActiveWorkbook.Worksheets(I).Unprotect (MotDePasse)
Next I

End Sub[/cpp]


Pouvez vous m'aider et m'expliquer ce qui ne va pas ?
Merci...

MaBooL
 

zeb

Modérateur
Utilise Option Explicit et l'aide en ligne sur Password et l'erreur va te sauter aux yeux !

Merci de rendre compte ici ;)
 

mabool

Nouveau membre
Désolé, mais j'ai cherché "option explicit" et " password" et l'erreur ne me saute pas aux yeux... à vrai dire, j'ai pas trop compris ce qu'on me disait.
peux-tu m'en dire d'avantage ?

J'ai cherché sur le net pour avoir des explication sur la fonction do et loop, j'ai fait plusieurs essais, mais ça ne marche jamais.

Merci de ton aide
 

zeb

Modérateur
Tu te moques de moi ? [:zeb]

Dixit l'aide de VBA :
Option Explicit, instruction
Instruction utilisée au niveau module pour imposer la déclaration explicite de toutes les variables de ce module.

Syntaxe
Option Explicit

Remarques
Si elle est utilisée, l'instruction Option Explicit doit apparaître dans un module avant toute procédure.

Si l'instruction Option Explicit apparaît dans un module, vous devez déclarer explicitement toutes les variables à l'aide des instructions Dim, Private, Public, ReDim ou Static. Si vous tentez d'utiliser un nom de variable non déclarée, une erreur se produit à la compilation.

Si vous n'utilisez pas l'instruction Option Explicit, toutes les variables non déclarées sont de type Variant à moins qu'un type par défaut soit précisé à un autre endroit à l'aide d'une instruction Deftype.

Note
Utilisez l'instruction Option Explicit pour éviter toute faute de frappe lors de la saisie du nom d'une variable existante ou pour écarter tout risque de confusion dans un code où la portée de la variable n'apparaît pas clairement.
Password, propriété
Cette propriété renvoie ou définit le mot de passe qui doit être fourni pour ouvrir le classeur spécifié. Type de données String en lecture-écriture.
..

Syntaxe
expression.Password
expression Obligatoire. Expression qui renvoie un des objets répertoriés dans la liste S'applique à.

Qu'est-ce que tu n'as pas compris ? Rien, tout ?

VB est un langage trop permissif, qui permet de faire n'importe quoi. Pour éviter de trop faire n'importe quoi, on utilise l'Option Explicit. Comme ça, il n'y a pas de variable non déclarée.

Alors tu me mets l'option explicit dans ton module, tu l'exécutes, et là il plante lamentablement parce qu'il ne connaît pas le mot PASSWORD.
Ben oui, si tu avais lu la doc. sur PASSWORD tu aurais peut-être remarqué le mot Obligatoire. Il faut lui dire de quoi tu parles. En l'occurence, je pense que tu cherches à comparer ta chaîne avec le mot de passe du classeur. Alors dis-lui.

Mon gars, je ne te connais pas, et je n'ai rien contre toi. Mais je t'ai mis le nez dessus tout à l'heure et tu n'as pas fait beaucoup d'effort pour résoudre ton problème tout seul. Ce qui m'agace le plus, c'est que je suis sûr que tu avais toutes les billes pour le faire. En plus il est très tard, alors accomode-toi du ton de ma réponse.

Bonne nuit à tous.
 

nico_vba

Nouveau membre
Il faut que tu donnes un type a ta variable MotDePasse.

Qd tu ne specifie pas le type c'est automatiquement en Variant.
Alors que toi il te faut un type string.

La ligne "Option explicit" te force a mettre un type a tes variables : gain de temps, code plus propre, ...

 

zeb

Modérateur
Non, Nico.

La ligne "Option explicit" ne force pas à mettre un type aux variables.
Elle oblige simplement à les déclarer, même sans type.

Les citations que je propose plus haut sont des copies de l'aide de Visual Basic.

>>La ligne "Option explicit" -> code plus propre, ...
+1, Nico, là on est bien d'accord.
 

Mack321

Nouveau membre
Bonjour A tous,

Newbe sur VBA, j'ai une problematique similaire à celle de Mabool, sauf que je cherche un code VBA pour verrouiller toutes les feuilles d'un classeur avec mot de passe.

Merci pour votre aide

MAck
 

kiki29

Habitué
>> Mack321
exemple sommaire à adapter, via le macro recorder et l'aide en ligne
Code:
Option Explicit

Sub Tst()
Dim Ws As Object
    For Each Ws In Sheets
        Ws.Protect Password:="123456", DrawingObjects:=True, Contents:=True, Scenarios:=True
    Next
End Sub
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 080
Messages
6 716 716
Membres
1 586 248
Dernier membre
GxBear263
Partager cette page
Haut