VBA appeler une macro d'un autre fichier dont le nom du fichier varie

Bonjour,

Voici ce que je souhaiterai faire à partir d'une macro ayant pour but l'envoie de mail automatique :

1. Mise à jour du fichiers "Template" n°1 (avec des données provenant de sources extérieures)

2. Exécution de la macro (Switch) contenu dans fichiers "Template" n°1.

3. Enregistrement du fichier "Template" n°1 sous forme xlsx pour supprimer les macros lors de l'envoie du fichier

4. Refaire les étapes 1. 2. 3. pour les 5 fichiers "Template" du dossier

Je suis actuellement bloqué lorsque j'essaye d'ouvrir le 1er fichier "Template" pour lancer la macro Switch

Voila le code que j'ai essayé :

'Tant que j'ai encore des fichiers dans mon dossier on recommence la boucle

While Workbooks(NMFICHIER).Sheets("Adresses").Cells(i, 1) <> ""

'Pour ouvrir mes fichier

fixl = DOSSIERENVOI & "\" & NMFICENVOI & Workbooks(NMFICHIER).Sheets("Adresses").Cells(i, 1) & ".xlsx"

fichier = DOSSIERTEMPLATE & "\" & NMFICENVOI & Workbooks(NMFICHIER).Sheets("Adresses").Cells(i, 1) & ".xlsm"

fiM2FI = DOSSIERM2FI & "\" & NMM2FI & Workbooks(NMFICHIER).Sheets("Adresses").Cells(i, 4) & ".xlsx"

'Utilisation de la variable "fichier" pour stocker le nom du nouveau fichier ouvert. -> objectif : permettre de passer d'un fichier a l'autre avec le While

Workbooks.Open Filename:=fichier

'ActiveWorkbook.RefreshAll

DoEvents

Application.Run (fichier & "!MacroSwitch") 'Fonction qui me renvoie une erreur 1004 me disant "Impossible d’exécuter la macro. Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées.

DoEvents

ActiveWorkbook.SaveAs Filename:=fixl, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False, Local:=True

Merci pour votre aide. Si vous avez besoin de plus de précision ou d'explication sur mon problème n’hésitez pas !

Thomas

Bonsoir,

ceci devrait être mieux

    Dim wb As Workbook
    Set wb = Workbooks.Open(fichier)
    'ActiveWorkbook.RefreshAll

    DoEvents

    Application.Run wb.Name & "!MacroSwitch"

Bonjour et merci de votre attention a mon problème,

Mon code avec votre solution :

While Workbooks(NMFICHIER).Sheets("Adresses").Cells(i, 1) <> ""

    fixl = DOSSIERENVOI & "\" & NMFICENVOI & Workbooks(NMFICHIER).Sheets("Adresses").Cells(i, 1) & ".xlsx"
    fichier = DOSSIERTEMPLATE & "\" & NMFICENVOI & Workbooks(NMFICHIER).Sheets("Adresses").Cells(i, 1) & ".xlsm"
    fiM2FI = DOSSIERM2FI & "\" & NMM2FI & Workbooks(NMFICHIER).Sheets("Adresses").Cells(i, 4) & ".xlsx"

    Dim wb As Workbook
    Set wb = Workbooks.Open(fichier)
    'ActiveWorkbook.RefreshAll

    DoEvents

    Application.Run wb.Name & "!MacroSwitch"

    DoEvents

    ActiveWorkbook.SaveAs Filename:=fixl, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False, Local:=True

Je viens de tester votre solution et VBA m'affiche ce message d'erreur :

"Erreur d'exécution '1004':

Impossible d'exécuter la macro 'Aide Switch_Version_Test.xlsm!MacroSwitch'. Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées."

Il n'arrive pas a exécuter la ligne :

Application.Run wb.Name & "!MacroSwitch"

Bonjour,

Le problème vient de votre nom de fichier qui contient un espace après "Aide" . Remplacer l'espace par un soulignement et cela ira beaucoup mieux.

Aide_Switch_Version_Test.xlsm

Effectivement, après vérification, le problème était les espaces dans le nom du fichier. Merci bcp pour ton aide rapide et efficace !

Bonne journée

Rechercher des sujets similaires à "vba appeler macro fichier nom varie"