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 :

Fonction volatile +/- Applcation.Display.Alert


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut Fonction volatile +/- Applcation.Display.Alert
    Bonjour,

    2 MsgBox à l'ouverture d'un classeur dans lequel se trouvent des fonctions volatiles (dont AUJOURDHUI() ).

    Si on ferme le classeur sans aucune modification (de la part de l'utilisateur), le message suivant apparaît néanmoins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Souhaitez-vous enregistrer le classeur... ?"
    Y a-t-il un moyen d'éviter ce message afin de ne pas perturber l'utilisateur ?

    J'ai essayé en vain avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Display.Alert = False
    dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook/Private Sub Workbook_Open ()
    Peut-être que cette dernière ligne n'est "tout simplement" pas à sa place ?! Ou qu'elle n'est pas la solution ?!

    En vous remerciant par avance pour vos lumières,
    Cordialement,
    jp

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    2 MsgBox à l'ouverture d'un classeur dans lequel se trouvent des fonctions volatiles (dont AUJOURDHUI() ).
    Je crains ne pas comprends cette phrase.
    Une fonction volatile ne réagit que si l'on modifie la valeur d'une cellule de n'importe quel classeur ouvert et cette fonction volatile doit être placée dans une cellule quelconquer d'un classeur or MsgBox est une fonction VBA. Je ne vois pas le rapport
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Bonjour,

    Je reformule,

    L'utilisateur ouvre un classeur (xlsm) et un Msgbox affiche un message d'accueil (donc pas d'intervention particulière de l'utilisateur).

    Dans ce classeur, certaines cellules sont liées à la fonction AUJOURDHUI() et autres fonctions volatiles.

    Si l'utilisateur ferme le classeur sans y avoir apporté de modifications (outre d'avoir validé le Msgbox), une fenêtre s'ouvre et lui demande s'il veut enregistrer ou pas le classeur.

    J'imagine que le changement d'état du classeur est lié à la fonction volatile ?!

    Mais comme l'utilisateur (encore plus novice que moi sur Excel) pense n'avoir rien fait, il se demande légitimement pourquoi on lui demande d'enregistrer un classeur qu'il n'a pas modifié. D'où mon souhait de lui éviter de se poser cette question.

    En espérant avoir été plus clair,

    Cordialement,
    jp

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est effectivement plus clair
    Une solution est de sauver le classeur lors de son l'ouverture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
       Me.Saved = True
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Bonjour,

    Merci pour cette proposition.

    Je l'ai mis là et ça ne change (manifestement rien) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Private Sub Workbook_Open()
    Dim NomClasseur As String
    Dim Racine As String
    Dim date_péremption As Date
    Dim échéance As Integer
     
        Me.Saved = True
     
        Application.WindowState = xlMaximized
    .../...
    Et si j'exécute Sub Workbook-Open pas à pas, je ne constate pas d'effet au passage de Me.Saved = True
    J'ai dû rater quelque chose.

    jp

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je teste toutes les procédures que je publie mais lors du test j'avais utilisé =SOMME(INDIRECT(A7)) et =AUJOURDHUI() et évidemment la date du jour n'ayant pas changé lors de mes tests, cela fonctionnait


    J'ai donc ajouté la formule =TEXTE(MAINTENANT();"hh:mm:ss") incluant la fonction volatile MAINTENANT pour que la valeur change à chaque ouverture du classeur et suite à ces tests, il y a lieu de placer le code dans la procédure événementielle Workbook_Activate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Activate()
       Me.Saved = True
    End Sub

    si j'exécute Sub Workbook-Open pas à pas, je ne constate pas d'effet au passage de Me.Saved = True
    La méthode Saved ne fait que sauver.
    Avez-vous remarqué un effet particulier lorsque vous sauver manuellement votre classeur ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Bonjour,

    J'ai donc ajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Activate()
       Me.Saved = True
    End Sub
    ... dans ThisWorkbook, et si je ferme le classeur sans l'avoir modifié, j'ai toujours le message :

    Nom : ph tulliez.jpg
Affichages : 122
Taille : 14,9 Ko

    J'ai vraisemblablement dû oublier quelque chose.

    Cordialement,
    jp

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    N'y aurait-il pas une procédure après la méthode Saved qui écrirait dans une cellule ou la modification de valeur d'une propriété d'objet comme par exemple la propriété Visible de l'objet Worksheet ce qui évidemment est une modification du classeur.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Une solution est de sauver le classeur lors de son l'ouverture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
       Me.Saved = True
    End Sub
    Il serait préférable de mettre ça dans un Workbook_BeforeClose.
    Lire ça : https://docs.microsoft.com/fr-FR/off...ok.beforeclose
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Bonjour,

    N'y aurait-il pas une procédure après la méthode Saved qui écrirait dans une cellule ou la modification de valeur d'une propriété d'objet comme par exemple la propriété Visible de l'objet Worksheet ce qui évidemment est une modification du classeur.
    la propriété Visible de l'objet Worksheet ce qui évidemment est une modification du classeur
    Je crois que c'est effectivement là que réside la problème. Avec un peu de recul, je me dis que j'aurais dû y penser plus tôt...

    Merci pour votre patience.
    Cordialement,
    jp

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 16/04/2014, 10h02
  2. Probléme de display alert
    Par varik dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/03/2012, 10h56
  3. Appeler une fonction pour lancer une alerte javascript
    Par beegees dans le forum Langage
    Réponses: 1
    Dernier message: 09/01/2009, 16h10
  4. fonction pour message d'alerte
    Par Alain_Aebischer dans le forum Général JavaScript
    Réponses: 23
    Dernier message: 10/06/2008, 15h04
  5. UDF Fonctions volatiles
    Par hatake.kakashi dans le forum Excel
    Réponses: 1
    Dernier message: 31/01/2008, 06h43

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