Microsoft 365 importer des lignes d'un fichier excel à un autre fichier excel

yesyes18

XLDnaute Nouveau
Bonjour,

j'ai un onglet dans un fichier excel A à partir du quel je veux importer des données à partit de la ligne 3 dans un fichier excel B.
et j'ai un fichier C qui a la même structure que le A juste les données sont différentes (ex: nom ; prénom..) et je veux pouvoir importer les données à partir de la ligne 3 dans le fichier B juste en dessous de mon premier import venant du fichier A.

attention ; le nombre de ligne peut être différent mais les colonne sont les mêmes, et juste une précision j'ai déjà l’entête avec les intitulé dans mon onglet dans le fichier B.

merci d'avance
 
Solution
Re,

Pourquoi as-tu remplacé 1 par 2 dans Cells(3, 2) ? Cela signifie que tu ignores la colonne A puisque tu pars de de la cellule Cells(3, 2) en ligne 3, colonne 2 (= B). J'ai donc adapté tous le code pour ignorer la colonne A...


Je m'étais planté, le code est à placer impérativement dans le fichier B qui, par conséquent, s'appellera B.xlsm puisqu'il contiendra une macro. C'est pour cela qu'on spécifie le classeur B par ThisWorkbook.
Que les fichiers A et C soient ouverts ou non, cette nouvelle macro fonctionnera :

VB:
Sub Macro1()
Dim CA As Workbook 'déclare la variable CA (Classeur A)
Dim OA As Worksheet 'déclare...

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour OuiOui, bonjour le forum,

Un code à adapter à placer dans le classeur C :
VB:
Sub Macro1()
Dim CA As Workbook
Dim OA As Worksheet
Dim CB As Workbook
Dim OB As Worksheet
Dim CC As Workbook
Dim OC As Worksheet
Dim DLA As Long
Dim DC As Integer
Dim DLB As Long
Dim DLC As Long
Dim DEST As Range

Set CA = Workbooks("FICHIER A.xlsx")
Set OA = CA.Worksheets(1)
Set CB = ThisWorkbook
Set OB = CB.Worksheets(1)
Set CC = Workbooks("FICHIER C.xlsx")
Set CA = CA.Worksheets(1)
DLA = OA.Cells(Application.Rows.Count, "A").End(xlUp).Row
DLC = OC.Cells(Application.Rows.Count, "A").End(xlUp).Row
DC = OA.Cells(3, Application.Columns.Count).End(xlToLeft).Column
Set DEST = OB.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
OA.Range(OA.Cells(3, 1), OA.Cells(DLA, DC)).Copy DEST
Set DEST = OB.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
OC.Range(OC.Cells(3, 1), OA.Cells(DLC, DC)).Copy DEST
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Comme tu n'as rien daigné préciser, pour un code adapté il nous faudrait :
1. chemin d'accès complet de chaque fichier
2. Nom complet (avec extension) de chaque fichier
3. Nom des onglets des trois fichiers.

Il est étrange que tu demandes une macro si tu n'y connais rien en VBA ?!...
 

yesyes18

XLDnaute Nouveau
parce que au boulot on m'a demandé de faire une Macro pour ca .

Sub Macro1()
Dim CA As Workbook
Dim OA As Worksheet
Dim CB As Workbook
Dim OB As Worksheet
Dim CC As Workbook
Dim OC As Worksheet
Dim DLA As Long
Dim DC As Integer
Dim DLB As Long
Dim DLC As Long
Dim DEST As Range

Set CA = Workbooks("C:\Users\Utilisateur\Desktop\test\A.xlsx")
Set OA = CA.Worksheets(Sheet1)
Set CB = Workbooks("C:\Users\Utilisateur\Desktop\test\B.xlsx")
Set OB = CB.Worksheets(Sheet1)
Set CC = Workbooks("C:\Users\Utilisateur\Desktop\test\C.xlsx")
Set OC = CC.Worksheets(Sheet1)
DLA = OA.Cells(Application.Rows.Count, "A").End(xlUp).Row
DLC = OC.Cells(Application.Rows.Count, "A").End(xlUp).Row
DC = OA.Cells(3, Application.Columns.Count).End(xlToLeft).Column
Set DEST = OB.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
OA.Range(OA.Cells(3, 2), OA.Cells(DLA, DC)).Copy DEST
Set DEST = OB.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
OC.Range(OC.Cells(3, 2), OA.Cells(DLC, DC)).Copy DEST
End Sub

j'ai mis les chemin et les nom des onglets

parc contre j'ai un message d'erreur "indice n'appartient pas à la selection"

et j'ai remplace
Set CA = CA.Worksheets(1)
dans ton code par ;Set CC = Workbooks("C:\Users\Utilisateur\Desktop\test\C.xlsx")

merci d'avance
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Pourquoi as-tu remplacé 1 par 2 dans Cells(3, 2) ? Cela signifie que tu ignores la colonne A puisque tu pars de de la cellule Cells(3, 2) en ligne 3, colonne 2 (= B). J'ai donc adapté tous le code pour ignorer la colonne A...


Je m'étais planté, le code est à placer impérativement dans le fichier B qui, par conséquent, s'appellera B.xlsm puisqu'il contiendra une macro. C'est pour cela qu'on spécifie le classeur B par ThisWorkbook.
Que les fichiers A et C soient ouverts ou non, cette nouvelle macro fonctionnera :

VB:
Sub Macro1()
Dim CA As Workbook 'déclare la variable CA (Classeur A)
Dim OA As Worksheet 'déclare la variable OA (Onglet A)
Dim CB As Workbook 'déclare la variable CB (Classeur B)
Dim OB As Worksheet 'déclare la variable OB (Onglet B)
Dim CC As Workbook 'déclare la variable CC (Classeur C)
Dim OC As Worksheet 'déclare la variable OC (Onglet C)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim DLA As Long 'déclare la variable DLA (Dernière Ligne onglet A)
Dim DC As Integer 'déclare la variable DC (Dernière Colonne)
Dim DLC As Long 'déclare la variable DLC (Dernière Ligne onglet C)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

