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 :

comment passer une variable dans l’événement workbook_beforeclose


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut comment passer une variable dans l’événement workbook_beforeclose
    Bonjour,

    Je souhaiterais faire différentes actions suivant une variable "saisie" provenant d'une inputbox (variable "saisie" en string) qui se fait au début du programme. Cette variable "saisie" (string) est bien déclarée en public avant les sub dans le module de classe. Mais lorsque je ferme le classeur, l'évenement befroeclose se déclenche bien mais la valeur de la variable "saisie" ne passe pas dans l'évenement. comment peut on faire cela ?

    merci de votre réponse

    ci-joint le code

    la variable saisie est dans le module identifiant

    ouvrez le fichier et tapez "impression" puis aller voir dans le programme
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Salut,

    dans ta Sub identification()
    remplace les End par des Exit Sub

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Sub identification()
    Dim i As Byte
    Dim nbfeuilles As Integer
     
    nbfeuilles = ThisWorkbook.Sheets.Count
     
         saisie = InputBox("Tapez votre mot de passe", "identifiant")
     
     
    Select Case saisie
     
            Case ""
            Application.EnableEvents = True
            ThisWorkbook.Save
            ThisWorkbook.Close
            End
     
            Case "cvbfds35"
                For i = 1 To nbfeuilles
                ThisWorkbook.Sheets(i).Unprotect Password:="essai"
                Next i
                ThisWorkbook.Sheets("log").Visible = True
                mdp1 = True
     
     
            Case "impression"
                For i = 1 To nbfeuilles
                    ThisWorkbook.Sheets(i).Protect Password:="essai"
                Next i
                Application.EnableEvents = True
                Exit Sub
     
     
            Case "rédacteur"
                For i = 1 To nbfeuilles
                    If ThisWorkbook.Sheets(i).ProtectContents = False Then
                    MsgBox "Les DB ne sont pas gelées ! veuillez demandez à l'AQ de geler vos DB svp !"
                    Application.EnableEvents = True
                    ThisWorkbook.Save
                    ThisWorkbook.Close
                    End
                    End If
                Next
                mdp1 = True
                Exit Sub
     
            Case Else
                For i = 1 To nbfeuilles
                    If ThisWorkbook.Sheets(i).ProtectContents = True Then
                    MsgBox "La matrice est gelée! vous ne pouvez pas la modifier !"
                    'Application.EnableEvents = True
                    ThisWorkbook.Save
                    ThisWorkbook.Close
                    Exit Sub
                    End If
                Next i
                        For i = 4 To 17
                        If saisie = ThisWorkbook.Sheets("log").Range("AX" & i).Value Then
                        Nom1 = ThisWorkbook.Sheets("log").Range("AY" & i).Value
                        Application.ScreenUpdating = False
                        End If
                        Next i
     
                If Nom1 = "" Then
                MsgBox ("Désolé, votre identifiant est incorrect")
                identification
                End If
     
    End Select
     
     
    End Sub

  3. #3
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut
    Bonjour jasserin,
    As-tu pensé à enregistrer ta variable sur une feuille, à la sortie de l'inputbox, tu la récupères à la sortie dans ton befroeclose et tu l'effaces de la feuille toujours dant ton befroeclose ?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut
    merci à Pons mais les exit sub ne changent rien à l'affaire, le msgbox de saisie dans beforeclose reste vide.

    mouftie, j'essaie la feuille. bizarre quand même qu'on ne puisse passer une variable dans un sub ...

  5. #5
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.

    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. (silkyroad)

    Le module ThisWorkbook n'est pas un module standard.

    Pour se référer à la variable 'saisie' déclarée dans ThisWorkbook, il faut écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ThisWorkbook.saisie = "cvbfds35" Then

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Tu parle de module de classe, si nous parlons bien de module de classe, l'événement termined de cette classe doit se produire avant la fin de befroeclose!

    Mais sérieusement je ne pense pas que ce soit un module de classe!

    Si tu as déclaré, même en public ta variable dans thisworbook , vue quelle n'es accessible que de ce module, si tu la saisie dans open et que tu l'utilise dans befor sa ne devrait pas poser de problème!

    Si tu la saisie dans un userform ou un autre module là elle par avec l'eau du bain.

    C'est pour éviter ce genre de désagrément que nous préconisons tous d'écrire options explicite en entête de tous les modules!

    Edit:
    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
    24
    25
    26
    27
    28
    29
    30
    Public saisie As String
    Public Nom1 As String
    Public mdp1 As Boolean
     
    ' TESTE EN FCT DU MDP entrée en saisie
    Private Sub Workbook_Open()
     
            saisie = identification
            If Split(saisie & ";", ";")(1) = "False" Then
                saisie = Split(saisie & ";", ";")(0)
                ThisWorkbook.Close False
            Else
                saisie = Split(saisie & ";", ";")(0)
        End If
     
    End Sub
     
     
    'avant chaque fermeture du classeur
    Public Sub Workbook_BeforeClose(cancel As Boolean)
     
    MsgBox saisie
     
    avantfermeture (saisie)
     
        'ThisWorkbook.Sheets("log").Visible = False
        Application.EnableEvents = True
        ThisWorkbook.Save
     
    End Sub
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
    Function identification() As String
    Dim i As Byte
    Dim nbfeuilles As Integer
     
    nbfeuilles = ThisWorkbook.Sheets.Count
     
         identification = InputBox("Tapez votre mot de passe", "identifiant")
     
     
    Select Case identification
     
            Case ""
            Application.EnableEvents = True
            ThisWorkbook.Save
            identification = identification & ";False"
            Case "cvbfds35"
                For i = 1 To nbfeuilles
                ThisWorkbook.Sheets(i).Unprotect Password:="essai"
                Next i
                ThisWorkbook.Sheets("log").Visible = True
                mdp1 = True
            Case "impression"
                For i = 1 To nbfeuilles
                    ThisWorkbook.Sheets(i).Protect Password:="essai"
                Next i
                Application.EnableEvents = True
                identification = identification & ";False"
                Exit Function
            Case "rédacteur"
                For i = 1 To nbfeuilles
                    If ThisWorkbook.Sheets(i).ProtectContents = False Then
                    MsgBox "Les DB ne sont pas gelées ! veuillez demandez à l'AQ de geler vos DB svp !"
                    Application.EnableEvents = True
                    ThisWorkbook.Save
                    identification = identification & ";False"
                    End If
                Next
                mdp1 = True
                identification = identification & ";False"
                Exit Function
            Case Else
                For i = 1 To nbfeuilles
                    If ThisWorkbook.Sheets(i).ProtectContents = True Then
                    MsgBox "La matrice est gelée! vous ne pouvez pas la modifier !"
                    'Application.EnableEvents = True
                    ThisWorkbook.Save
                    identification = identification & ";False"
                    Exit Function
                    End If
                Next i
                        For i = 4 To 17
                        If identification = ThisWorkbook.Sheets("log").Range("AX" & i).Value Then
                        Nom1 = ThisWorkbook.Sheets("log").Range("AY" & i).Value
                        Application.ScreenUpdating = False
                        End If
                        Next i
     
                If Nom1 = "" Then
                MsgBox ("Désolé, votre identifiant est incorrect")
                End If
     
    End Select
     
     
    End Function
    Dernière modification par Invité ; 23/03/2016 à 12h26.

Discussions similaires

  1. Comment passer une variable PHP dans une fonction A/S
    Par TakingCTRL dans le forum Flash/Flex
    Réponses: 1
    Dernier message: 28/10/2012, 10h54
  2. Réponses: 11
    Dernier message: 12/10/2011, 00h11
  3. [WD-2003] Comment passer une variable dans un Chercher/Remplacer?
    Par Souriane dans le forum VBA Word
    Réponses: 3
    Dernier message: 12/07/2010, 16h11
  4. Comment passer une variable PHP dans une Alert
    Par Alexandrebox dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 25/01/2009, 19h53
  5. Réponses: 4
    Dernier message: 29/07/2007, 00h45

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