[Résolu] macro ThisWorkbook BeforeClose ne s'active pas !

vivbout

XLDnaute Junior
Bonsoir,

je viens vers vous car je suis bloqué sur un sujet et je ne trouve pas la solution. voilà mon problème: j'ai plusieurs fichiers qui contiennent une macro qui s'active à la fermeture du fichier. toutes ces macros fonctionnent, pas de soucis.
Mais j'ai un autre fichier sur lequel je voudrais pouvoir ouvrir tous les fichiers un par un et les refermer pour que toutes les macros beforeclose s'activent.

voilà mon code

Code:
Sub Rafraîchir_les_fichiers_sources()


    Dim rep$, nom1$, ClasseurRegional$, DebutNomFichier
    nom1 = ActiveWorkbook.Name
    rep = "V:\Salia\Emballage\Commandes\Commandes emballages\"
    ClasseurRegional = Dir(rep & "*.xls")
    While Len(ClasseurRegional) > 0
        Workbooks.Open rep & ClasseurRegional
        Workbooks(ClasseurRegional).Close ([Savechanges])
        ClasseurRegional = Dir    'passer au suivant
    Wend

End Sub

dans l'ensemble il fonctionne correctement, il ouvre et referme les fichiers, mais les macro ne s'activent pas:confused:

j'ai vu une solution qui pourrait marcher

Code:
Application.Run "'Nom du Classeur.xls'!Module1.NomMacro"

mais je ne sais pas comment intégrer "ClasseurRegional" à la place de "'Nom du Classeur.xls'"

merci d'avance pour votre aide

Vivien
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : macro ThisWorkbook BeforeClose ne s'active pas !

Bonsoir,
à tout hasard as-tu placé un ' devant ClasseurRegional ?
Code:
Application.Run "'ClasseurRegional.xls'!Module1.NomMacro"

Vérifier que l'extension, le module où la macro à lancer se trouve, etc. correspondent bien.
A+

 

vivbout

XLDnaute Junior
Re : macro ThisWorkbook BeforeClose ne s'active pas !

merci pour la réponse, malheureusement cela ne fonctionne pas.

j'ai bien une macro dans tous mes fichiers (Sub copie_macro()) placée dans le module 2 et les fichiers sont .xls

voilà le code que j'ai testé :
Code:
Sub Rafraîchir_les_fichiers_sources()


    Dim rep$, nom1$, ClasseurRegional$, DebutNomFichier
    nom1 = ActiveWorkbook.Name
    rep = "V:\Salia\Emballage\Commandes\Commandes emballages\"
    ClasseurRegional = Dir(rep & "*.xls")
    While Len(ClasseurRegional) > 0
        Workbooks.Open rep & ClasseurRegional
        Application.Run "'ClasseurRegional.xls'!Module2.copie_macro"
        Workbooks(ClasseurRegional).Close ([Savechanges])
        ClasseurRegional = Dir    'passer au suivant
    Wend

End Sub

merci d’avance pour votre aide
 
Dernière édition:

vivbout

XLDnaute Junior
Re : macro ThisWorkbook BeforeClose ne s'active pas !

j'ai essayé ça mais cela ne fonctionne pas non plus :mad:

Code:
Sub Rafraîchir_les_fichiers_sources()


    Dim rep$, nom1$, ClasseurRegional$, DebutNomFichier
    nom1 = ActiveWorkbook.Name
    rep = "V:\Salia\Emballage\Commandes\Commandes emballages\"
    ClasseurRegional = Dir(rep & "*.xls")
    While Len(ClasseurRegional) > 0
        Workbooks.Open rep & ClasseurRegional
        Call Workbooks(ClasseurRegional).Module2.copie_macro
        Workbooks(ClasseurRegional).Close ([Savechanges])
        ClasseurRegional = Dir    'passer au suivant
    Wend

End Sub
 
Dernière édition:

vivbout

XLDnaute Junior
Re : macro ThisWorkbook BeforeClose ne s'active pas !

Ceci fonctionne pour le premier fichier, mais plante à l'ouverture du deuxième. il ne doit pas manquer grand chose !!!

Code:
Sub Rafraîchir_les_fichiers_sources()


    Dim rep$, nom1$, ClasseurRegional$, DebutNomFichier
    nom1 = ActiveWorkbook.Name
    rep = "V:\Salia\Emballage\Commandes\Commandes emballages\"
    ClasseurRegional = Dir(rep & "*.xls")
    While Len(ClasseurRegional) > 0
        Workbooks.Open rep & ClasseurRegional

Application.Run "'" & ClasseurRegional & "'!Module2.copie_macro"

        Workbooks(ClasseurRegional).Close ([Savechanges])
        ClasseurRegional = Dir    'passer au suivant
    Wend

End Sub
 

david84

XLDnaute Barbatruc
Re : macro ThisWorkbook BeforeClose ne s'active pas !

Bonjour,
je ne peux tester donc je navigue à vue.
Pourquoi les crochets entre entre Savechanges ?
Qu'est-ce que cela donne comme cela Workbooks(ClasseurRegional).Close SaveChanges:=False (ou True, à toi de voir).
A+
 

Roland_M

XLDnaute Barbatruc
Re : macro ThisWorkbook BeforeClose ne s'active pas !

bonjour,

voir plutôt comme ceci !? (j'ai testé c'est ok !)

