IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème protection par mot de passe en VBA [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème protection par mot de passe en VBA
    Bonjour à tous,

    Je suis en train de créer un formulaire qui permet d'accéder à une feuille spécifique du fichier en fonction de choix fait dans des listbox. Une fois le choix effectuer un bouton apparaît et il permet d'ouvrir la feuille concernée.
    A l'ouverture, je peux choisir :
    - un mode utilisateur pour lequel tous les onglets sont masqués et chaque feuille protégé (pour que seules les cellules à remplir soient modifiables). Pour accéder à chaque feuille, il faut faire une selection dans un userform.
    - un mode administrateur, qui déverrouille chaque feuille et fait apparaître tous les onglets.
    Mon problème est le suivant.
    En mode utilisateur (tout verrouillé), pour pouvoir accéder aux feuilles masquées, je dois déverrouiller la feuille concernée en début de procédure et la reverrouiller en fin de procédure. Cependant, une erreur survient:
    Nom : erreur 1004.PNG
Affichages : 2201
Taille : 16,8 Ko

    et le Debug m'amène sur la ligne de déverrouillage.
    Voici le code en question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub CommandButton1_Click()
     
    Dim Mdp As String
    Mdp = "Mon_Mot_De_Passe"
     
    'Ouvre la feuille à remplir
    If Label2.Caption <> "" Then
        ThisWorkbook.Sheets(Label2.Caption).UnProtect Mdp 'devrait déverrouiller la feuille sélectionner
        ThisWorkbook.Sheets(Label2.Caption).Visible = True
        ThisWorkbook.Sheets(Label2.Caption).Select
        UserForm1.Hide
        ActiveSheet.Range("c4").Select
        ThisWorkbook.Sheets(Label2.Caption).Protect Mdp 'devrait reverrouiller la feuille une fois la procédure terminée
    End If
     
    End Sub
    Sachant que j'utilise Mdp pour verrouiller et déverrouiller, je ne comprends pas qu'il considère que le mot de passe est incorrect
    De plus, une fois mon document verrouillé par VBA, si j'essaye de déverrouiller une feuille manuellement en passant par le bandeau Excel, en utilisant "Mon_Mot_De_Passe", ça ne fonctionne pas...

    Quelqu'un saurait-il m'expliquer d'où vient mon erreur?

    D'avance merci pour votre aide!

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    As-tu protégé ta feuille manuellement avant d'utiliser ton code ?
    Il se pourrait qu'il n'ait pas été écrit de la même façon (?)

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par SuperWamJarice Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ThisWorkbook.Sheets(Label2.Caption).UnProtect Mdp
    Là, tu indiques à UnProtect que le mot de passe est le contenu de la variable Mdp.
    Si tu veux spécifier que le mot de passe est "Mdp", comme toute chaine de caractère, il faut le mettre entre guillemets.

    Fait un coup d'enregistreur automatique de macro, il te montrera la syntaxe.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour messieurs,

    Merci pour vos réponses rapides.

    Parmi, non la protection se fait par le biais d'une macro et utilise la variable Mdp pour le mot de passe. C'est pour ça que je ne parviens pas à comprendre de où vient mon erreur

    Menhir, c'est bien le contenu de la variable Mdp que j'utilise comme mot de passe. Dans mon exemple, le mot de passe est "Mon_Mot_De_Passe". Comme j'ai pas mal de phases déverrouiller/verrouiller inclus dans divers macros, je souhaitais n'avoir à le modifier qu'une seule fois le cas échéant... Je ne suis pas sûr d'être très clair.

  5. #5
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Bonjour,

    Si c'est bien via l'utilisation d'une variable mdp que tu définis le mot de passe, alors vérifie que tes deux variables mdp contiennent le même mot de passe. Attention aux caractères non visibles mais qui sont tout de même pris en compte par le programme. Pour vérifier si tes mots de passe sont strictement identiques, utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print (mdpLock = mdpUnlock) 'mdpLock : la variable pour verrrouiller, et mdpUnlock ta variable pour déverouiller

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Peut-être devrais-tu passer à travers tout ton code et voir si ces mots de passe ont tous bien été écrit de la même façon dans toutes les procédures... (?)

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468

  8. #8
    Invité
    Invité(e)
    Par défaut
    Parmi, Jeanmidudu,

    Je vais essayer de trouver une incohérence dans mon code mais ça risque de prendre du temps. Je n'avais créer qu'une seule variable pour mon mot de passe (pour verrouillage et déverrouillage), c'est pour qui m'étonne...

  9. #9
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par SuperWamJarice Voir le message
    Cependant, une erreur survient:

    je ne comprends pas qu'il considère que le mot de passe est incorrect
    Je viens de tester la syntaxe (pour Protect et UnProtect), elle fonctionne.

    J'aurais tendance à conseiller de considérer le message d'erreur au premier degré et à voir si le mot de passe que tu donnes n'est pas erroné.
    C'est ce que semble penser VBA et il est têtu.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour messieurs,

    J'ai fini par déterminer la source de mon problème:
    Lors des phase de verrouillage / déverrouillage de mon classeur, la ligne de code utilisée était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sheets(i).Protect Password = Mdp
    Alors que lors de mon déverrouillage/verrouillage de feuille, individuellement, c'était :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sheets(i).Protect Mdp
    J'ai corriger pour que tout soit au format du 2ème code et ça fonctionne.

    Sauriez-vous m'explique la différence impliquée par ces 2 codes? Parce que fondamentalement, mon mot de passe reste la variable Mdp...

    En tout cas, merci pour le temps que vous avez consacré à mon problème.

  11. #11
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par SuperWamJarice Voir le message
    J'ai fini par déterminer la source de mon problème:
    Lors des phase de verrouillage / déverrouillage de mon classeur, la ligne de code utilisée était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Sheets(i).Protect Password = Mdp
    Alors que lors de mon déverrouillage/verrouillage de feuille, individuellement, c'était :
    Ce qui signifie que le code que tu as donné dans ton premier message n'est pas celui que tu utilises et que tu nous as fait perdre notre temps pour rien.

    Désolé mais ce genre de foutage de gueule, je n'accepte pas. La suite c'est sans moi.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Mon mot de passe reste la variable Mdp. Je ne comprend pas ce que change le paramètre "password =" que j'ai récupéré sur un autre forum. Je pensais juste qu'il s'agissait d'une autre façon de définir un mot de passe...
    Il fait pas bon être débutant par ici. Je suis vraiment désolé!

  13. #13
    Invité
    Invité(e)
    Par défaut
    Oui, c'est parfait, merci beaucoup pour tes explications Jeanmidudu.
    Désolé, j'aurais du commencer par montrer ces lignes de codes...

  14. #14
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Ce qui signifie que le code que tu as donné dans ton premier message n'est pas celui que tu utilises et que tu nous as fait perdre notre temps pour rien.

    Désolé mais ce genre de foutage de gueule, je n'accepte pas. La suite c'est sans moi.
    Tu m'étonnes !     Car déjà la veille à 13h58 :

    Citation Envoyé par Marc-L Voir le message
    Pour le reste j'en reste là vu le code incomplet
    ___________________________________________________________________________________________________________________________
    - A ton avis, quel est le plus grand mal de notre époque : l'ignorance ou l'indifférence ?
    - J' sais pas et j' m'en fous !

  15. #15
    Invité
    Invité(e)
    Par défaut
    C'est un véritable régale de converser avec toi Marc-L: Je n'ai pas la chance de compter, parmi les membres de mon entourage, de personne dont le seul but dans la vie est de tourner les autres (enfin, c'est peut-être juste moi) en ridicule. Tu dois avoir une vie particulièrement triste pour en arriver là. Tu aurais pu te contenter de m'envoyer bouler en m'indiquant que je m'adressais au mauvais forum, mais non, c'est tellement jouissif!
    Heureusement pour la notoriété de ce site, certaines personnes sont capables de comprendre qu'ils s'adressent parfois à des débutants et prennent la peine de se mettre à leur niveau pour partager leurs connaissances et leur expérience.
    J'ai fait preuve de respect à chaque étape de mes demandes, en a résulté d'être considéré comme moins compétent qu'un enfant, ayant un ego surdimensionné, devant me résoudre à me défaire de toute technologie (vue mon incompétence), essuyant tes sympathiques citations, subtiles mais néanmoins explicites, ... Mais bon, tu es resté correct...
    Bref, tu as réussi ton coup. Etant de nature dépressive, je profiterai de l'un des nombreux ponts que je traverse en rentrant du boulot, pour me jeter dans le vide.

    Adieu

  16. #16
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Si je ne me trompe pas,c'est à cause d'une erreur de syntaxe de ta part.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(i).Protect Password = Mdp
    C'est dans ce premier cas que tu as une erreur de syntaxe. Ici, l'interpréteur fait les choses dans cet ordre :
    Password = Mdp
    puis Sheets(i).protect avec le résultat de l'opération juste avant.
    Où est le problème? Et bien Password = Mdp n'est pas une affection ici, c'est une comparaison. En fait, l'interpréteur fait comme si cela correspondait à un if. Du coup cela retourne un booléen (true ou false), donc au final, ton code faisait l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sheets(i).protect True
    'ou
    sheets(i).protect False
    Qui indique juste si tu verrouilles ou non.
    Pour que cela fonctionne comme tu l'aurais souhaité, il aurait fallu que tu écrives
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets(i).protect Password:=Mdp
    Eh oui, grosse différence avec l'utilisation de ":" avant le "=". Ici cela fait une affection (Password prend la valeur de Mdp), alors que sans ":", cela fait une comparaison.

    Pour en revenir à la différence entre les deux codes, eh bien dans le premier cas le paramètre de ta fonction était un booléen disait si oui ou non tu verrouillais ta feuille, dans le second cas tu définis un mot de passe (et donc verrouilles la feuille implicitement).

    Est-ce assez clair?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Problème protection par mot de passe en VBA
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/01/2018, 10h34
  2. [Cookies] Variables sessions protection par mot de passe
    Par luciedoudou dans le forum Langage
    Réponses: 17
    Dernier message: 24/01/2007, 11h20
  3. Activer la protection par mot de passe sur l'écran de veille
    Par Raphs dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/11/2006, 16h36
  4. protection par mot de passe projet
    Par largowinch dans le forum EDI/Outils
    Réponses: 2
    Dernier message: 19/10/2006, 21h16
  5. Protection par mot de passe
    Par BigZ444 dans le forum Delphi
    Réponses: 2
    Dernier message: 12/05/2006, 21h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo