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 :

Exécution partielle du code VBA sur instruction Workbook_BeforeClose


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ippo_master
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2007
    Messages : 71
    Par défaut Exécution partielle du code VBA sur instruction Workbook_BeforeClose
    Bonjour,

    Je rencontre un problème particulièrement bloquant que je ne parviens pas à résoudre moi-même.
    A la fermeture d'un fichier Excel, je prévois de faire des opérations de manière générique (de type inscrire une valeur, cacher des lignes, etc.) puis d'offrir le choix à l'utilisateur d'enregistrer ou non les modifications apportées (dans l’événement ThisWorkbook_BeforeClose)
    Si celui-ci répond NON, je fais croire à Excel que la propriété .saved du classeur est vraie puis Exit Sub.
    Si celui-ci répond OUI, je prévois de faire un certain nombre d'opérations (de type inscrire une valeur, cacher des lignes, etc.) et d'enregistrer, puis Exit Sub.

    Si en manipulation, je ferme via la croix rouge d'Excel, le code s'exécute parfaitement bien (ThisWorkbook_beforeclose).
    Si je passe par le UserForm, pour lequel j'ai créé un bouton "Quitter" avec l'instruction ThisWorkbook.Close, le code s'exécute (notamment le ThisWorkbook.save) mais n'enregistre pas le fichier (en répondant "oui" à la msgbox)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    '1er type d'opération générique
    Sheets("Feuil1").Cells(1, 1) = "toto"
    Message = MsgBox("Je quitte. Enregistrer oui ou non ?", vbExclamation + vbYesNo)
    If Message = vbNo Then
        ThisWorkbook.Saved = True 'Il n'enregistrera pas mon "toto" mais j'en m'en fiche
        Exit Sub
    End If
    If Message = vbYes Then
        Sheets("Feuil1").Cells(1, 2) = "fin"
        ThisWorkbook.Save
        ThisWorkbook.Saved = True
    End If
    Des pistes ?

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 56
    Par défaut
    Salut,

    Je ne comprends pas très bien cette phrase : "le code s'exécute (notamment le ThisWorkbook.save) mais n'enregistre pas le fichier (en répondant "oui" à la msgbox)".. Si le thisworkbook.save s'éxecute sans problème c'est qu'il t'a enregistré le document quelque part. Est ce que tu as enregistré le classeur ("enregistrer sous") avant de lancer ton code?

    A+

    Captain

  3. #3
    Membre confirmé Avatar de ippo_master
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2007
    Messages : 71
    Par défaut
    Oui et non.
    Oui en cas de fermeture par la croix rouge classique d'Excel - Exécution sans problème + sauvegarde effective
    Non en cas de fermeture demander via le bouton "Quitter" de la Userform - Exécution sans problème mais pas de sauvegarde effective

    L'instruction du bouton "Quitter" de ma UserForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton1_Click()
    Unload UserForm1
    ThisWorkbook.Close
    End Sub

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 56
    Par défaut
    Si tu mets un point d'arrêt sur la ligne thisworkbook.save, est ce que le programme y passe?

    Parce que si il y passe, ton classeur va bien être enregistré..

  5. #5
    Membre confirmé Avatar de ippo_master
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2007
    Messages : 71
    Par défaut
    Il passe mais il n'enregistre pas, c'est bien le problème.
    Après de longues recherches, j'ai trouvé ceci : https://support.microsoft.com/fr-fr/...r-fr/kb/898511

Discussions similaires

  1. [XL-2007] Exécution code VBA sur fichier déja rempli
    Par Nanou84 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 19/07/2012, 14h15
  2. [PPT-2007] Utiliser du code VBA sur plusieurs objets et pas qu'un seul
    Par beegees dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 25/03/2010, 09h55
  3. Test de code VBA sur différentes versions d'Excel
    Par Fala fala dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/01/2008, 11h33
  4. Réponses: 2
    Dernier message: 13/09/2006, 00h03
  5. Comment faire Copier/Coller par code VBA sur INTERNET...
    Par GESCOM2000 dans le forum Access
    Réponses: 5
    Dernier message: 02/01/2006, 13h19

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