Copier une ligne d'un fichier et la coller dans un autre fichier
Bonjour à tous,
J'essaie de créer un programme pour coller les données d'un classeur A vers un autre (classeur B) sans écraser les données initialement présentes dans le classeur B.
Le but étant de transférer les données tout en conservant celles qui sont déjà présentes. Ce que je voudrais c'est que si la colonne A n'est pas vide alors je copie colle la ligne entière.
Cependant, le programme que j'ai créé ne fonctionne pas je ne vois pas d'où viens l'erreur je cherche à coller les lignes entières. Je n'ai pas de bug mais rien ne se passe lorsque j'exécute le programme
Voici le programme:
Sub importer_donnees_elec()
'nommer les variables
Dim wk_fichiercentral As Workbook
Dim ws_feuil1 As Worksheet
Dim wk_essaielec As Workbook
Dim lstrw_essaielec As Long
Dim lstrw_feuil1 As Long
Dim ligne_coller As Long
'definir les variables
Set wk_fichiercentral = ActiveWorkbook
Set ws_feuil1 = wk_fichiercentral.Worksheets(1)
Set wk_essaielec = Application.Workbooks.Open("C:\Users\doc\OneDrive\Bureau\Cours \excel, macro VBA\Essais_elec.xlsx")
'identifier la dernière ligne remplie
lstrw_essaielec = wk_essaielec.Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row
'identifier la premiere ligne vide
lstrw_feuil1 = ws_feuil1.Range("A" & Rows.Count).End(xlUp).Row + 1
' commencer la boucle sur les lignes du classeur essai elec
For i = 2 To lstrw_essaielec
' identifier si la cellule n'est pas vide
If Not Cells(i, 1) = "" Then
' identifier la derniere ligne colonne A feuille 1 du classseur central
ligne_coller = lstrw_feuil1
'copier coller de la ligne
wk_fichiercentral.Worksheets(1).Rows(ligne_coller) = wk_essaielec.Worksheets(1).Rows(i)
End If
Next
End SubEt voici la capture d'écran qui indique où se trouve l'erreur
Bonjour MCKH et bienvenu, bonjour le forum,
Essaie comme ça :
Sub importer_donnees_elec()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
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)
Dim DEST As Long 'déclare la variable DEST (cellule de DESTination)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Set CD = ThisWorkbook 'définit le classeur destination CD (ThisWorkbook au lieu de ActiveWorkbook)
Set OD = CD.Worksheets(1) 'définit l'onglet destination OD
Set CS = Application.Workbooks.Open("C:\Users\doc\OneDrive\Bureau\Cours \excel, macro VBA\Essais_elec.xlsx") 'définit le classeur source (en l'ouvrant)
Set OS = CS.Worksheets(1) 'définit l'onglet source OS
DL = OS.Cell(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A du classeur source
For I = 2 To DL 'boucle sur toutes les lignes I de 2 à DL
If OS.Cells(I, "A").Value <> "" Then 'condition : si la cellule ligne I colonne A de l'onglet source n'est pas vide
Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
OS.Rows(I).Copy DEST 'copy la ligne I de l'onglet source et la colle dans DEST
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End SubAprès plusieurs essais et en retirant le set devant DEST ce problème est réglé cependant j'ai un nouveau problème qui apparait à la fin au niveau de :
OS.Rows(I).Copy DEST 'copy la ligne I de l'onglet source et la colle dans DEST
Message d'erreur : " La méthode copy de la classe range à échoué" j'ai essayé plusieurs codes mais rien ne fonctionne
Re,
Premier problème, il manque un k à Worksheet...
Ton système de capture d'écran est le pire que tu puisses utiliser car on ne peut pas faire un copier/coller du code et je n'ai pas envie de tout retaper !... Il te suffit d'utiliser les balises </> et d'y copier le code...
Sinon, soit tu déclares la variable DEST comme une variable de type Range et dans ce cas il faut un Set et le code est :
Dim DEST As Range
Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)Soit tu la déclares de type Integer mais tu m'obtiens que le numéro de ligne et dans ce cas le code correct serait :
OS.Rows(I).Copy OD.Cells(DEST, "A")