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 :

Aide pour complèter une macro VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut Aide pour complèter une macro VBA
    Bonjour à tous,

    Voici mon problème, dans une feuille de calcul Excel lorsque je clique dans la cellule A1, une UserForm (FrmSai) apparaît, c'est une UserForm où l'on demande de saisir un mot de passe, lorsque celui-ci est bon une autre UserForm (FrmTrav) est affichée.
    Mon soucis est qu'à chaque fois que je ferme l'UserForm FrmTrav je suis obligé de cliquer de nouveau dans la cellule A1 et à nouveau il m'est demandé le mot de passe, c'est cette dernière opération que je ne souhaite plus utiliser lorsque l'utilisateur a déjà tapé le mot de passe une fois. En clair, une fois qu'il a tapé le mot de passe une fois, il lui suffira par la suite de cliquer dans la cellule A1 pour l'UserForm FrmTrav soit affichée.
    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
    16
    17
    Private Sub CommandButton1_Click()
    If Txt1.Value = "APEL" Then
    Unload Me
    Application.ScreenUpdating = False
    For Each feuil In Application.Sheets
    feuil.Unprotect Password:="APEL"
    Next feuil
    Application.ScreenUpdating = True
    MsgBox "Les feuilles ne sont plus protégées!!", vbCritical, "Attention!!"
    Load FrmTrav
    FrmTrav.Show
    Else
    MsgBox "Vous n'avez pas tapé le bon de passe!!" + Chr(10) + "Vous ne pouvez accéder à cette action!!"
    Unload Me
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End If
    End Sub

  2. #2
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Bonjour,
    Tu peux définir une variable en static qui changerait de valeur au premier clic dans A1.
    Tu peux tester sa valeur pour afficher ou non ton userform.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Mais comment fait-on cela ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Static mavariable As TypeMaVariable
    A mettre à l'intérieur d'une procédure/fonction.

    Lis l'aide en ligne associée au mot clé static.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Voilà j'ai tapé ces 2 codes, mais cela ne fonctionne pas. Lorsque je clique dans la cellule A1, rien ne se passe. Le formulaire du mot de passe (FrmSai) ne s'affiche pas, ni le formulaire (FrmTrav).
    Pouvez-vous me dire ce qui ne va pas ?

    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
    19
    20
    21
    22
    23
    Private Sub Worksheet_SelectionChange(ByVal target As Range)
    Dim COL As Long
    Dim lig As Long
    Dim a As Long
        Static PW As Boolean
        If Not PW Then
            If FrmSai.Txt1.Value = "APEL" Then PW = True
            If PW = True Then
        If Intersect(Range("A1"), ActiveCell) Is Nothing Then Exit Sub
            If IsEmpty(ActiveCell.Value) Then
        lig = 5
        COL = ActiveCell.Column
        a = Cells(lig, COL).Value
            If a = 0 Then COL = COL + 1
            Load FrmSai
            FrmSai.Show
            End If
            End If
            End If
    End Sub
    Sub PW()
    PW = "APEL"
    End Sub
    Merci par avance

  6. #6
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Bonjour,
    Que vaut PW ?

    Mets un point d'arrêt et va voir quelle valeur il a.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Comme je l'ai indiqué, il vaut "APEL". C'est vrai, les 2 codes ne sont pas séparés.

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    cela m'étonnerait que PW vaille "APEL" au sein de
    Sub Worksheet_SelectionChange
    Si tel était le cas ===>> tu aurais un message d'erreur (booléenne attendue)

    Edit : PW étant déclarée comme Static au sein de Sub Worksheet_SelectionChange, elle ne peut changer de valeur qu'au sein de cette procédure et n'a que 2 valeurs possibles : True ou False (et en aucun cas un string)

  9. #9
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Je ne comprends pas ta réponse.
    J'ai fait une première déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sub PW()
    PW="APEL"
    Ensuite j'ai intégré PW à mon code cité ci-dessus. Ce que je veux faire, c'est que lorsque j'arrive sur la feuille pour la 1ère fois, je clique sur la cellule A1, une UserForm (FrmSai) apparaît où il nous est demandé de saisir un mot de passe (APEL), si le mot de passe est bon, une autre UserForm (FrmTrav) apparaît. Le problème que je rencontre, c'est que si je ferme cette dernière UserForm (FrmTrav) et que je clique de nouveau en A1, il m'est demandé à nouveau le mot de passe et ça je veux le supprimer.

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    la chose est simple ...
    Tu dis plus haut que tu ne veut plus repasser par FrmSai si déjà renseigné par le bon mot de paswse.

    Bien :

    Tu crées une variable booléenne publique (dans un module). Appelons-la toto

    Dans ton évènement selectionchanged :
    si toto = false ===>> tu affiches FrmSai
    si toto = true ===>> tu passes direectement à ton formulaire de travail

    Dans ton code de traitement et vérification du mot de passe (dans FrmSai, donc) ===)>> si bon code ===>> tu donnes la valeur True à toto.

    C'est enfantin.

    (et tu laisses tomber ce que tu as déjà écrit)

  11. #11
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Au premier lancement de ta macro, PW=False.
    Tu fais le test et si le mot de passe est bon, tu passe PW = true.

    Au prochain événement selection_change, ton PW étant à true, tu ne réaffiche plus la demande de mot de passe.

    Je ne vois pas pourquoi tu fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub PW()
    PW = "APEL"
    End Sub

  12. #12
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    J'ai copié un code que j'avais déjà et il fonctionne. Mais dans cette appli, je n'obtiens pas le même résultat.

  13. #13
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Il ne FAUT PAS là utiliser une variable static, mais une VARIABLE PUBLIQUE !
    Une variable static ne pourrait pas voir sa valeur passer de False à True depuis le formulaire de gestion du mot de passe (ni d'ailleurs de quelque autre procédure que ce soit, autre celle où elle est utilisée en tant que Static !)

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    NEC14 => Indente déjà ton code, car tel qu'il est c'est illisible.

    Ensuite, essaye comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public PW As Boolean ' (à mettre dans un module standard)
     
    Private Sub Worksheet_SelectionChange(ByVal target As Range)
        Dim COL As Long
        Dim lig As Long
        Dim a As Long
        If PW Then Exit Sub
        If Not Range("A1").Address = ActiveCell.Address Then Exit Sub
        Load FrmSai
        FrmSai.Show
        If FrmSai.Txt1.Value = "APEL" Then PW = True
    End Sub
    Pour le reste du code, je ne comprends pas ce que tu cherches à faire.

  15. #15
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Pourquoi diable passer par la valeur d'une textbox ?
    Il suffit de déclarer PW publique dans un Module et de le passer à True lorsque l'on donne le bon mot de passe.
    Eviter ces tremplins inutiles.
    Relire le mécanisme que j'ai défini plus haut (il est très simple et efficace).

  16. #16
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Il a 2 userforms à afficher.
    Il veut que le premier ne s'affiche qu'une fois pour demander le mdp puis le second à chaque selection_change.

    Je donnais l'idée d'une variable statique (dans le selection_change) qui passerait à true une fois le mot de passe validé.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Moi aussi, mais en réfléchissant bien, je pense qu'une variable publique est mieux: tu peux savoir si le mot de passe a été rentré depis n'importe quel point du code.

  18. #18
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Voilà ...

    Une petite astuce, maintenant :

    L'évènement SelectionChanged n'intervenant que si l'on change de cellule, il faut "forcer la main" en cas de mauvais mot de passe. Comment ? simplement en sélectionnant alors (en cas de mauvais mot de passe) dynamiquement (depuis le code) n'importe quelle autre cellule...
    Ainsi, l'utilisateur, s'il n'a pas donné le bon mot de passe, sera bien obligé de déclencher à nouveau l'évènement selectionChanged...
    C'est tout ...

  19. #19
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Merci à tous, avec votre aide j'ai réussi à résoudre mon problème.
    J'en ai un autre, mais je vais clore celui-ci et engager une nouvelle discussion, car il n'a rien à voir avec celui-ci.
    Encore merci.

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

Discussions similaires

  1. [XL-2007] Besoin d'aide pour compléter une macro SVP :)
    Par Al385 dans le forum Excel
    Réponses: 25
    Dernier message: 16/06/2015, 17h37
  2. Besoin d'aide pour finir une macro VBA
    Par Poulette44 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/11/2011, 02h48
  3. Recherche de l'aide pour améliorer une macro excel
    Par Yul80 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/09/2008, 10h21
  4. Aide pour finaliser une macro
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/08/2008, 08h02
  5. Réponses: 22
    Dernier message: 20/05/2008, 10h25

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