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

Magoa125 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
eriiic Messages postés 24603 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
A voir également:

5 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
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
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 273
 
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
Magoa125 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
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
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 273
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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