Copie de valeur d'un Excel à un autre
Bonjour,
Je suis débutante sur VBA et j'aimerai copier les valeurs de case Excel d'un fichier 1 au case excel d'un fichier 2. Pour cela, je me suis aidée de ce code que j'ai pu trouvé sur internet :
Option Explicit
Private Sub Workbook_Open()
Call ReadDataFromCloseFile
End Sub
Sub ReadDataFromCloseFile()
On Error GoTo ErrHandler
Application.ScreenUpdating = False
Dim src As Workbook
' OPEN THE SOURCE EXCEL WORKBOOK IN "READ ONLY MODE".
Set src = Workbooks.Open("C:\Q-SALES.xlsx", True, True)
' GET THE TOTAL ROWS FROM THE SOURCE WORKBOOK.
Dim iTotalRows As Integer
iTotalRows = src.Worksheets("sheet1").Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row).Rows.Count
' COPY DATA FROM SOURCE (CLOSE WORKGROUP) TO THE DESTINATION WORKBOOK.
Dim iCnt As Integer ' COUNTER.
For iCnt = 1 To iTotalRows
Worksheets("Sheet1").Range("B" & iCnt).Formula =
src.Worksheets("Sheet1").Range("B" & iCnt).Formula
Next iCnt
' CLOSE THE SOURCE FILE.
src.Close False ' FALSE - DON'T SAVE THE SOURCE FILE.
Set src = Nothing
ErrHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Pour pouvoir l'adapter à mon problème, il faudrait que je comprends chacunes des lignes du code, mais cela m'est compliqué après plusieurs heures à essayer de les comprendre.
Option Explicit
Private Sub Workbook_Open()
Call ReadDataFromCloseFile
End Sub
Sub ReadDataFromCloseFile()
On Error GoTo ErrHandler
Application.ScreenUpdating = False
Dim src As Workbook
' OPEN THE SOURCE EXCEL WORKBOOK IN "READ ONLY MODE".
Set src = Workbooks.Open("C:\Q-SALES.xlsx", True, True)
J'ai compris en gros que cela permettait de faire les manipulations sans devoir avoir le fichier à copier ouvert. Et la dernière ligne permet d'indiquer à Excel le lieu du fichier.
Puis j'ai également compris que : Worksheets("Sheet1").Range("B" & iCnt).Formula =
src.Worksheets("Sheet1").Range("B" & iCnt).Formula permet de remplir la feuille 1 (sheet1) à partir de la colonne B et d'y copier dessus la colonne D de la feuille1 du fichier qu'on a indiqué le chemin plus haut.
Après le reste je n'arrive pas vraiment à comprendre.. Pouvez-vous m'aider s'il vous plait ?
Je vous remercie d'avance.
Bonne journée
Salut
Voici le code documenté
Option Explicit 'oblige la déclaration des variables
Private Sub Workbook_Open()
Call ReadDataFromCloseFile 'appelle la macro ReadDataFromCloseFile à l'ouverture du fichier
End Sub
Sub ReadDataFromCloseFile()
On Error GoTo ErrHandler 'gestion des erreurs
Application.ScreenUpdating = False 'fige l'écran excel
Dim src As Workbook 'déclaration de la variable src en classeur
' OPEN THE SOURCE EXCEL WORKBOOK IN "READ ONLY MODE".
Set src = Workbooks.Open("C:\Q-SALES.xlsx", True, True) 'ouverture du fichier source en lecture seule
' GET THE TOTAL ROWS FROM THE SOURCE WORKBOOK.
Dim iTotalRows As Integer 'déclaration de variable
iTotalRows = src.Worksheets("sheet1").Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row).Rows.Count 'nombre total de ligne de l'onglet 1 en colonne B
' COPY DATA FROM SOURCE (CLOSE WORKGROUP) TO THE DESTINATION WORKBOOK.
Dim iCnt As Integer ' COUNTER. 'déclaration de variable
For iCnt = 1 To iTotalRows 'boucle parcourant les lignes de l'onglet 1 de 1 au nbre de ligne total
'copie pour chaque ligne la formule en colonne B du classeur source vers le classeur cible
Worksheets("Sheet1").Range("B" & iCnt).Formula = src.Worksheets("Sheet1").Range("B" & iCnt).Formula
Next iCnt
' CLOSE THE SOURCE FILE.
src.Close False ' FALSE - DON'T SAVE THE SOURCE FILE. 'ferme le classeur source sans le sauvegarder
Set src = Nothing 'libère la variable
ErrHandler: 'gestion des erreurs
Application.EnableEvents = True 'active les événements
Application.ScreenUpdating = True 'défige l'écran
End SubJers