Copier des tableaux d'autres fichiers Excel de hauteurs différentes

Bonjour,

Je souhaite copier sur le "Classeur.xlsm" en A1 les tableaux du "ClasseurA.xlsm" situés sur la feuil2 et en AA1 les tableaux du "ClasseurB.xlsm" situés sur la feuil2.

Dans un autre fichier, je me sers de cette formule (Sheets("XXXX").Cells(33, 4).Value = Sheets("YYYY").Cells(3, 15).Value)) pour copier coller des valeurs de tableaux.

Pouvez-vous m'aider à adapter cette formule à mon cas afin de comprendre le fonctionnement.

Merci d'avance !

5classeur.xlsm (11.73 Ko)
5classeura.xlsm (14.12 Ko)
5classeurb.xlsm (9.81 Ko)

Bonsoir Tisajeff, bonsoir le forum,

Code à placer dans le classeur destination classeur.xlms. Si tous les fichiers se trouvent dans le même dossier que ce classeur destination, pas besoin de les ouvrir. Ouvre juste classeur.xlsm et lance le code. Sinon ouvre les trois classeurs puis lance le code (ou donne-nous le chemin d'accès de chaque classeur et on modifiera le code en fonction).

Le code :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)

Set CD = ThisWorkbook 'définit la classeur destination CD
CA = CD.Path & "\" 'définit le chemin d'accès CA
Set OD = CD.Worksheets(1) 'définit l'onglet destination OD

'classeura
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CS = Workbooks("classeura.xlsm") 'définit le classeur source CS (génère une erreur si ce classeur n'est pas ouvert)
If Err > 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
    Set CS = Workbooks.Open(CA & "classeura.xlsm") 'définit le classeur source en l'ouvrant
End If 'fin de la condition
On Error GoTo 0 'fin de la gestion des erreurs
Set OS = CS.Worksheets("Feuil2") 'définit l'onglet source OS
OS.UsedRange.Copy OD.Range("A1") 'copie la plage éditée de l'onglet source et la colle dans A1 de l'onglet destinatoin
CS.Close False 'ferme le classeur source sans enregistrer

'classeurb
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CS = Workbooks("classeurb.xlsm") 'définit le classeur source CS (génère une erreur si ce classeur n'est pas ouvert)
If Err > 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
    Set CS = Workbooks.Open(CA & "classeurb.xlsm") 'définit le classeur source en l'ouvrant
End If 'fin de la condition
On Error GoTo 0 'fin de la gestion des erreurs
Set OS = CS.Worksheets("Feuil2") 'définit l'onglet source OS
OS.UsedRange.Copy OD.Range("AA1") 'copie la plage éditée de l'onglet source et la colle dans AA1 de l'onglet destinatoin
CS.Close False 'ferme le classeur source sans enregistrer
End Sub

Bonjour ThauThème,

Merci pour votre travail, c'est effectivement ce vba que je cherchais (je vais maintenant m'y attarder pour le comprendre). Je le mets dans ThisWorkbook pour qu'il s'exécute à chaque ouverture, ça évitera les erreurs : Private Sub Workbook_Open()

Cependant, vous avez mis le doigt sur quelques uns des problèmes que j'ai rencontré :

- J'ai dupliqué CA, CS & OS en CAA, CSA & CBA et CAB, CSB & OSB pour mieux m'y retrouver même si je ne sais pas si c'est forcément utile pour les trois.

- J'ai ajouté un clear pour être sûr qu'il n'y ait pas de problèmes sur l'actualisation des tableaux au cas où les tableaux sont déplacés

- Sur la feuille où se trouve mes tableaux que je souhaite garder, il y a d'autres tableaux que je ne souhaite pas conserver mais je suis capable de connaitre les colonnes que je veux copier (J'ai rectifié un bout de code et cela fonctionne)

