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

  • Initiateur de la discussion Initiateur de la discussion Magoa125
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Magoa125

XLDnaute Nouveau
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
 
Re : Attendre qu'un classeur soit fermé pour éxécuter une macro

Bonjour ,

Voici une solution où
dans la routine Test , l'on utilise la fonction fichierlibre pour savoir si le fichier est disponible ou pas à l'utilisation.

Bien sur , il faut adapter le chemin et nom di fichier

Code:
Option Explicit

Public Function Fichierlibre(NomdeFichier As String) As Boolean
'Vérification d'utilisation fichier
'
Dim FichierValide As Integer
Dim Etat As Boolean

Etat = False
FichierValide = FreeFile
'Gestion des erreurs
On Error GoTo ErreurFichier
  Open NomdeFichier For Input Lock Read Write As #FichierValide
  Close #FichierValide
  Fichierlibre = True

'Si erreur d'accès alors le fichier n'est pas disponible
ErreurFichier:
On Error GoTo 0
End Function

Sub test()
Dim Retour As Boolean
Retour = Fichierlibre("C:\Appli_Excel\essai.xls")
End Sub
 
Re : Attendre qu'un classeur soit fermé pour éxécuter une macro

Merci ta réponse. Ce que j'aimerais savoir également c'est comment ne pas exécuter ma macro si le fichier n'est pas disponible, mais l’exécuter une fois le fichier disponible? Donc attendre que le fichier soit fermé pour exécuter la macro.
 
Re : Attendre qu'un classeur soit fermé pour éxécuter une macro

Voilà,
dans le module test , une boucle attent la libération du fichier,
j'ai ajouté un chien de garde de 1 minute, facilement réglable qui permet de sortir de la boucle

il suffit ensuite de mettre la suite de ton traitemnt derriere cette boucle



Code:
Option Explicit

Public Function Fichierlibre(NomdeFichier As String) As Boolean
'Vérification d'utilisation fichier
'
Dim FichierValide As Integer
Dim Etat As Boolean

Etat = False
FichierValide = FreeFile
'Gestion des erreurs
On Error GoTo ErreurFichier
  Open NomdeFichier For Input Lock Read Write As #FichierValide
  Close #FichierValide
  Fichierlibre = True

'Si erreur d'accès alors le fichier n'est pas disponible
ErreurFichier:
On Error GoTo 0
End Function


Sub test()
Dim Retour As Boolean, TempsDépassé As Boolean
Dim Mem As String
Mem = Timer + 60 'Secondes
Do
DoEvents
Retour = Fichierlibre("C:\Appli_Excel\essai.xls")
If Timer > Mem Then TempsDépassé = True
Loop Until Retour Or TempsDépassé

'Suite du traitement
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
172
Réponses
12
Affichages
282
Retour