Appeler une macro extérieure

jojodanslalune

XLDnaute Junior
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.
 

bqtr

XLDnaute Accro
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+
 

jojodanslalune

XLDnaute Junior
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?
 

jojodanslalune

XLDnaute Junior
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 édition:

bqtr

XLDnaute Accro
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:

jojodanslalune

XLDnaute Junior
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.
 

Discussions similaires

Statistiques des forums

Discussions
312 490
Messages
2 088 881
Membres
103 981
dernier inscrit
vinsalcatraz