VBA éxecuter modules à partir d'une maccro

Arpette

XLDnaute Impliqué
Bonsoir à toutes et tous,
avec votre aide, je suis parvenu à ouvrir et modifier 62 dossiers contenant des dizaines classeurs comme je le souhaitais (remplacements de modules, ThisWorkbook, page etc...). Tous ces classeurs se trouvent maintenant dans un dosssier "Contrôles Clients Bis". Ce que je n'arrive pas à faire, c'est à partir de ce code:
Code:
Sub MaMacro()
Dim CheminDossier$, dossier, i As Byte, chemin$, o As Boolean, NomModule As String, Module3 As Variant
CheminDossier = "C:\Documents and Settings\JFL CONTROLE\Bureau\" 'à adapter
dossier = Array("Contrôles Clients Bis") 'noms des dossiers
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'pour la supression des feuilles
For i = 0 To UBound(dossier)
  chemin = CheminDossier & dossier(i) & "\"
  nomfich = Dir(chemin & "*.xls*") '1er fichier du dossier
  While nomfich <> ""
    o = False
    On Error Resume Next
    If IsError(Workbooks(nomfich).Name) Then 'si le fichier n'est pas déjà ouvert, on l'ouvre
       Application.EnableEvents = False
       Workbooks.Open chemin & nomfich
       o = True
    End If
    On Error GoTo 0
       
    With ActiveWorkbook.VBProject
     .Module3 Run 'C'est ici que je souhaite l'execution du module3
    End With
        
      Application.EnableEvents = True
      If o Then ActiveWorkbook.Close SaveChanges:=True 'si le fichier a été ouvert on le ferme
    
    nomfich = Dir 'fichier suivant du dossier
  Wend
Next
End Sub
éxecuter le module3 du classeur ouvert:
Code:
Sub Enregister()
    ' Enregistrer Sous
 Application.EnableEvents = False
    Dim Lechemin As String
    Dim LeFichier As String
    Dim NomRep As String
    
   '\***************************************************************************************************************************
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Lechemin = ActiveWorkbook.Path
            
    Nom = Cells(4, 3)
        
    NomClient = Cells(39, 26).Value
    
    NumParc = Cells(12, 8).Value
    
    Lieu = Cells(46, 25).Value
    
    NomRep = NomClient
    
    Marque = Cells(9, 8).Value
    
    Numserie = Cells(11, 8).Value
              
    Jour = Format(Cells(49, 9), "dd-MM-YYYY")
    
    LeFichier = Nom & " _ " & NumParc & " _ " & NomClient & " _ " & Marque & " _ " & Numserie & " _ " & Jour
   '\***************************************************************************************************************************
    Lechemin = "C:\Documents and Settings\JFL CONTROLE\Bureau\Trames\CONTROLES CLIENTS\"
    
    If Dir(Lechemin & NomRep & " " & Lieu, 16) = "" Then MkDir Lechemin & NomRep & " " & Lieu
       
    ActiveWorkbook.SaveAs Lechemin & NomRep & " " & Lieu & "\" & LeFichier

    ActiveWorkbook.ActiveSheet.Select
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
   '\***************************************************************************************************************************
   Application.ScreenUpdating = True
   Application.EnableEvents = True
  ThisWorkbook.Close SaveChanges:=True
End Sub

