Se connecter avec
S'enregistrer | Connectez-vous

VBA déverrouillage de feuille excel

Dernière réponse : dans Programmation

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 :



  1. Sub Unprotect_all_sheets()
  2.  
  3. ' déprotège toutes les feuilles du classeur avec le code défini auparavant par l'utilisateur
  4.  
  5. ' Demander la saisie du mot de passe
  6. Do
  7. restart:
  8. MotDePasse = InputBox("Enter correct password")
  9. If MotDePasse <> Password Then
  10. GoTo restart
  11. Loop Until MotDePasse = Password
  12.  
  13. ' Déverrouiller toutes les feuilles si le mot de passe saisi est correct
  14. Dim I As Integer
  15. For I = 1 To ActiveWorkbook.Worksheets.Count
  16. ActiveWorkbook.Worksheets(I).Unprotect (MotDePasse)
  17. Next I
  18.  
  19. End Sub



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

MaBooL
Lassé par la pub ? Créez un compte

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
Expert Programmation

Tu te moques de moi ? [:zeb]

Dixit l'aide de VBA :
Citation :
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.
Citation :
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.

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, ...

Expert Programmation

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
exemple sommaire à adapter, via le macro recorder et l'aide en ligne
  1. Option Explicit
  2.  
  3. Sub Tst()
  4. Dim Ws As Object
  5. For Each Ws In Sheets
  6. Ws.Protect Password:="123456", DrawingObjects:=True, Contents:=True, Scenarios:=True
  7. Next
  8. End Sub
Lassé par la pub ? Créez un compte