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
12classeur1.xlsx (9.53 Ko)
13classeur2.xlsm (13.78 Ko)

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 Sub

A+

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 Sub

Le 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 Sub

A+

Rechercher des sujets similaires à "copier coller entre fichier vba"