- Les fichiers Excel ne se trouvent pas dans le même dossier (Bien que ça marche quand je les ouvre avant d'ouvrir le "classeur.xlsm" je préfèrerais ne pas avoir à faire cette manip car je risque d'en avoir une bonne dizaine, j'imagine qu'il me faut modifier CAA et CAB dans cette ligne : CAA = CD.Path & "\" 'définit le chemin d'accès CAA), c'est ok j'ai réussi. Mon fichier fonctionne pour faire l'essai vous pouvez mettre le "classeur.xlsm" dans un nouveau dossier et les deux classeurs sur le bureau

- Je souhaiterais enlever le fait que le code copie les feuilles des fichiers excel ouverts en parallèle car si j'ai ouvert un fichier que je ne veux pas copier, je vais avoir des tableaux en trop


Ci-joint mes fichiers actuels

Merci pour votre aide jusqu'à présent mais je vous sollicite encore un peu. Je vous tiens au courant si je trouve les réponses à mes deux problèmes.


6classeur.xlsm (18.60 Ko)
5classeura.xlsm (13.80 Ko)
3classeurb.xlsm (10.28 Ko)

Re,

Je ne comprends pas, le code ne traitera, quels que soient les fichiers ouverts, que classeura.xlsm et classeurb.xlsm...

Tu as parfaitement adapté le code mais je l'ai un peu remis en ordre :

Private Sub Workbook_Open()

Dim CD As Workbook 'déclare la variable CD (Classeur Destination)

Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)

Dim CAA As String 'déclare la variable CAA (Chemin d'Accès classeura)

Dim CSA As Workbook 'déclare la variable CSA (Classeur Source classeura)

Dim OSA As Worksheet 'déclare la variable OSA (Onglet Source classeura)

Dim CAB As String 'déclare la variable CAB (Chemin d'Accès classeurb)

Dim CSB As Workbook 'déclare la variable CSB (Classeur Source classeurb)

Dim OSB As Worksheet 'déclare la variable OSB (Onglet Source classeurb)

Set CD = ThisWorkbook 'définit le classeur destination CD

Set OD = CD.Worksheets("Feuil1") 'définit l'onglet destination OD

OD.Cells.Clear 'clear intégralement la feuille (texte, taille du texte, couleur, fusion des onglets)

'classeura

CAA = "C:\Users\dao1\Desktop\" 'définit le chemin d'accès CAA

On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)

Set CSA = Workbooks("classeura.xlsm") 'définit le classeur source CSA (génère une erreur si ce classeur n'est pas ouvert)

If Err > 0 Then 'condition : si une erreur a été générée

Err.Clear 'supprime l'erreur

Set CSA = Workbooks.Open(CAA & "classeura.xlsm") 'définit le classeur source en l'ouvrant

End If 'fin de la condition

On Error GoTo 0 'fin de la gestion des erreurs

Set OSA = CSA.Worksheets("Feuil2") 'définit l'onglet source OSA

OSA.Range("F1:Q100").Copy OD.Range("B1") 'copie la plage éditée de l'onglet source et la colle dans B1 de l'onglet destination

CSA.Close False 'ferme le classeur source sans enregistrer

'classeurb

CAB = "C:\Users\dao1\Desktop\" 'définit le chemin d'accès CAB

On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)

Set CSB = Workbooks("classeurb.xlsm") 'définit le classeur source CSB (génère une erreur si ce classeur n'est pas ouvert)

If Err > 0 Then 'condition : si une erreur a été générée

Err.Clear 'supprime l'erreur

Set CSB = Workbooks.Open(CAB & "classeurb.xlsm") 'définit le classeur source en l'ouvrant

End If 'fin de la condition

On Error GoTo 0 'fin de la gestion des erreurs

Set OSB = CSB.Worksheets("Feuil2") 'définit l'onglet source OSB

OSB.Range("F1:Q100").Copy OD.Range("P1") 'copie la plage éditée de l'onglet source et la colle dans P1 de l'onglet destination

CSB.Close False 'ferme le classeur source sans enregistrer

End Sub

Ha d'accord, je pensais que le code prenait en compte tous les fichiers ouverts en plus des fichiers ciblés (classeura, classeurb, ...)

J'ai du mal à voir ce que vous avez modifié et dans quel but ? Rapidité dans la macro ? Répétitivité des déclarations ?

Merci !

Rechercher des sujets similaires à "copier tableaux fichiers hauteurs differentes"