Microsoft 365 Macro entre 2 classeurs

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 !

Nounours4173

XLDnaute Nouveau
Bonjour,

Voici mon problème, je veux utiliser une macro pour copier des données d'un classeur à un autre.
Tout fonctionne correctement avec la macro suivante

ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1
ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=2
ActiveSheet.Outline.ShowLevels RowLevels:=1
ActiveSheet.Outline.ShowLevels RowLevels:=2
Windows("Bus Bilan 2025.xlsx").Activate
Range("A2:E10").Select
Selection.ListObject.ListRows.Add (1)
Selection.ListObject.ListRows.Add (2)
Selection.ListObject.ListRows.Add (3)
Selection.ListObject.ListRows.Add (4)
Selection.ListObject.ListRows.Add (5)
Selection.ListObject.ListRows.Add (6)
Selection.ListObject.ListRows.Add (7)
Selection.ListObject.ListRows.Add (8)
Selection.ListObject.ListRows.Add (9)
Windows("BUS.xlsm").Activate
Range("L22😛30").Select
Selection.Copy
Windows("Bus Bilan 2025.xlsx").Activate
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BUS.xlsm").Activate


Mon problème est que la macro est lié au nom du classeur "BUS" et que je voudrais pouvoir l'utiliser pour des classeurs quotidiens qui s'appellent "BUS 15 juin 2025", BUS 16 juin 2025", "BUS 17juin 2025"
J'ai créé ces fichiers quotidiens en dupliquant mon fichier de base "BUS"
La macro ne fonctionne donc plus du fait des noms différents pour chaque fichier quotidien

J'imagine qu'il y a une solution mais je ne la connais pas.
Est ce que quelqu'un peut m'aider ?

Merci par avance pour vos réponses
 
Solution
Bon, je pense avoir cerné votre demande .
J'ai gardé tous les boutons mais la macro est dans le classeur Bilan

1749655028566.png
1749654941370.png
Bonjour à tous,
Si j'ai à peu près compris, classeur à tester, Sub Test à exécuter .
Je m'étonne cependant que votre macro ne précise pas les feuilles des Classeurs.
Ne les connaissant pas, J'ai laissé tel quel ...
 

Pièces jointes

Bonjour @Nounours4173

Pour commencer, votre code est mal construit 😞

Ensuite, ne serait-il pas possible d'avoir le fichier + un "bus*" pour l'optimiser ?

A+
Bonjour wDog66,

Désolé si mon code est mal construit, mais je me débrouille sur excel pour mes besoins mais je ne connais pas le language VBA
Cette macro à été créée par excel directement.
Merci d'avoir pris le temps de me répondre malgré tout

Je fais suivre mon fichier pour que ce soit plus clair

Cdt
 
Bonjour à tous,
Si j'ai à peu près compris, classeur à tester, Sub Test à exécuter .
Je m'étonne cependant que votre macro ne précise pas les feuilles des Classeurs.
Ne les connaissant pas, J'ai laissé tel quel ...
Bonjour fanch55,

Merci pour l'essai.
Je viens d'essayer dans mon fichier mais ca bloque, je ne comprend pas le language VBA donc je ne sais pas ce qui bloque.

Ci joint mon fichier anonymisé

Les 3 macro impressions me servent à imprimer en pdf avec plus ou moins de colonnes et de lignes en fonction du besoin.
La macro "envois donnée bilan " me permet de copier les données présentes en L22 : P30 dans un autre classeur excel.
J'espère que ce sera plus lisible et compréhensible

Cdt
 

Pièces jointes

La macro n'est pas présente dans le classeur fourni ...
Je suppose qu'elle a été remplacée par le code proposé ?
Bonjour @fanch55

Oups désolé, effectivement j'avais essayé celle proposé t je n'ai pas fait attention au moment où j'ai envoyé le fichier
voici le fichier avec la macro telle que je l'avais créée
 

Pièces jointes

Testez le classeur joint ( je l'ai zippé avec un fichier cible exemple )
Je viens de tester

En fait je veux copier les données à partir d'un fichier qui s'appelle "Bus - 07 07 2025.xlsm" vers un fichier qui s'appelle "Bus Bilan 2025.xlsx"
Je crois que vous avez compris l'inverse.

J'ai essayé de modifier l'info dans le code (cf code ci dessous - ligne 6) mais je n'ai pas du faire comme il faut.
Suite à ma modif lorsque je lance la macro il faut que je sélectionne le fichier dans lequel je veux copier, ça ne trouve pas le fichier automatiquement.


VB:
Sub Envois_Données_Bilan()
Dim Target_Actif As Boolean
Dim Target_Name  As String

    ' On détermine le fichier cible
    Target_Name = "G:\Mon Drive\Ete 2025\Bus\Bus Bilan 2025.xlsx"
    
    ' On regarde si la cible est déjà active
    Dim Wn As Variant
    For Each Wn In Windows
        If Wn.Caption = Target_Name Then
            Target_Actif = True
            Exit For
        End If
    Next
    
    ' la cible n'est pas active,
    ' si elle existe dans le dossier de ce classeur, on l'ouvre
    If Not Target_Actif Then
        Dim Fso:  Set Fso = CreateObject("Scripting.FileSystemObject")
        Dim Fname As String: Fname = ThisWorkbook.Path & "\" & Target_Name
        If Fso.FileExists(Fname) Then
            Workbooks.Open Fname
            Target_Actif = True
        End If
    End If
    
    ' la cible n'est toujours pas active,
    ' on demande la cible à ouvrir
    If Not Target_Actif Then
        With Application.FileDialog(msoFileDialogOpen)
            .AllowMultiSelect = False
            .InitialFileName = Fname
            If .Show Then
                Workbooks.Open .SelectedItems(1)
                Target_Name = ActiveWindow.Caption
                Target_Actif = True
            End If
        End With
    End If
    
   ' La cible est active, on peut copier
    If Target_Actif Then
        Dim I As Integer
        Dim Plage As Range: Set Plage = ThisWorkbook.ActiveSheet.Range("L22:P30")
        With ThisWorkbook.ActiveSheet.Outline
            .ShowLevels RowLevels:=0, ColumnLevels:=1
            .ShowLevels RowLevels:=0, ColumnLevels:=2
            .ShowLevels RowLevels:=1
            .ShowLevels RowLevels:=2
        End With
        With Windows(Target_Name).Activate
            For I = 1 To Plage.Rows.Count
                Range("A2").ListObject.ListRows.Add I
            Next
            Plage.Copy
            Range("A2").PasteSpecial Paste:=xlPasteValues, _
                Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End With
        ThisWorkbook.Activate
    End If
    
    
End Sub



Enfin je profites de vos compétences si vous avez une solution, sans que ça ne vous demande un gros travail..., de ne copier que les lignes où il y a des valeurs... Seulement la première ligne sur l'image ci dessous.

1749635558316.png


Merci d'avance pour le temps que vous prenez pour moi.
Cdt
 
- 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

Discussions similaires

Réponses
4
Affichages
664
Réponses
4
Affichages
847
Retour