Copie respective des données d'un classeur dans un autre

Bonjour à tous,

Je me permet de vous présenter mon souci.

Je suis complètement nouvelle sur VBA. Au travail je dois trouver une solution pour copier le contenu de feuilles d'un classeur 1, les une après les autres, et coller ce contenu dans les feuilles d'un classeur 2.

Ne sachant pas faire de boucles j'ai utilisé l'enregistreur de macro.

Auriez vous idée de comment rendre ce code moins répétitif?

Workbooks.Open Filename:= _

"lien classeur source"

Workbooks.Open Filename:= _

"lien classeur cible"

Windows("source.xls").Activate

Sheets("feuille1").Select

Cells.Select

Application.CutCopyMode = False

Selection.Copy

Windows("cible.xls").Activate

Sheets("feuille1").Select

Cells.Select

ActiveSheet.Paste

Windows("source.xls").Activate

Sheets("feuille2").Select

Cells.Select

Application.CutCopyMode = False

Selection.Copy

Windows("cible.xls").Activate

Sheets("feuille2").Select

Cells.Select

ActiveSheet.Paste

Windows("source.xls").Activate

Sheets("feuille3").Select

Cells.Select

Application.CutCopyMode = False

Selection.Copy

Windows("cible.xls").Activate

Sheets("feuille3").Select

Cells.Select

Range("A4").Activate

ActiveSheet.Paste

etc

jusqu'à faire toutes les feuilles du classeur

je vous remercie d'ores et déjà pour votre attention

Public Sub copierValeurs(ByVal classeur1 As String, ByVal nomFeuille1 As String, ByVal classeur2 As String, ByVal nomFeuille2 As String)
Workbooks(classeur1).Activate
Workbooks(classeur1).Worksheets(nomFeuille1).Select
Workbooks(classeur1).Worksheets(nomFeuille1).Cells.Select
Selection.Copy

Workbooks(classeur2).Activate
Workbooks(classeur2).Worksheets(nomFeuille2).Select
ActiveSheet.Paste
End Sub

Public Sub test()
Call copierValeurs("Classeur1", "Feuil1", "Classeur2", "Feuil2")
End Sub

Si ce code te convient, tu 'nas qu'à adapter la procédure "test" pour qu'elle te convienne =) (ie copier la ligne Call .... et l'adapter

EDIT :

Call copierValeurs("source.xls", "feuille1", "cible.xls", "feuille1")
Call copierValeurs("source.xls", "feuille2", "cible.xls", "feuille2")
Call copierValeurs("source.xls", "feuille3", "cible.xls", "feuille3")

OU

Dim i as Integer

For i = 1 to 25
   Call copierValeurs("source.xls", "feuille"&i, "cible.xls", "feuille"&i)
next i

Bonjour,

Pour rationnaliser et optimiser un code, la première chose est d'en expurger tout ce qui relève de la reproduction de la procédure manuelle par l'enregistreur, soit à faire disparaître les Select, Selection, et autre Activate, sans oublier les CutCopuMode = False et autres inutilités dont VBA gagne à se passer...

La seconde est d'éviter de copier-coller quand cela ne s'impose pas...

Mais au cas particulier (en l'état des informations fournies), copier la totalité d'un classeur dans un autre, cela laisse rêveur !

Pourquoi ne pas : ouvrir le classeur source, l'enregistrer (SaveAs) sous le nom du classeur cible. Et le même résultat est atteint en 2 lignes de code.

Cordialement.

Bonjour,

Merci beaucoup pour vos réponses!

@ d3d9x je vais tester ta solution au plus vite! merci

J'ai oublié de vous préciser que mon fichier "cible" contient une feuille en plus dite de "restitution", dont les données changent en fonction des autres onglets ( et donc des données importées du fichier source)

Arrivez vous à me comprendre? j'ai encore du mal à m'exprimer sur le sujet

cordialement

Mon

Dans ce cas :

  • ouverture classeur source
  • ouverture classeur 'restitution'
  • import feuille 'restitution dans classeur source
  • enregistrement classeur source sous nom cible

4 lignes (5 en refermant 'restitution')

Bonjour,

Merci encore messieurs pour avoir répondu à mes questions.

Désolée, j'ai mis volontairement en standby mon sujet, car étant novice je met du temps à appliquer et à tester vos conseils.

Je vais opter pour la nouvelle solution qui va simplifier mon cas:

  • ouverture classeur source
  • ouverture classeur 'restitution'
  • import feuille 'restitution dans classeur source
  • enregistrement classeur source sous nom cible

Mais quand je copie/colle la feuille de restitution du classeur cible dans le classeur source, les formules de la feuille ne sont pas figées et sont toujours liées au classeur "cible", cela donne ceci:

=SOMME.SI(BDD_DECOMPTE;D4;'[cible.xls]0-Décompte Contrat'!G:G)

De plus BDD_DECOMPTE est un nom de plage, mes noms de plages définis sont eux aussi liés au classeur cible. Devrai je les recréer? ou y a t'il la possibilité de les exporter?

encore merci pour votre attention

Bonjour,

Faire d'abord une copie dans le classeur, avant le première feuille, faire un copier-coller valeurs pour éliminer les formules, puis déplacer la feuille vers un nouveau classeur.

Depuis le temps, je n'ai plus en tête la configuration !

Il y a 3 classeur je crois, le classeur source, le classeur cible (Restitution) et le classeur qui contient la macro.

Cela devrait pouvoir donner quelque chose comme :

Sub DéplacerFeuille()
    Dim WbSce As Workbook, WsExp As Worksheet
    Workbooks.Open chemin & NomClasseurSource
    Set WbSce = ActiveWorkbook
    With WbSce
        .Worksheets("NomFeuilleàExporter").Copy before:=.Worksheets(1)
    End With
    Set WsExp = ActiveSheet
    With WsExp.UsedRange
        .Copy
        .PasteSpecial xlPasteValues
    End With
    Workbooks.Open chemin & "Restitution.xlsx"
    With ActiveWorkbook
        WsExp.Move after:=.Worksheets(.Worksheets.Count)
        .Close True
    End With
    WbSce.SaveAs chemin & NomCible
    WbSce.Close
End Sub

Cordialement.

Merci!

je ne savais pas qu'on pouvait copier uniquement les valeurs!

Malheureusement je dois garder les formules (les valeurs dans la feuille doivent changer en fonction du classeur dans lequel la feuille est déplaçée), cela doit être dynamique.

Je continue à travailler sur ce que tu m'a donné, je comprend de plus en plus rdi2:

A cemoment là, on copie d'abord la feuille dans le classeur cible, puis on copie le contenu de la feuille d'origine sur la feuille copiée.

Ce qui suppose que les formules soient recopiables et fonctionneront dans le classeur cible.

Rechercher des sujets similaires à "copie respective donnees classeur"