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 :

constante password problème [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut constante password problème
    Bonjour,

    Bonjour,
    J'ai ce bout de code qui coince au niveau de la ligne PW.
    Afin de ne pas encode à chaque SUB le password, j'aurais voulu le mettre en constante et donc dans un module j'ai tapé CONST PW = "1234".
    Mais cela bloque quand même. PQ?
    Merci pour votre aide.

    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
    Private Sub CBAdmin_Click()
     
    Dim ws As Worksheet
     
    If TBPW.Value = PW Then
        ThisWorkbook.Unprotect Password:=PW
        For Each ws In ThisWorkbook.Worksheets
                ws.Visible = True
        Next ws
        Unload frm_Admin
    Else
        TBPW.Value = "Insert Password..."
    End If
     
    End Sub

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    Afin de ne pas encode à chaque SUB le password, j'aurais voulu le mettre en constante et donc dans un module j'ai tapé CONST PW = "1234".
    Dans quel module ? Est-ce le même que celui où tu as la fonction que tu nous montres ?
    Si ce n'est pas le même, le module ne la connaîtra pas.
    Voici un tuto qui l'explique : https://silkyroad.developpez.com/VBA/LesVariables/#LV
    Pour qu'une variable puisse être utilisée dans tous les modules, il faut la déclarer en Public.

  3. #3
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    mon code est dans le code de l'USERFORM
    Const est dans un module standard.

    si j'ai bien compris, si je veux mettre mon PW comme constante je dois l'indiquer dans un module en PUBLIC (PUBLIC PW = "1234")
    et mettre mon code de l'USF également dans un module

    ok?

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Pour que la variable soit utilisable dans toutes les macros du projet, il faut utiliser l'instruction Public et la variable doit impérativement être placée en tête d'un module standard.
    Donc oui, il faut mettre l'instruction Public devant ta constante et faire cela dans un module.

    et mettre mon code de l'USF également dans un module
    NON ! Le code du UserForm doit rester sous le UserForm.
    Le tuto explique bien "Pour que la variable soit utilisable dans toutes les macros du projet". Donc ça sera ok pour les macros du UserForm aussi.

  5. #5
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    j'ai mis ce code dans un module standard que j'ai nommé Déclarations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const PW = "1234"
    voici le code dans mon usf :
    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
    Private Sub CBAdmin_Click()
    
    Dim ws As Worksheet
    
    If TBPW.Value = PW Then
        ThisWorkbook.Unprotect Password:=PW
        For Each ws In ThisWorkbook.Worksheets
                ws.Visible = True
        Next ws
        Unload frm_Admin
    Else
        TBPW.Value = "Insert Password..."
    End If
    
    End Sub
    quand je tape 1234 dans TBPW, il le reconnait et considère comme vrai dans le IF MAIS il coince à la ligne qui suit (en gras). PQ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    cela fonctionne maintenant
    Merci

  7. #7
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    j'ai fait un code inverse mais il ne fonctionne pas, il cache toutes les feuilles sauf la feuille qui contient le graphique. PQ?

    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
    17
    18
    Private Sub CBUser_Click()
     
    Dim ws As Worksheet
     
    If TBPW.Value = PW Then
        For Each ws In ThisWorkbook.Worksheets
            If Not ws.CodeName = "sh_11xx" Or Not ws.CodeName = "sh_12xx" Or Not ws.CodeName = "sh_ab" Or Not ws.CodeName = "sh_amif" _
            Or Not ws.CodeName = "sh_amif" Or Not ws.CodeName = "sh_dthw" Or Not ws.CodeName = "sh_modif" Or Not ws.CodeName = "sh_bdtablien" _
            Or Not ws.CodeName = "sh_tablien" Or Not ws.CodeName = "sh_cpk" Then
                ws.Visible = False
            End If
        Next ws
        ThisWorkbook.Protect Password:=PW, Structure:=True, Windows:=False
    Else
      TBPW.Value = "Insert Password..."
    End If
     
    End Sub

  8. #8
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    J'ai fait un test chez moi avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Unprotect ("1234")
    Le code tourne mais n'engendre rien. J'avoue que je ne sais pas bien si on peut déprotéger un classeur si on l'a déjà ouvert. Je ne sais même pas si c'est possible "à la main".
    Je ne sais pas comment fonctionne la fonction Unprotect pour un classeur. Pour une feuille, je sais l'utiliser, mais pour un classeur, pas d'idées.

  9. #9
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Citation Envoyé par rossemma Voir le message
    j'ai fait un code inverse mais il ne fonctionne pas, il cache toutes les feuilles sauf la feuille qui contient le graphique. PQ?

    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
    17
    18
    Private Sub CBUser_Click()
     
    Dim ws As Worksheet
     
    If TBPW.Value = PW Then
        For Each ws In ThisWorkbook.Worksheets
            If Not ws.CodeName = "sh_11xx" Or Not ws.CodeName = "sh_12xx" Or Not ws.CodeName = "sh_ab" Or Not ws.CodeName = "sh_amif" _
            Or Not ws.CodeName = "sh_amif" Or Not ws.CodeName = "sh_dthw" Or Not ws.CodeName = "sh_modif" Or Not ws.CodeName = "sh_bdtablien" _
            Or Not ws.CodeName = "sh_tablien" Or Not ws.CodeName = "sh_cpk" Then
                ws.Visible = False
            End If
        Next ws
        ThisWorkbook.Protect Password:=PW, Structure:=True, Windows:=False
    Else
      TBPW.Value = "Insert Password..."
    End If
     
    End Sub
    Tout dépend du nom de tes feuilles. Ton code permet de masquer toutes les feuilles qui ont des noms de code différents de ceux cités dans la condition if.

  10. #10
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    Voici la liste de mes sheets :
    Nom : sh monit.JPG
Affichages : 141
Taille : 49,0 Ko

    Mon code laisse visible seulement la feuille avec le graphique.
    PQ??

  11. #11
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,
    Citation Envoyé par rossemma Voir le message
    j'ai fait un code inverse mais il ne fonctionne pas, il cache toutes les feuilles sauf la feuille qui contient le graphique. PQ?
    Parce qu'un graphique (Chart) n'est pas une feuille de calcul (Worksheet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim o As Object
     
      For Each o In ThisWorkbook.Sheets
        If Not o.CodeName = "...

  12. #12
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    Patrice740 merci pour l'aide

    mais en fait le graph doit rester visible ainsi que les feuilles reprises dans mon code à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not ws.CodeName = "sh_11xx" Or Not ws.CodeName = "sh_12xx" Or Not ws.CodeName = "sh_ab" Or Not ws.CodeName = "sh_amif" _
            Or Not ws.CodeName = "sh_amif" Or Not ws.CodeName = "sh_dthw" Or Not ws.CodeName = "sh_modif" Or Not ws.CodeName = "sh_bdtablien" _
            Or Not ws.CodeName = "sh_tablien" Or Not ws.CodeName = "sh_cpk" Then
    cependant mon code cache toutes les feuilles sauf mon graph (donc pour ce dernier c'est ok et pas pour le reste)

    j'espère être clair.

  13. #13
    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 rossemma Voir le message
    j'ai fait un code inverse mais il ne fonctionne pas, il cache toutes les feuilles sauf la feuille qui contient le graphique. PQ?
    Parce que tu as oublié les cours de logique (de mon temps, on faisait ça en 1ère) qui disent que la NON(A ET B) c'est égal à NON(A) OU NON(B) et non pas à NON(A) ET NON(B).

    Pour en revenir à ton histoire de mot de passe, ça m'étonne toujours un peu ce que certains font à ce sujet.
    En supposant que tes modules VBA soient eux-mêmes protégés (parce que sinon, ce serait vraiment laisser la clé dans la serrure), que se passe-t-il si, avec le UF ouvert, un utilisateur tape ? PW dans la fenêtre d'exécution ? Bingo ! Il récupère le mot de passe.

    Mot de passe et VBA, ça n'a jamais fait bon ménage. C'est un avis que tu n'es pas obligé de partager mais l'expérience l'a forgé.
    Si ton but est d'empêcher les utilisateurs de commettre une maladresse, il n'y a pas besoin de mot de passe.
    Si ton but est de protéger les données contre toutes intrusions, oublie le VBA.

  14. #14
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    mais c'est vrai, je suis bête :-)

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

Discussions similaires

  1. petit problème de mot de passe crypté PASSWORD()
    Par bris dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 09/02/2007, 16h01
  2. problème avec mes constantes
    Par salseropom dans le forum C
    Réponses: 6
    Dernier message: 10/05/2006, 17h37
  3. [Configuration] Problème sur définition de constante
    Par Yobs dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 24/03/2006, 11h40
  4. VBA Excel - Problème de password VBA
    Par sat478 dans le forum VBA Word
    Réponses: 5
    Dernier message: 11/01/2006, 17h38
  5. Problème Constante chaîne non terminée
    Par nborde dans le forum ASP
    Réponses: 5
    Dernier message: 25/12/2005, 16h14

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