Attendre qu'un classeur soit fermé pour exécuter une macro
Magoa125
Messages postés
3
Statut
Membre
-
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 25847 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
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:
- Attendre qu'un classeur soit fermé pour exécuter une macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Application se ferme toute seule android - Guide
- Rouvrir onglet fermé chrome - Guide
- Imprimer un classeur excel sur mac - Guide
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
5 réponses
Bonjour,
Dans tes 2 macros tu pourrais tester si le fichier est ouvert par cette fonction
"F"= le nom complet du fichier 3
la fonction renvoie True si il est ouvert
Michel
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
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
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
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
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 :
eric
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question