J'ai l'impression que mon post est un peu chargé...:( mais bon..
Merci de votre aide.
@+
 

laurent950

XLDnaute Accro
Re : VBA éxecuter modules à partir d'une maccro

Bonsoir,

je connais cette astuce :

With ActiveWorkbook.VBProject
call Enregister '.Module3 Run 'C'est ici que je souhaite l'execution du module3
End With


si votre premier code est dans un module et l'autre dans un autre module du même classeur.

exemple
Module1 = MaMacro
Module3 = Enregister

donc :
Call Module3.Enregister

Laurent


Laurent
 

Arpette

XLDnaute Impliqué
Re : VBA éxecuter modules à partir d'une maccro

Bonsoir Laurent, merci pour ta réponse, j'avais essayé cette solution, mais problème message "Sub ou Fonction non définie".
Il doit y avoir une solution pour ouvrir les classeurs les uns après les autres et d'éxecuter le module3 avant de fermer.
Je continue à creuser.
Merci ton aide
@+
 

job75

XLDnaute Barbatruc
Re : VBA éxecuter modules à partir d'une maccro

Bonsoir,

Le nom du module n'a aucune importance, ce qui importe c'est le nom de la macro.

Si elle s'appelle bien Enregistrer dans tous les fichiers :

Code:
Application.Run ActiveWorkbook.Name & "!Enregistrer"

Edit : et comme dans votre macro la variable nomfich contient le nom du fichier :

Code:
Application.Run nomfich & "!Enregistrer"
A+
 
Dernière édition:

laurent950

XLDnaute Accro
Re : VBA éxecuter modules à partir d'une maccro

Bonsoir job 75, Arpette.

A ce sujet, j'ai aussi une macro dans un classeur qui lui n'est pas actif. a la fin d'une macro qui tourne et lorsque j'arrive sur ma derniere ligne de code.

j'aimerais lancer la macro qui est dans le classeur fermer (je veux pas l'ouvrir), je connais le chemin, le nom du classeur, le nom du module et le nom de la macro qui est dans ce classeur.

y a t'il un moyen pour la lancer directement sans (ouvrir et fermer se classeur) éviter cette épate.

merci laurent
 

Arpette

XLDnaute Impliqué
Re : VBA éxecuter modules à partir d'une maccro

J'ai trouvé mon erreur, après avoir remis toutes les feuil1 de tous les dossiers et classeurs au même format; "Enregistrer" pointe sur la feuille "1(2)" et elle est vide. Pour faire simple, j'ai deux feuil1, l'ancienne (1) qui devra être supprimée lors d'une prochaine utilisation et la nouvelle 1(2). J'ai donc créé un nautre module "Corriger", qui lui pointe sur l'ancienne feuil1. Et là, Job, çà fonctionne.
Ensuite je supprime le module(4) "Corriger" dans tous les dossiers et classeurs associés.
Merci pour l'aide apportée
@+
 

Arpette

XLDnaute Impliqué
Re : VBA éxecuter modules à partir d'une maccro

Bonsoir à tous,
Eh bien non, celà ne fonctionne pas message "Impossible d'exécuter la macro" sur le classeur ouvert quand j'arrive sur la ligne
Code:
Application.Run nomfich & "!Corriger"
. Pourtant j'y croyais:(
Je vous redonne mon code, merci de votre aide.
@+
Code:
Sub MaMacro()
Dim CheminDossier$, dossier, i As Byte, chemin$, o As Boolean, NomModule As String, Module3 As Variant
CheminDossier = "C:\Documents and Settings\JFL CONTROLE\Bureau\" 'à adapter
dossier = Array("Contrôles Clients Bis") 'noms des dossiers
Application.ScreenUpdating = False
For i = 0 To UBound(dossier)
  chemin = CheminDossier & dossier(i) & "\"
  nomfich = Dir(chemin & "*.xls*") '1er fichier du dossier
  While nomfich <> ""
    o = False
    On Error Resume Next
    If IsError(Workbooks(nomfich).Name) Then 'si le fichier n'est pas déjà ouvert, on l'ouvre
       Application.EnableEvents = False
       Workbooks.Open chemin & nomfich
       o = True
    End If
    On Error GoTo 0
    Sheets("Page 1").Select
    With ActiveWorkbook.VBProject
     Application.Run nomfich & "!Corriger"
    End With
        
      Application.EnableEvents = True
      If o Then ActiveWorkbook.Close SaveChanges:=True 'si le fichier a été ouvert on le ferme
    
    nomfich = Dir 'fichier suivant du dossier
  Wend
Next
End Sub
 

MJ13

XLDnaute Barbatruc
Re : VBA éxecuter modules à partir d'une maccro

Re

Sinon, voici un code que j'utilise. Attention, si ton path a des espaces, cela doit être interpréter de la même sorte :confused:.