CH = "C:\Users\Utilisateur\Desktop\test\" 'définit le chemin d'accès CH
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CA = Workbooks("A.xlsx") 'définit le classeur A (génère une erreur si le 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 CA = Workbooks.Open(CH & "A.xlsx") 'définit la classeur A en l'ouvrant
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set OA = CA.Worksheets("Sheet1") 'définit l'onglet OA

On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CC = Workbooks("C.xlsx") 'définit le classeur C (génère une erreur si le 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 CC = Workbooks.Open(CH & "C.xlsx") 'définit la classeur C en l'ouvrant
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set OC = CC.Worksheets("Sheet1") 'définit l'onglet OC

Set CB = ThisWorkbook 'définit la classeur CB
Set OB = CB.Worksheets("Sheet1") 'définit l'onglet OB

DLA = OA.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DLA de la colonne B de l'onglet OA
DLC = OC.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DLC de la colonne B de l'onglet OC
DC = OA.Cells(3, Application.Columns.Count).End(xlToLeft).Column 'définit la dernière colonne éditée DC de la ligne 3 de l'onglet OA
Set DEST = OB.Cells(Application.Rows.Count, "B").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST (première cellule vide de la colonne B de l'onglet OB)
OA.Range(OA.Cells(3, "B"), OA.Cells(DLA, DC)).Copy DEST 'copie la plage de la cellule B3 à la cellule ligne DLA, colonne DC de l'ojnglet OA et la colle dans DEST
Set DEST = OB.Cells(Application.Rows.Count, "B").End(xlUp).Offset(1, 0) 'redéfinit la cellule de destination DEST (première cellule vide de la colonne B de l'onglet OB)
OC.Range(OC.Cells(3, "B"), OA.Cells(DLC, DC)).Copy DEST 'copie la plage de la cellule B3 à la cellule ligne DLC, colonne DC de l'ojnglet OC et la colle dans DEST
End Sub
 
Dernière édition:

yesyes18

XLDnaute Nouveau
Re,

Pourquoi as-tu remplacé 1 par 2 dans Cells(3, 2) ? Cela signifie que tu ignores la colonne A puisque tu pars de de la cellule Cells(3, 2) en ligne 3, colonne 2 (= B). J'ai donc adapté tous le code pour ignorer la colonne A...


Je m'étais planté, le code est à placer impérativement dans le fichier B qui, par conséquent, s'appellera B.xlsm puisqu'il contiendra une macro. C'est pour cela qu'on spécifie le classeur B par ThisWorkbook.
Que les fichiers A et C soient ouverts ou non, cette nouvelle macro fonctionnera :

VB:
Sub Macro1()
Dim CA As Workbook 'déclare la variable CA (Classeur A)
Dim OA As Worksheet 'déclare la variable OA (Onglet A)
Dim CB As Workbook 'déclare la variable CA (Classeur B)
Dim OB As Worksheet 'déclare la variable OA (Onglet B)
Dim CC As Workbook 'déclare la variable CA (Classeur C)
Dim OC As Worksheet 'déclare la variable OA (Onglet C)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim DLA As Long 'déclare la variable DLA (Dernière Ligne onglet A)
Dim DC As Integer 'déclare la variable DC (Dernière Colonne)
Dim DLC As Long 'déclare la variable DLA (Dernière Ligne onglet C)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

CH = "C:\Users\Utilisateur\Desktop\test\" 'définit le chemin d'accès CH
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CA = Workbooks("A.xlsx") 'définit le classeur A (génère une erreur si le 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 CA = Workbooks.Open(CH & "A.xlsx") 'définit la classeur A en l'ouvrant
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set OA = CA.Worksheets("Sheet1") 'définit l'onglet OA

On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CC = Workbooks("C.xlsx") 'définit le classeur C (génère une erreur si le 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 CC = Workbooks.Open(CH & "C.xlsx") 'définit la classeur C en l'ouvrant
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set OC = CC.Worksheets("Sheet1") 'définit l'onglet OC

Set CB = ThisWorkbook 'définit la classeur B
Set OB = CB.Worksheets("Sheet1") 'd;éfinit l'onglet B

DLA = OA.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DLA de la colonne B de l'onglet OA
DLC = OC.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DLC de la colonne B de l'onglet OC
DC = OA.Cells(3, Application.Columns.Count).End(xlToLeft).Column 'définit la dernière colonne éditée DC de la ligne 3 de l'onglet OA
Set DEST = OB.Cells(Application.Rows.Count, "B").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST (première cellule vide de la colonne B de l'onglet OB)
OA.Range(OA.Cells(3, "B"), OA.Cells(DLA, DC)).Copy DEST 'copie la plage de la cellule B3 à la cellule ligne DLA, colonne DC de l'ojnglet OA et la colle dans DEST
Set DEST = OB.Cells(Application.Rows.Count, "B").End(xlUp).Offset(1, 0) 'redéfinit la cellule de destination DEST (première cellule vide de la colonne B de l'onglet OB)
OC.Range(OC.Cells(3, "B"), OA.Cells(DLC, DC)).Copy DEST 'copie la plage de la cellule B3 à la cellule ligne DLC, colonne DC de l'ojnglet OC et la colle dans DEST
End Sub
merci beaucoup cela fonctionne
 

Discussions similaires

Réponses
9
Affichages
346

Statistiques des forums

Discussions
311 720
Messages
2 081 913
Membres
101 837
dernier inscrit
Ugo