Appeler une macro extérieure

  • Initiateur de la discussion Initiateur de la discussion jojodanslalune
  • 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 !

J

jojodanslalune

Guest
Bonjour,

Je continue à explorer les possibilités, à découvrir les richesses d'Excel. Mais certaines choses échappent encore à mes compétences...

Voici ma question du jour: est-t-il possible d'ouvrir tous les documents contenu dans un répertoire et de faire exécuter une macro contenue dans ces documents?

Merci à vous.
 
Re : Appeler une macro extérieure

Re,

La macro devrait donc dire dans son langage châtier: ouvre les fichiers du répertoire MACHIN et lance dans chacun de ces fichiers sa macroBAZAR.
Si je comprends bien, tu travailles sur un fichier à partir duquel tu lances la recherche dans le répertoire pour ouvrir les autres fichiers.

Si j'ajoute un CALL MAMACRO dans la première macro, ça ouvrira la macro du fichier qui est ouvert?
Tu peux lancer une macro dans un fichier à partir d'un autre fichier, pour cela utilise l'instruction Run.

Application.Run"NomdetonFichier.xls!NomdelaMacro"

Attention au nom du fichier, si il y a un ou des espaces dans le nom, il faut mettre deux apostrophes : Application.Run"'Non de ton Fichier.xls'!NomdelaMacro"

Maintenant toi seul connais le moment où les macros doivent se lancer, mais tu peux l'indiquer dans la macro "Recherche_Fichier".

A+
 
Re : Appeler une macro extérieure

Non, non... si je lance la macro "ouvrir tous les fichiers", cette macro contenue dans ces fichiers doit de toute façon s'ouvrir.

Par contre si j'ouvre ces fichiers manuellement, la macro ne doit pas être ouverte.
 
Re : Appeler une macro extérieure

Re,

Application.Run"NomdetonFichier.xls!NomdelaMacro"

Attention au nom du fichier, si il y a un ou des espaces dans le nom, il faut mettre deux apostrophes : Application.Run"'Non de ton Fichier.xls'!NomdelaMacro"

A+

Dois-je obligatoirement indiquer le nom du fichier? Car ces noms sont tous très différents: ils s'agit de noms de famille, de prénom et d'une date. Il m'est donc impossible d'écrire le nom de chaque fichier.

N'est-t-il pas possible que cet Application.Run lance simplement la macro du fichier que notre macro "recherche_fichier" a ouvert?
 
Re : Appeler une macro extérieure

Voilà le résultat de mes essais:

Code:
ChDir "C:\Bulletins\" & Range("D13").Value & "\"
monfichier = Dir("*.*")
While monfichier <> ""
Workbooks.Open monfichier
monfichier = Dir()
Call imprimerpage
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
Wend

Cela fonctionne parfaitement bien jusqu'à présent.

Un soucis: j'ai un userform qui se lance au démarrage et qui attend qu'on le ferme pour que le reste du code fonctionne. Un peu énervant. Est-il possible de le faire se fermer automatiquement?
 
Dernière modification par un modérateur:
Re : Appeler une macro extérieure

Salut jojodanslalune, le fil, le forum

D'après ton dernier exemple, tu lances toujours la même macro, donc regarde si ce code peut convenir :

Code:
Sub Recherche_Fichier2()
Dim Rep As Object
Dim Fichier As Object
Dim Chemin As String
Chemin = "C:\Documents and Settings\Coordonateur\Mes documents\hh" ' à adapter.
Set Rep = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
For Each Fichier In Rep.Files
  Workbooks.Open Filename:=Fichier
  'Unload Me
      If InStr(ActiveWorkbook.Name, " ") = 0 Then
         Run ActiveWorkbook.Name & "!Module1.bb" ' si pas d'espace dans le nom du fichier
      Else
         Run "'" & ActiveWorkbook.Name & "'" & "!Module1.bb" 'si espace dans le nom du fichier
      End If
  ActiveWorkbook.Saved = True
  ActiveWorkbook.Close
Next
End Sub

Module1.bb correspond à la macro qui se lancera, (le numéro du module puis le nom de la macro) à adapter
Unload.Me pour fermer le userform qui s'ouvre à l'ouverture du fichier, mais là je suis pas trop sûr. (enlever l'apostrophe devant)


A+

Edit :

La même chose avec FileSarch :

Code:
Sub Recherche_Fichier()
Dim FS As FileSearch
Dim Rep As String
Dim i As Integer
Rep = "C:\Documents and Settings\Coordonateur\Mes documents\hh" ' à adapter
Set FS = Application.FileSearch
With FS
      .LookIn = Rep
      .Filename = "*.xls"
      .Execute
  If .FoundFiles.Count = 0 Then
       MsgBox "fichier non trouvé"
       Exit Sub
  End If
End With
For i = 1 To FS.FoundFiles.Count
  Workbooks.Open Filename:=FS.FoundFiles(i)
  'Unload Me
      If InStr(ActiveWorkbook.Name, " ") = 0 Then
         Run ActiveWorkbook.Name & "!Module1.bb" ' si pas d'espace dans le nom du fichier
      Else
         Run "'" & ActiveWorkbook.Name & "'" & "!Module1.bb" 'si espace dans le nom du fichier
      End If
  ActiveWorkbook.Saved = True
  ActiveWorkbook.Close
Next i
End Sub
 
Dernière édition:
Re : Appeler une macro extérieure

Voici ce que j'ai trouvé et qui fonctionne:

Code:
Sub imprime_tout()

'l'instruction ChDir permet de se positionner
'sur un répertoire précis
Application.EnableEvents = False
ChDir "C:\Bulletins\" & Range("D13").Value & "\"
monfichier = Dir("*.*")
While monfichier <> ""
Workbooks.Open monfichier
monfichier = Dir()

Call imprime_tout_suite
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
Wend
Application.EnableEvents = True
End Sub

De plus, cette méthode permet de fermer automatiquement le userform de chacun des fichiers au lancement de celui-ci.

Désolé du retard de mes réponses mais je suis un peu débordé ces temps-ci.
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
586
T
  • Résolu(e)
Microsoft 365 pb effacement macro
Réponses
8
Affichages
795
Themax
T
Retour