Code:
ListBox1.RowSource = "'" & ThisWorkbook.Name & "'!listechemin"
 

job75

XLDnaute Barbatruc
Re : VBA éxecuter modules à partir d'une maccro

Bonjour Arpette, Michel,

Pas d'idée, car Application.Run nomfich & "!Corriger" lance forcément la macro, bien sûr si Corriger existe (sans faute d'orhographe) dans tous les classeurs.

Le bug est sans doute dans la macro Corriger elle-même.

En passant, With ActiveWorkbook.VBProject et le End With ne servent à rien...

A+
 

job75

XLDnaute Barbatruc
Re : VBA éxecuter modules à partir d'une maccro

Re,

Dans un des fichiers, Corriger a peut-être été placée par erreur ailleurs que dans un module standard...

Edit : et par acquit de conscience avec ce qu'a dit Michel, essayer avec les guillemets anglais :

Code:
Application.Run "'" & nomfich & "'!Corriger"
A+
 
Dernière édition:

Arpette

XLDnaute Impliqué
Re : VBA éxecuter modules à partir d'une maccro

Bonjour Job, Michel,
Corriger est dans module standard Module4 et ce dans tous les classeurs.
Code:
Sub Corriger()
    ' Enregistrer Sous
    
    Dim Lechemin As String
    Dim LeFichier As String
    Dim NomRep As String
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Lechemin = ActiveWorkbook.Path
    
    Nom = Cells(4, 3)
    NomClient = Cells(35, 26).Value
    NomRep = NomClient
    Marque = Cells(9, 8).Value
    Numserie = Cells(11, 8).Value
    Jour = Format(Cells(46, 9), "dd-MM-YYYY")
    
    LeFichier = Nom & " _ " & NomClient & " _ " & Marque & " _ " & Numserie & " _ " & Jour
   
    Lechemin = "C:\Documents and Settings\JFL CONTROLE\Bureau\Trames\CONTROLES CLIENTS\"
    
    If Dir(Lechemin & NomRep, 16) = "" Then MkDir Lechemin & NomRep
       
    ActiveWorkbook.SaveAs Lechemin & NomRep & "\" & LeFichier

    ActiveWorkbook.ActiveSheet.Select
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    
        ThisWorkbook.Close SaveChanges:=True
        
    Application.ScreenUpdating = True
End Sub
Si je l'exécute en mode pas à pas, aucun problème, mais si je l'appelle d'après MaMacro qui se trouve dans un autre classeur ici
Code:
 Application.Run "'" & nomfich & "'!Corriger"
j'ai un message "Impossible d'exécuter la macro, il est possible qu'elle ne soit pas disponible ou que toutes les macros soient désactivées
Je n'y comprends plus rien, les macros sont activées, elle est disponible dans le classeur puisque quand MaMacro ouvre le fichier, je peux aller l'exécuter en mode pas à pas.
Merci de votre aide.
@+
Code:
Sub MaMacro()
Dim CheminDossier$, dossier, i As Byte, chemin$, o As Boolean, NomModule As String, Module3 As Variant
CheminDossier = "C:\Documents and Settings\JFL CONTROLE\Bureau\" 'à adapter
dossier = Array("Contrôles Clients Bis") 'noms des dossiers
Application.ScreenUpdating = False
For i = 0 To UBound(dossier)
  chemin = CheminDossier & dossier(i) & "\"
  nomfich = Dir(chemin & "*.xls*") '1er fichier du dossier
  While nomfich <> ""
    o = False
    On Error Resume Next
    If IsError(Workbooks(nomfich).Name) Then 'si le fichier n'est pas déjà ouvert, on l'ouvre
       Application.EnableEvents = False
       Workbooks.Open chemin & nomfich
       o = True
    End If
    On Error GoTo 0
    Sheets("Page 1").Select
      
      Application.Run "'" & nomfich & "'!Corriger"
      Application.EnableEvents = True
      If o Then ActiveWorkbook.Close SaveChanges:=True 'si le fichier a été ouvert on le ferme
    
    nomfich = Dir 'fichier suivant du dossier
  Wend
Next
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35