Copier une partie d'un classeur excel dans 40 dossiers différent

Résolu
patoche49 Messages postés 20 Statut Membre -  
patoche49 Messages postés 20 Statut Membre -
Bonjour,

Bonjour,

J'ai des difficultés pr créer une macro afin de copier coller une zone d'une feuille de calcul sur 40 fichiers différents.
Mon problème vient du fait que chaque fichier destinataire est différent et la macro que j'ai créé fait référence à celui que j'ai pris comme modèle. Comment faire pour changer le nom du fichier à chaque fois ?
Je me suis positionné sur le fichier que je souhaitais modifier pour exécuter la macro mais lorsque je l'exécute il ne trouve pas le fichier et j'ai le message d'erreur ci-dessous en gras, dans la macro.

voici ma macro :
Sub coprcom()
'
' coprcom Macro
'
' Touche de raccourci du clavier: Ctrl+a
'
Range("A8:B34").Select
Selection.Copy
Windows("MARTIN Jean RCOM.xlsx").Activate
Sheets(Array("RCOM ", "06", "07", "08", "09", "10", "11", "12")).Select
Sheets("RCOM ").Activate
Range("A8").Select
ActiveSheet.Paste
Range("C8").Select
ActiveWorkbook.Save
ActiveWindow.Close
End Sub

Merci pour votre aide

3 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Pas de ligne en gras et pas de message d'erreur !!!

    Les explications ne sont pas très claires: Mon problème vient du fait que chaque fichier destinataire est différent et la macro que j'ai créé fait référence à celui que j'ai pris comme modèle
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      SAlut Polux31,

      Pour info, la ligne en gras est consultable ICI
      0
    2. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Salut Franck,

      Merci mais je ne comprends toujours pas ce qu'il veut faire ;0)
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Moi non plus ;-)
      Attendons...
      0
    4. patoche49 Messages postés 20 Statut Membre
       
      bj à vous et merci de vous intéresser à mon cas.
      Effectivement ce n'est pas très clair.
      Je vais essayer de le formuler différemment :
      Afin d'éviter de faire 50 fois un copier coller, je voudrais créer une macro :
      J'ai 3 colonnes dans un fichier A que je veux recopier à l'identique dans 50 fichiers différents, nommés Dupont, Martin, Jean... (50 noms différents).
      la logique que j'ai tenté pour créer la macro (qui n'est peut être pas la bonne...)
      J'ouvre le fichier A
      je fais un copier des 3 colonnes
      je ferme le fichier A
      j'ouvre le fichier Dupont
      je fais un coller des 3 colonnes
      Pour exécuter la macro j'ouvre le fichier Martin et l'exécution se passe bien pour les 3 1er points mais bloque sur l'ouverture du fichier Martin car elle ouvre le fichier Dupont. Normal car c'est celui que j'ai pris comme référence dans la macro. Comment faire pour que le nom change à chaque fois ?
      J'espère avoir été plus clair. Ci-dessous la nouvelle macro que j'ai créé.
      Sub coprcom()
      '
      ' coprcom Macro
      '
      ' Touche de raccourci du clavier: Ctrl+m
      '
      ChDir "S:\C.M. Accueil\Commercial\2014\RCOM TC"
      Workbooks.Open Filename:= _
      "S:\C.M. Accueil\Commercial\2014\RCOM TC\A RCOM.xlsx"
      Range("A8:B34").Select
      Selection.Copy
      ActiveWindow.Close
      Workbooks.Open Filename:= _
      "S:\C.M. Accueil\Commercial\2014\RCOM TC\Dupont RCOM.xlsx"
      Range("A8").Select
      ActiveSheet.PasteSpecial Format:="Texte Unicode", Link:=False, _
      DisplayAsIcon:=False, NoHTMLFormatting:=True
      End Sub
      0
    5. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Où sont les fichiers à mettre à jour ? Sont-ils tous dans le même répertoire ?
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Windows("MARTIN Jean RCOM.xlsx").Activate

    n'est pas un chemin valide!!!!!!!!!!!!
    0
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Il faut bien sûr adapter le chemin d'accès du répertoire, le nom des feuilles, la plage à copier etc ...

    Option Explicit
    
    '*** Macro qui lance le traitement:
    '*** 1 - Création des objets : Workbook, Worksheet et Range (qui contient la plage à copier)
    '*** 2 - Appel de la procédure RecupFichiersXL(Arg())
    '*** 3 - Boucle sur tous les éléments du tableau mTab()
    '***     ° Ouvre le fichier Excel à mettre à jour
    '***     ° Création des objets : Workbook, Worksheet
    '***     ° Copie de la plage
    '***     ° Sauvegarde et ferme le fichier
    '***     ° Ferme les objets et passe à l'élément suivant du tableau
    ''
    Public Sub MaMacro()
    Dim mTab()
    Dim wkOut As Workbook
    Dim ws As Worksheet
    Dim wsOut As Worksheet
    Dim plage As Range
    Dim i As Long
    
        ' Désactive les messages d'alerte
        Application.DisplayAlerts = False
        
        ' Instanciation de l'objet Worksheet (Feuille qui contient les données à copier)
        Set ws = ThisWorkbook.Worksheets("Feuil1")  ' /!\ A adapter
        
        ' Instanciation de l'objet Range (Plage des cellules à copier)
        Set plage = ws.Range("A2:C20") ' /!\ A adapter
        
        'appel de la procédure qui remplit le tableau
        Call RecupFichiersXL(mTab())
        
        ' i = indice du tableau
        For i = LBound(mTab()) To UBound(mTab())
            ' Instanciation de l'objet Workbook (Fichier de derstination pour la copie)
            Set wkOut = Workbooks.Open(mTab(i))
            ' Instanciation de l'objet Worksheet (Feuille destination)
            Set wsOut = wkOut.Worksheets("Feuil1")  ' /!\ A adapter
            ' Copie de la plage
            plage.Copy Destination:=wsOut.Range("A2")  ' /!\ A adapter
            ' Sauvegarde du fichier
            wkOut.Save
            ' Fermeture du fichier
            wkOut.Close
            ' Libération des objets et de la mémoire
            Set wsOut = Nothing
            Set wkOut = Nothing
            ' On passe à l'élément suivant du tableau
        Next i
        
        ' Active les messages d'alerte
        Application.DisplayAlerts = True
        'Libération de l'objet et de la mémoire
        Set ws = Nothing
    
        MsgBox "Traitement terminé !!!"
    
    End Sub
    
    '*** Procédure qui parcourt un répertoire
    '*** Elle recoit en paramètre un tableau
    '*** Elle remplit le tableau passé en référence
    '*** avec le chemin complet d'accès des fichiers xlsx
    ''
    Private Sub RecupFichiersXL(ByRef mTab())
        Dim Chemin As String
        Dim Fichier As String
        Dim i As Long
     
        'Définit le répertoire contenant les fichiers
        '/!\ adapter le chemin complet du répertoire
        Chemin = "D:\CCM\"
     
        'Boucle sur tous les fichiers xlsx du répertoire.
        Fichier = Dir(Chemin & "*.xlsx")
        Do While Len(Fichier) > 0
            ReDim Preserve mTab(i)
            mTab(i) = Chemin & Fichier
            i = i + 1
            Fichier = Dir()
        Loop
    End Sub 


    «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
    Nicolas Boileau
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Merci à Franck pour le complément d'infos ;0)
      0
    2. patoche49 Messages postés 20 Statut Membre
       
      je vais tester. Cela me parait un peu compliqué pour un débutant comme moi. Encore Merci pour ton aide.
      0