Méthode la plus efficiente pour copier du contenu d'un classeur à un autre

Bonjour,

Je n'arrive pas à trouver de réponse sur le net , je me permet donc de poster ici.

J'aimerais savoir si il est plus efficace de faire une boucle pour ouvrir plusieurs classeurs source pour copier leur contenu dans un autre classeur puis de fermer les classeurs source ensuite, ou si l'ébauche de la méthode ci-dessous demande moins de ressource au PC :

Code pour copier le Range B3:D10 du classeur Classeur1.xlsx fermé dans un classeur Classeur2.xlsm ouvert :

Sub ImporterDonneesSansOuvrir()

Dim Chemin As String, Fichier As String

Chemin = "D:\Desktop\"
Fichier = "Classeur1.xlsx"

ThisWorkbook.Names.Add "plage", _
            RefersTo:="='" & Chemin & "[" & Fichier & "]Feuil1'!$B$3:$D$10"
    With Sheets("Feuil1")
        .[B3:D10] = "=plage"
        .[B3:D10].Copy
        Workbooks("Classeur2.xlsm").Sheets("Feuil1").Range("F3").PasteSpecial xlPasteValues
        .[B3:D10].Clear
    End With

Sheets.Add(After:=Sheets("Feuil1")).Name = "FeuilDest"
Workbooks("Classeur2.xlsm").Sheets("Feuil1").Range("F3:H10").Cut Workbooks("Classeur2.xlsm").Sheets("FeuilDest").Range("F3:H10")

Application.CutCopyMode = False

Application.DisplayAlerts = False
  Sheets("Feuil1").Delete
Application.DisplayAlerts = True

End Sub

A terme mon projet vise à boucler sur 3 à 40 fichiers (format identique, données différentes) pour récupérer leurs contenus sur 1 seul classeur.

Si vous avez des pistes, n'hésitez pas

Merci d'avance

Bonjour,

Je crois que cette méthode serait plus rapide que d'ouvrir des fichiers à tour de rôle ...

Les formules (Feuil1'!$B$3:$D$10) n'auraient pas besoin d'être recréées pour chaque fichier ...

J'aurais tendance à copier les valeurs des formules (Feuil1'!$B$3:$D$10) directement dans la feuille "FeuilDest" en gérant le décalage pour coller les données des différents fichiers ...

ric

Bonjour,

Merci pour votre réponse, je vais mettre ça en œuvre pour essayer de peaufiner le tout

En revanche je n'arrive pas à faire autrement que copier B3:D10 de la source sur le range B3:D10 d'une feuille de mon classeur destination

Si je copie en B4:D11 j'obtiens #VALEURS sur la ligne 11, et il ne m'affiche pas de valeurs en ligne 4

Bonjour,

Je voulais dire que les formules dans la "Feuil1" restent là en permanence > il y a que le champ nommé pointant sur les autres fichiers à refaire ...

Dans l'idée :

Sub ImporterDonneesSansOuvrir()
Dim Chemin As String, Fichier As String
Dim X As Integer, Y As Integer

Chemin = "D:\Desktop\"
   Y = 3
   For X = 1 To 2    ' une boucle quelconque pour les fichiers source
      Fichier = "Classeur" & X & ".xlsx"

      ActiveWorkbook.Names.Add "plage", RefersTo:="='" & Chemin & "[" & Fichier & "]Feuil1'!$B$3:$D$10"
      Sheets("Feuil1").[B3:D10].Copy

      '  à adapter ces 2 lignes selon l'endroit où placer les données des différents fichiers
      Sheets("FeuilDest").Range("F" & Y).PasteSpecial xlPasteValues
      Y = Y + 9

   Next X
   Application.CutCopyMode = False
End Sub

ric

Rechercher des sujets similaires à "methode efficiente copier contenu classeur"