Copier coller

Bonjour à tous,

Dans le cadre de mon activité, j'ai un fichier très lourd que je génère chaque jour grâce à diverse macro. Maintenant pour alléger l'outil de travail, une fois que les macros ont générés les données, j'aimerai trouver la macro qui me permettra de copier coller les valeurs des onglets générés dans un nouveau classeur.

Imaginons :

Onglet 1 : macro qui génère les données.

Onglet 2/3/4/5/6/7/8/... : onglet avec les données générés.

Je voudrai ensuite copier collé tous ces onglets (sauf le 1) dans un classeur nommé X.

Quelqu'un peut il m'aider ?

Autre solution : générer automatiquement par ta macro les onglets dans un nouveau classeur sans macro !

Si cette piste te convient, on peut faire un bout d'essai ...

Ah ca peut être pas mal ca !!

Quel bout de code dois je rajouter à mes macros ?

J'ai en fait répondu à ta question de manière exacte ... maintenant on peut intégrer ton code ici ! ou inversement je te laisse t'inspirer de ce code pour l'insérer dans ton projet.

5dupliquer.xlsm (23.17 Ko)

Le code en test correspond parfaitement à ce que je cherche, cependant quand j'essaie de l'intégrer dans mon fichier, un message d'erreur apparait "un composant ActiveX ne peut pas créer d'objet.".

J'suis débutant donc je comprend pas vraiment ce que ca implique et comment rectifier l'erreur

OK

essaie comme ceci et tiens moi informé

16dupliquer.xlsm (23.03 Ko)

en cas d'échec je t'indiquerai quelle case doit être cochée

éventuellement fais l'inverse : rapatrie tout ton fichier dans celui que j'ai posté si ce dernier fonctionne chez toi !

Voilà la ligne en erreur quand je lance la macro...

Voir PJ le message est le même que le précédent.

capture

enlève ces 2 premières lignes car in fine elles n'apportent rien ! j'ai réussi à me débrouiller autrement...

comme ceci

Option Explicit

Sub dupliquer()

    Dim ws, Fichier, n

    Fichier = ActiveWorkbook.Name

    ' définitions pour fichier cible
    Dim xl, wb2

    ' creation fichier
    Set xl = CreateObject("Excel.Application")
    xl.SheetsInNewWorkbook = 1 ' On défini le nombre d'onglets (ici 1 seul)
    Set wb2 = xl.Workbooks.Add  ' On ajoute un classeur
    'xl.Visible = True

    n = 1
    For Each ws In Worksheets
        If ws.Name <> ActiveSheet.Name Then
            If n = 1 Then
                With wb2.Worksheets(1)
                    .Name = ws.Name
                    ws.Cells.Copy
                    .Paste
                End With
            Else
                With wb2.Sheets.Add
                    .Name = ws.Name
                    ws.Cells.Copy
                    .Paste
                End With
            End If
            n = n + 1
        End If

    Next

    ' sauvegarde du fichier
    wb2.SaveAs (ThisWorkbook.Path & "\" & Mid(Fichier, 1, InStrRev(Fichier, ".") - 1) & " " & Format(Now(), "yyyy-mm-dd") & ".xlsx"), FileFormat:=xlOpenXMLWorkbook
    'xl.SheetsInNewWorkbook = 3 ' On remet la propriété de l'application à 3 (par défaut)
    xl.Quit

    MsgBox "Duplication terminée !"

End Sub

J'ai ré-écris plus proprement le code en générant tout de suite le nombre d'onglets nécessaires.

Option Explicit

Sub dupliquer()

Dim ws, xl, wb, Fichier, n

    Fichier = ActiveWorkbook.Name
    n = Sheets.Count - 1

    ' creation fichier
    Set xl = CreateObject("Excel.Application")
    xl.SheetsInNewWorkbook = n
    Set wb = xl.Workbooks.Add
    'xl.Visible = True

    n = 1
    For Each ws In Worksheets
        If ws.Name <> ActiveSheet.Name Then
            With wb.Worksheets(n)
                .Name = ws.Name
                ws.Cells.Copy
                .Paste
            End With
            n = n + 1
        End If

    Next

    ' sauvegarde du fichier
    wb.SaveAs (ThisWorkbook.Path & "\" & Mid(Fichier, 1, InStrRev(Fichier, ".") - 1) & " " & Format(Now(), "yyyy-mm-dd") & ".xlsx"), FileFormat:=xlOpenXMLWorkbook
    xl.SheetsInNewWorkbook = 1 ' On remet la propriété de l'application à ...
    xl.Quit

    MsgBox "Duplication terminée !"

End Sub

NOTA : je mets à la fin la propriété SheetsInNewWorkbook à 1. Mais par défaut excel met 3, c'est-à-dire 3 onglets lors de la création d'un nouveau fichier excel. Comme je hais les onglets vides, je le mets pour ma part toujours à 1, mais tu peux bien sûr changer.

Plutôt qu'enregistrer y a pas moyen de trouver un moyen d'ouvrir le fichier créer ? Quitte à l'enregistrer à la main, parce que le but c'est de travailler dessus lorsque c'est généré.

ce qui simplifie beaucoup le code ...

Option Explicit
Sub dupliquer()
Dim ws, xl, wb, n

    n = Sheets.Count - 1
    Set xl = CreateObject("Excel.Application")
    xl.SheetsInNewWorkbook = n
    Set wb = xl.Workbooks.Add

    n = 1
    For Each ws In Worksheets
        If ws.Name <> ActiveSheet.Name Then
            With wb.Worksheets(n)
                .Name = ws.Name
                ws.Cells.Copy
                .Paste
            End With
            n = n + 1
        End If
    Next

    xl.Visible = True

End Sub
Rechercher des sujets similaires à "copier coller"