Attendre qu'un classeur soit fermé pour exécuter une macro

Magoa125 Messages postés 3 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je débute en VBA. Je vous explique mon problème: J'ai deux ordinateurs, Ordinateur 1 et ordinateur 2, j'utilise un fichier excel "Fichier 1" sur l'ordinateur 1 et un fichier excel "Fichier 2" sur l'ordinateur 2. Les ordinateurs sont en réseau.
J'ai également une macro "Macro 1" dans le Fichier 1 et une macro "Macro 2" dans le fichier 2. Ces deux macros ouvre le même fichier "Fichier 3" pour éxécuter un code. Mais il se peut que ces macros s'exécute en même temps et donc ouvre en même temps le fichier 3, et enregistre le fichier 3 une fois l'éxécution du code terminé. Cela pose donc un problème par exemple lorsque la macros 2 souhaite ouvrir le fichier 3 alors qu'il est deja en cours de modification par la macro 1. Je souhaiterai donc attendre que le fichier 3 soit fermé pour que la macro 2 puisse exécuter le code dans le fichier 3 et enregistrer le fichier.
J'espère que j'ai été clair, avez vous une idée d'une solution?
Merci

5 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    Dans tes 2 macros tu pourrais tester si le fichier est ouvert par cette fonction

    Function FichOuvert(F As String) As Boolean
    Dim Wk As Workbook
    On Error Resume Next
    Set Wk = Workbooks(F)
    On Error GoTo 0
    FichOuvert = Not Wk Is Nothing
    End Function

    "F"= le nom complet du fichier 3
    la fonction renvoie True si il est ouvert
    Michel
    0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour, salut michel,

    Ta proposition n'est valable que si ouvert dans la même session non ?
    Sur 2 micros différents ça va être difficile ;-)

    Pour l'instant je ne vois pas comment détecter qu'un verrou est posé sur un fichier.
    En attendant je pensais plus à l'utilisation de la propriété .ReadOnly. L'ouverture étant relancée toutes les 2 min avec un ontime tant que =true.
    Ou bien se servir de la notification de fermeture mais là je sèche encore.

    eric
    0
  3. Magoa125 Messages postés 3 Statut Membre
     
    Merci pour vos réponses, oui effectivement le fichier s'ouvre sur deux pc différents, si le fichier est ouvert je veux que la macro attende qu'il soit fermé pour s'exécuter? Comment relancer la vérification de l'ouverture du fichier toutes les 2 minb par exemple? Merci
    0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Je n'ai pas réussi avec ontime.
    Avec la fonction trouvée ici : https://www.developpez.net/forums/d98510/logiciels/microsoft-office/excel/macros-vba-excel/vba-e-tester-fichier-deja-ouvert/#post650523
    tu pourrais faire :
    Option Explicit
    
    Sub test()
        Const tempo As Long = 600    ' temps d'attente max en s
        Dim t As Single
        t = Timer
        Do
            DoEvents
        Loop Until Not FichierEstOuvert("D:\tmp\Classeur2.xls") Or (Timer - t) > tempo
    
        Workbooks.Open Filename:="D:\tmp\Classeur2.xls"
        If ActiveWorkbook.ReadOnly Then
            MsgBox "problème fichier Classeur2.xls"
            ActiveWorkbook.Close
            Exit Sub
        End If
        ' suite traitement
        MsgBox ActiveWorkbook.Name
    End Sub
    
    Function FichierEstOuvert(ByRef FichierTeste As String) As Boolean
        
        Dim Fichier As Long
        On Error GoTo Erreur
        Fichier = FreeFile
        Open FichierTeste For Input Lock Read As #Fichier
        Close #Fichier
        FichierEstOuvert = False
        Exit Function
    Erreur:
        FichierEstOuvert = True
    End Function

    eric
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Magoa125 Messages postés 3 Statut Membre
     
    Je vais essayer ce code. ou dois je executer ma macro qui ouvre le fichier?
    Merci
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      ou dois je executer ma macro qui ouvre le fichier?
      La palice dirait là où tu en as besoin...
      eric
      0