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 :

Workbook ne s'exécute pas après un Workbooks.Open


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut Workbook ne s'exécute pas après un Workbooks.Open
    Bonjour à tous,

    J'ai dans un classeur un bouton qui n'apparait que si ThisWorkbook.ReadOnly est vrai.

    Dans un module standard :
    • Une fonction qui test si le fichier ouvert est disponible ou non :

    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
    Function IsFileOpen(filename As String)
        Dim Filenum%, Errnum%
            On Error Resume Next
                Filenum = FreeFile()
                'Test d'ouverture du fichier.
                Open filename For Input Lock Read As #Filenum
                Close Filenum
                Errnum = Err
            On Error GoTo 0
     
            Select Case Errnum
                Case 0: IsFileOpen = False
                Case 70: IsFileOpen = True
                Case Else: Error Errnum
            End Select
    End Function
    • Une procédure sur le bouton qui va test la disponibilité du fichier et afficher un message pouvant proposer l'ouverture de celui-ci s'il est disponible :

    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
    Sub TesterLectureSeule()
        Dim Message$, Titre$
            Titre = "        Lecture Seule"
            If IsFileOpen(ThisWorkbook.FullName) Then
                Message = "Le classeur est toujours réservé par un autre utilisateur."
                MsgBox Message, vbInformation, Titre
            Else
                Message = "Le classeur est maintenant disponible." & vbNewLine & vbNewLine & _
                        "Voulez-vous l'ouvrir en lecture / écriture ?"
                Select Case MsgBox(Message, vbInformation + vbYesNo, Titre)
                    Case vbNo
                        'rien
                    Case vbYes
                        Application.OnTime Now + TimeSerial(0, 0, 3), "OuvrirCeClasseur"
                        ThisWorkbook.Close (False)
                End Select
            End If
    End Sub
    • Une procédure pour s'auto-ouvrir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub OuvrirCeClasseur()
        Workbooks.Open ThisWorkbook.FullName
    End Sub
    Dans le module ThisWorkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
        MsgBox "execution de Workbook_Open"
    End Sub

    Vous pouvez voir que les deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.OnTime Now + TimeSerial(0, 0, 3), "OuvrirCeClasseur"
    ThisWorkbook.Close (False)
    programment l'ouverture du fichier dans 3 secondes et le ferme. L'instance Excel restant ouvert, la procédure OuvrirCeClasseur va bien s'exécuter.


    Mon problème est que le fichier se rouvre bien en lecture / écriture mais l'évènement Workbook_Open ne s'exécute pas.

    Savez-vous pourquoi ? Et auriez-vous des pistes à explorer pour régler le problème ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Le niveau de sécurité des macros?
    Ceci dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Close (False)
    arrête instantanément les macros exécuté par ThisWorkbook

  3. #3
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour Robert,

    Pour le niveau de sécurité des macros, je ne penses pas car lorsque j'ouvre en lecture seule, Workbook_Open est exécuté.

    Ensuite je fais ThisworkBook.Close donc toutes les macros sont automatiquement désactivées, mais juste avant je programme le lancement d'une macro qui servira a l'ouvrir, et il s'ouvre bien mais sans le Workbook_Open.


    As-tu testé de mettre les morceaux de code dans un classeur ? La seule chose impérative c'est que le fichier soit enregistrer physiquement dans le pc et que l'instance Excel reste ouvert. Ce qui est le cas avec .Close

  4. #4
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour tout le monde,

    Je suis toujours avec mon problème mais j'ai fait un test dont le résultat est étonnant :
    Ajout dans le module ThisWorkbook de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        MsgBox "fermeture"
    End Sub
    1. J'ouvre en lecture seule
    2. j'exécute le code en particulier les deux lignes :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Application.OnTime Now + TimeSerial(0, 0, 3), "OuvrirCeClasseur"
      ThisWorkbook.Close (False)
    3. Le fichier se ferme
    4. 3 secondes plus tard il s'ouvre en lecture / écriture
    5. MsgBox "execution de Workbook_Open" dans Workbook_Open ne s'exécute pas
    6. Je ferme le fichier
    7. MsgBox "fermeture" dans Workbook_BeforeClose s'exécute bien.


    Etonnant non ? Des idées ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    et si tu passes par une procédure Auto_Open dans un module standard, il se passe quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Auto_Open()
    MsgBox "toto"
    End Sub

    quid de l'existence de procédures évènementielles dans tes feuilles ? Genre un petit EnableEvent qui traine ? (j'y crois pas trop)

  6. #6
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour Joe,

    Merci pour ta réponse mais Sub Auto_Open n'est pas exécuté non plus.

    J'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        MsgBox Target.Address
    End Sub
    Apres fermeture et réouverture 3 secondes plus tard, l'évènement Workbook_SheetSelectionChange est bien fonctionnel donc EnableEvent est bien a vrai.


    Je suis perdu car je ne vois vraiment pas pourquoi seul l'évènement d'ouverture du classeur est inopérant.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/05/2014, 19h06
  2. Worksheets_change ne se lance pas après exécution macro
    Par d0n32 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/03/2013, 18h18
  3. Code qui fonctionne depuis un module mais pas depuis un workbook
    Par Gualino dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/10/2011, 19h48
  4. Réponses: 8
    Dernier message: 25/10/2009, 12h03
  5. Réponses: 6
    Dernier message: 21/07/2008, 21h06

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