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 :

Bouton "Annuler" à la fermeture d'un fichier [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    juillet 2017
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 944
    Points : 355
    Points
    355
    Par défaut Bouton "Annuler" à la fermeture d'un fichier
    Bonjour,

    J'ai remarqué que lorsqu'on ferme un fichier la macro Workbook_Close se déclenche quelque soit le bouton que l'on active sur le message d'Excel "Enregistrer" / "Ne pas enregistrer" / "Annuler"

    Je voudrai ne pas exécuter ce code Workbook_Close si je clique sur "Annuler" ou plus intercepter la touche "Annuler"

    je suis en train d'essayer de me débrouiller en adaptant un code proposé par P. Fauconnier mais je ne comprends pas comment à partir de ce code je pourrai "intercepter" la touche "Annuler"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
      Dim Result As VbMsgBoxResult
     
      Result = MsgBox("Voulez-vous enregistrer?", vbQuestion + vbYesNo)
      If Result = vbYes Then
        MsgBox "On enregistre"
        ThisWorkbook.Save
      Else
        MsgBox "on n'enregistre pas"
        ThisWorkbook.Saved = True
      End If
    End Sub
    Il ne savait pas que c'était impossible, donc il l' a fait...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 2 259
    Points : 4 959
    Points
    4 959
    Par défaut
    Bonjour,

    Ta demande est loin d'être limpide ...

    • L'évènement Workbook_BeforeClose se produit quand on demande la fermeture du fichier.
      Annuler cette fermeture, c''est le rôle de Cancel !
      Cancel = True annule la fermeture.
    • Il n'y a pas besoin d' « intercepter la touche "Annuler" », ta variable Result reçoit le résultat du MsgBox.
      Il suffit donc d'analyser ta variable, pour tester si elle a reçu la touche "Annuler" :
      If Result = vbCancel Then
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    juillet 2017
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 944
    Points : 355
    Points
    355
    Par défaut
    Je vais essayer d'être plus clair

    Dans "Workbook_close" d'un de mes fichiers j'efface une colonne (au dernier moment). et ensuite le fichier se ferme (avec le message d'Excel " Voulez-vous enregistrer les modifications du fichier xxx".

    Si je réponds "Enregistrer" tout se passe bien, le fichier est enregistré avec la colonne effacée, c'est ce que je veux

    Si je réponds "Ne pas enregistrer" tout se passe bien, le fichier n'est pas enregistré, la colonne effacée n'est pas prise en compte, c'est ce que je veux

    Le problème est sur la réponse "Annuler", dans ce cas je reviens bien sur le fichier en cours, mais la colonne est effacée et là je ne veux pas

    C'est pour cela que je voudrai intercepter "Annuler" pour sauter le morceau de code d'effacement de la colonne dans "Workbook_close"

    J'ai partiellement résolu le problème par le code du #1 qui marche très bien mais dans ce cas l'utilisateur ne peut que fermer son fichier, il ne peut pas "Annuler" et revenir à son travail
    Il ne savait pas que c'était impossible, donc il l' a fait...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 2 259
    Points : 4 959
    Points
    4 959
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    Je vais essayer d'être plus clair
    Dans "Workbook_close" d'un de mes fichiers j'efface une colonne (au dernier moment). et ensuite le fichier se ferme (avec le message d'Excel " Voulez-vous enregistrer les modifications du fichier xxx".
    C'est pas plus clair, au contraire ...
    Qu'est-ce que "Worbook_Close" ???
    Ce n'est pas une procédure évènementielle, c'est peut-être une procédure que tu as écris ?
    Pourquoi ne pas la publier ?

    Ceci dit, il n'est pas possible d'intercepter la réponse à la question d'Excel " Voulez-vous enregistrer les modifications du fichier xxx" qui se produit lors de la fermeture du fichier.

    Mais il est possible de l'anticiper en effectuant toi-même la gestion de la fermeture du classeur avant qu'Excel ne le fasse.
    Pour gérer la fermeture d'un classeur, comme je viens de te répondre, il faut utiliser l'évènement Workbook_BeforeClose .
    Dans cet évènement tu traites ton problème à la place d'Excel et tu décides ou non de fermer le fichier (avec Cancel).
    C'est à dire que tu dois anticiper le message d'Excel en posant la question toi-même comme dans l'exemple de Pierre F. et en fonction de la répondre, traiter ton problème pour que ça réponde à ton besoin.

    Si j'ai bien compris il est très probable que tu effaces la colonne au mauvais moment (trop tôt sans tenir compte de la réponse).
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    juillet 2017
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 944
    Points : 355
    Points
    355
    Par défaut
    Bonjour Patrice

    Qu'est-ce que "Workbook_Close" ???
    mille excuses la procédure est bien "Workbook_BeforeClose"

    j'ai mis en place et adapté le code proposé par Pierre F.

    On n'a plus la touche "Annuler", mais il suffit de s'adapter

    Merci pour ton temps et ta patience...
    Il ne savait pas que c'était impossible, donc il l' a fait...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 2 259
    Points : 4 959
    Points
    4 959
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    On n'a plus la touche "Annuler" ...
    La touche Annuler, il suffit de la programmer dans ton MsgBox ...

    Pour intercepter la gestion de fermeture par Excel afin d'effectuer ses propres traitements lors des cette séquence tu peux faire comme ça :
    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
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim msg As String
      If Not ThisWorkbook.Saved Then
        msg = "Voulez-vous enregistrer les modifications apportées à '" & ThisWorkbook.Name & "'?"
        Cancel = True                                            ' Annule la gestion de la fermeture par Excel
        Select Case MsgBox(msg, vbExclamation + vbYesNoCancel)   ' Même question que celle d'Excel
     
          Case VbMsgBoxResult.vbOK                               ' Si la réponse est 'Oui'
            ' ...                                                ' - Traitement en cas de réponse 'Oui' - A ADAPTER
            ' ...
            Application.EnableEvents = False                     ' - Désactive les évènements pour éviter la récursivité
            ThisWorkbook.Close True                              ' - Fermeture du fichier avec enregistrement
            Application.EnableEvents = True                      ' - Ré-active les évènements
     
          Case VbMsgBoxResult.vbNo                               ' Si la réponse est 'Non'
            ' ...                                                ' - Traitement en cas de réponse 'Non' - A ADAPTER
            ' ...
            Application.EnableEvents = False                     ' - Désactive les évènements pour éviter la récursivité
            ThisWorkbook.Close False                             ' - Fermeture du fichier sans enregistrement
            Application.EnableEvents = True                      ' - Ré-active les évènements
     
          Case VbMsgBoxResult.vbCancel                           ' Si la réponse est 'Annuler'
            ' ...                                                ' - Traitement en cas de réponse 'Annuler' - A ADAPTER
            ' ...
        End Select
      End If
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  7. #7
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    juillet 2017
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2017
    Messages : 944
    Points : 355
    Points
    355
    Par défaut
    Ca se complique

    merci je vais étudier cela
    Il ne savait pas que c'était impossible, donc il l' a fait...

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

Discussions similaires

  1. [XL-2007] Userform Bouton OK ANNULER
    Par XceSs dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/11/2010, 17h11
  2. Bouton image annulation
    Par Naelhem dans le forum Langage
    Réponses: 3
    Dernier message: 02/02/2008, 13h03
  3. Annulation de la fermeture d'une application
    Par PANORAMIC dans le forum Langage
    Réponses: 2
    Dernier message: 15/01/2008, 09h38
  4. [VBA]Detection de l'annulation de la fermeture d'un classeur
    Par LitteulKevin dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/01/2005, 16h36

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