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 :

[VBA]Detection de l'annulation de la fermeture d'un classeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 23
    Points
    23
    Par défaut [VBA]Detection de l'annulation de la fermeture d'un classeur
    Bonjour,

    Je viens solliciter votre aide pour un petit problème de VBA :
    J'ai une macro qui à la fermeture de chaque classeur ouvert lance un traitement ( que je fais donc dans le Workbook_BeforeClose ).
    Le problème est que si l'utilisateur click sur 'annuler' quand la fenêtre d'enregistrement apparaît et bien mon traitement se fait quand même alors qu'il ne sort en fin de compte pas du classeur.....
    Donc comment détecter l'annulation par l'utilisateur de la fermeture d'un classeur qui a été modifié ??
    En espérant avoir été clair......
    Merci d'avance.
    que la force soit avec toi

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour

    Vise le Query_Close avec l'événement UnloadMode...

    Et tu seras comblé...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    merci, mais comment tu fais pour que ton evennement s'applique et se lance correctement sur mon objet Workbook ?? car par défaut cette évènement n'y est pas ou sinon c'est que j'ai pas saisi ta réponse
    que la force soit avec toi

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    C'était pas UnloadMode mais CloseMode (UnloadMode c'est dans VB)
    Tu joues avec ce bout de code depuis un UserForm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
      Select Case CloseMode
          'L'utilisateur a choisi la commande Fermeture dans le menu Système
          Case vbFormControlMenu 'on empêche la fermeture
            Cancel = True
          'L'instruction Unload est appelée à partir du code.
          Case vbFormCode 'on traite le Before_Close
            MsgBox "Traitement en cours..."
      End Select
    End Sub
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    alors soit je comprend pas ta solus soit tu as mal compris ma question mais merci de t'y attarder

    j'ai n'ai aucune UserForm ds mon appli.
    je fais mes traitements a la fermeture d'un classeur et non d'un usf donc c'est l'annulation sur la fenêtre que lance automatiquement excel pour proposer de sauvegarder que je souhaite détecter.
    c'est plus clair ??
    que la force soit avec toi

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Ah Ok...

    Bon, ben, comme ça alors:
    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 bUserClicCancel As Boolean
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
      bUserClicCancel = ThisWorkbook.Saved
    End Sub
     
    Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
      If bUserClicCancel Then
        MsgBox "Il a sauvé donc on traite..."
        Traitement
      Else
        MsgBox "Il a annulé, donc on ne traite pas..."
      End If
    End Sub
     
    Private Sub Traitement()
      MsgBox "Le traitement est lancé..."
    End Sub
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    merci
    ça devrais m'aider a me dépatouiller.
    L'évènement Workbook_WindowDeactivate se lance a quel moment exactement ?? car ds l'aide il dise et c logique quand le classeur est désactivé mais c'est un peu vague.....j'ai réussi a le désactiver en faisant Fenêtre->Masquer mais il y a t'il d'autre moyen ?? ( a part également quand le classeur se ferme )
    que la force soit avec toi

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Ce que je t'ai écris se succède.
    Donc
    1 / Before_Close()
    2 / Window_Desactivate()


    Prend ce code et colle-le tel que dans un classeur vierge et tu verras, ça marche très bien.

    A+

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    j'avais testé et effectivement ça marche.
    j'avais juste mal adapter ton code car moi je voulais que le traitement se fasse qu'il réponde oui ou non à la question.
    mais c'est bon je pense avoir réussi. 8)
    merci
    que la force soit avec toi

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

Discussions similaires

  1. [Toutes versions] [VBA]forcer fermeture d'un classeur.
    Par mattdogg97 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/05/2011, 10h33
  2. Annulation de la fermeture d'une application
    Par PANORAMIC dans le forum Langage
    Réponses: 2
    Dernier message: 15/01/2008, 08h38
  3. Réponses: 4
    Dernier message: 04/09/2006, 14h31
  4. [VBA-E]Problème de sauvegarde et de fermeture classeur
    Par teaRz dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/05/2006, 10h29
  5. [VBA inputbox] le bouton annuler ne marche pas
    Par herendel dans le forum Access
    Réponses: 2
    Dernier message: 15/05/2006, 12h42

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