Code:
Sub Rafraîchir_les_fichiers_sources()
    Dim Rep$, ClasseurRegional$, R$
    Rep = "V:\Salia\Emballage\Commandes\Commandes emballages\"
    ClasseurRegional = Dir(Rep & "*.xls")
    While Len(ClasseurRegional) > 0
       If ClasseurRegional <> ThisWorkbook.Name Then
          R$ = Rep & ClasseurRegional
          Application.Run "'" & R$ & "'!copie_macro" 'ceci charge le classeur et exécute la macro
          Workbooks(ClasseurRegional).Close True 'True pour Save et False pour fermer sans save
       End If
       ClasseurRegional = Dir 'passer au suivant
    Wend
End Sub

EDIT: j'ai rectifié une erreur au copier/coller
 
Dernière édition:

vivbout

XLDnaute Junior
Re : macro ThisWorkbook BeforeClose ne s'active pas !

Bon, c'est mieux mais pas encore ça. quand je lance la macro, le premier fichier s'ouvre, la macro se lance, mais plante à la première ligne :(

voici le code de la macro "copie_macro"

Code:
Sub copie_macro()

Sheets("récap").Select
    Rows("2:2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Range("A1").Select

Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name <> "récap" And ws.Name <> "Modèle" And ws.Name <> "Liste des articles" Then
Application.ScreenUpdating = False
ws.Activate


Range("A19:F23").Copy
Sheets("récap").Activate
Range("B65536").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
ws.Activate
Application.CutCopyMode = False
End If
Next ws

Sheets("récap").Select
For lin = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Rows(lin).Find("*") Is Nothing Then Rows(lin).Delete
Next lin

Range("A1").Select
Selection.AutoFill Destination:=Range("A1:A2000")
Range("A1:A2000").Select
Range("A1").Select

     Columns("A:G").Select
    ActiveWorkbook.Worksheets("récap").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("récap").Sort.SortFields.Add Key:=Range("D2:D2000") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("récap").Sort.SortFields.Add Key:=Range("A2:A2000") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("récap").Sort
        .SetRange Range("A1:G2000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    

Dim i As Integer
With ThisWorkbook.Sheets("récap")
'Précisez le nom de votre feuille
            For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
'je travaille sur la colonne c
'Rows.count permet de retourner le nombre de ligne de la plage range
                        If .Range("F" & i).Value = "" Then
                                   .Rows(i).Delete
                        End If
            Next i
End With

    
    Range("A1").Select
 
 Sheets(1).Activate
 
 End Sub

l'erreur indiquée est "erreur d'exécution '9', l'indice n'appartient pas à la sélection"

ce qui est étrange c'est que la macro fonctionne lorsque je la lance directement du fichier en question...

une idée?


bonjour,

voir plutôt comme ceci !? (j'ai testé c'est ok !)

Code:
Sub Rafraîchir_les_fichiers_sources()
    Dim Rep$, ClasseurRegional$, R$
    Rep = "V:\Salia\Emballage\Commandes\Commandes emballages\"
    ClasseurRegional = Dir(Rep & "*.xls")
    While Len(ClasseurRegional) > 0
       If ClasseurRegional <> ThisWorkbook.Name Then
          R$ = Rep & ClasseurRegional
          Application.Run "'" & R$ & "'!copie_macro" 'ceci charge le classeur et exécute la macro
          Workbooks(ClasseurRegional).Close True 'True pour Save et False pour fermer sans save
       End If
       ClasseurRegional = Dir 'passer au suivant
    Wend
End Sub

EDIT: j'ai rectifié une erreur au copier/coller
 

vivbout

XLDnaute Junior
Re : macro ThisWorkbook BeforeClose ne s'active pas !

je ne sais pas si cela a une importance, mais pour info la macro de chaque fichier est initialement dans le "ThisWorkBook" en tant que BeforeClose. c'est une macro qui se déclenche donc à la fermeture du fichier. je les ai copiées dans un module en me disant que ce serait plus facile à utiliser dans la macro du fichier récap...

je suis perdu !!
 

Roland_M

XLDnaute Barbatruc
Re : macro ThisWorkbook BeforeClose ne s'active pas !

re

si je comprend bien, ma macro fonctionne et lance bien le Sub copie_macro !?
ce serait donc dans cette macro que tu as une erreur No 9 ?
peux tu dire sur quelle ligne ? (quand tu as le message d'erreur tu clic sur le bouton débogage j'espère !?)

EDIT: excuses, tu dis à la première ligne, donc ici
Sheets("récap").Select

si c'est ça c'est qu'il y a erreur sur le nom de l'onglet "récap" !?
car si c'est "recap" ou autre tu as cette erreur d'exécution No 9 !
 
Dernière édition:

vivbout

XLDnaute Junior
Re : macro ThisWorkbook BeforeClose ne s'active pas !

oui c'est bien ça, ça plante à cet endroit. ce que je ne comprend pas c'est que si je lance "copie_macro" directement des fichiers, ça marche nickel !!

un de ces fichiers pour tester :

c'est quand même très étrange !? :confused::mad:
 

Roland_M

XLDnaute Barbatruc
Re : macro ThisWorkbook BeforeClose ne s'active pas !

re

petite précision, la macro ET la feuille "récap" se situent bien sur les fichiers appelés ?
car le code est censé exécuter une procédure qui est dans les fichiers appelés ainsi que la feuille "récap"
si la feuille "récap" est dans le classeur appelant alors il faut pratiquer autrement !
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 379
Messages
2 087 762
Membres
103 661
dernier inscrit
fcleves