Copier/Coller entre fichier en VBA
Bonjour à tous,
Je voudrais copier des données d'un fichier A vers un fichier B. Pour cela, je supprime des colonnes dans l'onglet du fichier A puis copie les données vers la destination. (exemple ci-joint)
Le code que j'ai pour le moment est très simple et ne me permet pas:
- de selectionner mon fichier source depuis l'execution de la macro (je dois l'ouvrir avant d'executer la macro).
- De plus, depuis mon classeur source, cela ne selectionne que le "range" que j'ai défini. Si il y a plus de données, je dois modifier cela dans le code ==> ex: si il y a 12 lignes: Range("A2:E12").Select mais il y en a 14, je dois revenir dans le code et faire Range("A2:E14").Select...
==> mon nb de ligne change tout le temps
Je veux aussi m'assurer que ça colle les données dans le bon onglet du fichier de destination car il y a plusieurs onglets.
Sub Macro1()
Windows("Classeur1.xlsx").Activate
Range("C:C,E:E").Select
Range("E1").Activate
Selection.Delete Shift:=xlToLeft
Range("A2:E12").Select
Selection.Copy
Windows("Classeur2.xlsx").Activate
Range("A2").Select
ActiveSheet.Paste
End Sub
Qq peut-il m'aider à améliorer mon code?
Merci
Lucas
Bonjour Lucas,
Voici une possibilité
Sub ImportDonnées()
Dim sFic As String
Dim Wbk As Workbook, ShtS As Worksheet
Dim dLigS As Long ' Dernière ligne du fichier source
' Demander le choix du fichier
sFic = Application.GetOpenFilename(FileFilter:="Fichier Excel (*.xlsx), *.xlsx", Title:="CHOIX du FICHIER")
If sFic = "Faux" Then Exit Sub
' Ouvrir le fichier sélectionné
Set Wbk = Workbooks.Open(sFic)
' Définir la feuille à traiter du classeur ouvert
Set ShtS = Wbk.Sheets(1)
' Dernière ligne remplie de la feuille
dLigS = ShtS.Range("A" & Rows.Count).End(xlUp).Row
' Avec ce classeur
With ThisWorkbook.Sheets("onglet 1")
' copier/Coller les données
ShtS.Range("A2:E" & dLigS).Copy Destination:=.Range("A2")
End With
' Ferme le classeru ouvert
Wbk.Close SaveChanges:=False
' Effacer les variables objet
Set ShtS = Nothing: Set Wbk = Nothing
End SubA+
Bonjour
Comme ceci
Sub Macro1()
With Workbooks("Classeur1.xlsx").ActiveSheet
.Range("C:C,E:E").Delete
.Range("A2:E" & .Range("E" & Rows.Count).End(xlUp).Row).Copy ThisWorkbook.Sheets("onglet 1").Range("A2")
End With
End SubLe code doit être placé dans le classeur2 et le classeur 1 doit être ouvert
Crdlt
EDIT : oups BrunoM45, je n'avais pas vu ton post.... plus complet d'ailleurs
Bonjour @BrunoM45, bonjour @Dan,
Merci pour vos réponse.
Le code de Bruno fonctionne très bien mais ne prend pas en compre la suppression de colonnes dans le classeur d'origine...
Comment pourrais-je rajouter cette condition?
Aussi, connaissez-vous le code pour déplacer une colonne? (ex. je veux que la colonne C se décalle et se mette en colonne A mais sans remplacer les données de la colonne A initial)
Merci
Lucas
Re,
Désolé, je n'ai pas fait gaffe à cette étape, voici le code modifié
Sub ImportDonnées()
Dim sFic As String
Dim Wbk As Workbook, ShtS As Worksheet
Dim dLigS As Long ' Dernière ligne du fichier source
' Demander le choix du fichier
sFic = Application.GetOpenFilename(FileFilter:="Fichier Excel (*.xlsx), *.xlsx", Title:="CHOIX du FICHIER")
If sFic = "Faux" Then Exit Sub
' Ouvrir le fichier sélectionné
Set Wbk = Workbooks.Open(sFic)
' Définir la feuille à traiter du classeur ouvert
Set ShtS = Wbk.Sheets(1)
' # Modification 15/12
' Supprimer les colonnes du fichiers source
Shts.Range("C:C,E:E").Delete Shift:=xlToLeft
'
' Dernière ligne remplie de la feuille
dLigS = ShtS.Range("A" & Rows.Count).End(xlUp).Row
' Avec ce classeur
With ThisWorkbook.Sheets("onglet 1")
' copier/Coller les données
ShtS.Range("A2:E" & dLigS).Copy Destination:=.Range("A2")
End With
' Ferme le classeru ouvert
Wbk.Close SaveChanges:=False
' Effacer les variables objet
Set ShtS = Nothing: Set Wbk = Nothing
End SubA+