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 :

Tester réponse boite de dialogue prédéfinie "voulez-vous enregistrer"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 32
    Par défaut Tester réponse boite de dialogue prédéfinie "voulez-vous enregistrer"
    Bonjour à tous,

    J'utilise actuellement l'événement Workbook_BeforeClose.

    Je souhaite que des instructions aient lieu si le document est effectivement fermé juste après. Or si l'on clique sur la croix pour fermer, puis réponse "annuler" à la boite de dialogue "voulez vous sauvegardez les modifs ?" le document reste ouvert et l'événement a pourtant lieu.

    Ainsi ,est-il possible de tester la réponse à cette boite de dialogue prédéfinie ? (pour que je puisse mettre : si "annuler" alors Exit Sub)

    Existe-il une autre méthode ? (sans passer par alertsdisplay + création MsgBox perso + tester cette MsgBox)

    PS : J'ai bien trouvé le sujet suivant mais il est inachevé :

    http://www.developpez.net/forums/d20...modifications/

    Je vous remercie par avance, bonne journée !

    Quentin

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Quentin, bonjour le forum,

    C'est plus que logique !... Tu fermes un fichier édité non enregistré et un message te propose trois option : Enregistrer, Ne pas enregistrer et Annuler (la fermeture). Si tu cliques sur Annuler, c'est normal que le fichier reste ouvert ! Non ? Ou alors je n'est pas bien compris (ce qui n'est pas rare)...

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 32
    Par défaut
    Bonjour Thautheme,

    Merci pour ton intérêt !

    Ca ne me pose pas de problème que le fichier reste ouvert dans le cas où l'on clique sur "annuler".

    Ce qui en revanche est un problème : mes instructions liées à l'événement BeforeClose se déclenchent quand même dans ce cas ! (alors que le document reste ouvert puisque l'utilisateur a cliqué sur "annuler").

    Il semble que BeforeClose se déclenche en fait au moment précis où on l'on clique sur la croix, et non à l'instant effectif où le document est sur le point de se fermer.

    Je reste à ta disposition pour toute autre explication ou pour te fournir mon bout de code si besoin .

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour
    Code Page d’accueil : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Quitter_Click()
    IsSvaved = True
    ThisWorkbook.Close False
    End Sub
    Code ThisWorkbook : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Cancel = Not IsSvaved
    End Sub
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
     Public IsSvaved As Boolean
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juillet 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 32
    Par défaut Presque !
    Bonjour rdurupt !

    Merci beaucoup pour ton aide .

    Ta solution n'est pas tout à fait celle que je recherche mais s'en approche beaucoup. En effet, elle permet d'empêcher la fermeture et de tester si l'utilisateur a bien quitté le classeur en cliquant sur "Quitter". La méthode est donc très semblable à celle avec alertdisplay mentionnée dans mon premier post.

    En fait le but de ma procédure est de tester si un utilisateur du réseau a bien fermé le classeur (sans modifier ses habitudes de fermeture du classeur notamment). Ainsi, j'aimerai que "OK" s'inscrive dans une case quand le classeur est bel et bien fermé par la méthode classique.

    Voici le bout de procédure correspondant :

    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 Feuille As String
     
    Feuille = ActiveSheet.Name
    Sheets("Indics ouverture").Activate
    Sheets("Indics ouverture").Range("A3").End(xlDown).Offset(0, 3).Value = "OK"
     
    Worksheets(Feuille).Activate
     
    End Sub
    Cela fonctionne SAUF si l'utilisateur clique sur la croix puis sur "annuler" où "OK" s'inscrit tout de même dans la case sélectionnée.

    Quelqu'un a-t-il une autre piste ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ThisWorkbook.Sheets("Indics ouverture").Range("A" & Cells.Rows.Count).End(xlUp).Offset(0, 3).Value = "OK"
    End Sub
     
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "Indics ouverture" Then ThisWorkbook.Sheets("Indics ouverture").Range("A" & Cells.Rows.Count).End(xlUp).Offset(0, 3).Value = "KO"
    End Sub
    le problème est que si l'utilisateur ferme sens sauvegarde?????
    tu peux faire un mixte des deux!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Cancel = Not IsSvaved
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    IsSvaved=true
    End Sub
     
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    IsSvaved=false
    End Sub
    Dernière modification par Invité ; 07/09/2015 à 11h40.

Discussions similaires

  1. [XL-2007] Boite de dialogue prédéfinie
    Par Mat32 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/03/2013, 18h02
  2. Attendre réponse boite de dialogue affichée avec option False
    Par Deniswetz dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/01/2011, 20h45
  3. Modifier une boite de dialogue prédéfinie
    Par xchoeur dans le forum C++Builder
    Réponses: 0
    Dernier message: 31/05/2008, 01h35
  4. Réponses: 1
    Dernier message: 07/09/2007, 09h30
  5. Réponse boite de dialogue prédéfinie "Enregistrer les modifications"
    Par catherineFR27 dans le forum Général VBA
    Réponses: 6
    Dernier message: 05/09/2006, 17h18

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