Copier des données depuis une feuille Excel

Bonjour,

Malgré les nombreux sujets déjà abordés sur le forum je n'ai pas trouvé de solution à mon problème donc je m'adresse directement à vous !

Je réalise un programme VBA qui :

  • ouvre un fichier Excel (fichier en csv contenant une seule feuille) selon une adresse renseignée en case N3 de mon fichier de calcul
  • Copie la colonne C de ce fichier
  • Colle cette colonne en E de mon fichier de calcul initial

J'arrive à faire le premier point, seulement après, je n'arrive pas à copier la colonne qui m'intéresse.

Le fichier que je viens d'ouvrir ne reste pas actif et mon programme se borne à copier la colonne C de mon fichier initial dans la colonne E.

Mon fichier csv n'est pas en lecture seule. J'ai fait le test avec ce fichier converti auparavant en excel et cela ne fonctionne pas non plus.

Voici mon code :

Sub Import()

Dim appxl As Excel.Application

Set appxl = CreateObject("Excel.application")

Dim sourceFileName As String

'ouvrir le fichier avec les données

With appxl

.Workbooks.Open (Range("N3").Value)

sourceFileName = appxl.ActiveWorkbook.Name

.Visible = False

End With

'convertir le fichier csv en excel

Columns("A:A").Select

Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _

TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _

Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _

:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _

Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=True

Columns("C:C").Select

Selection.Copy

Windows("Fichiercalcul.xlsm").Activate

Columns("E:E").Select

ActiveSheet.Paste

appxl.Workbooks(sourceFileName).Close

Set appxl = Nothing

End Sub

J'ai essayé d'ajouter Windows(sourceFileName).Activate avant de copier la colonne C mais sans succès, on me dit que l'indice n'est pas défini.

Auriez-vous une idée ?

Je vous remercie par avance

Bonjour

le mieux pour que l'on puisse t'aider est de fournir un fichier test csv sans données confidentielles dedans...

cependant je peux te proposer un code que j'utilise pour ouvrir un fichier csv :

'ouverture du fichier csv
Workbooks.OpenText Filename:=Range("N3").Value, DataType:=1, Semicolon:=True, local:=True
'copie de la colonne C vers la colonne E du fichier ou est exécute le code
ActiveWorkbook.Sheets(1).Range("C:C").Copy ThisWorkbook.activesheet.[E1]
'fermeture du fichier csv
ActiveWorkbook.Close False

Fred

Bonjour et

Ce serait plus simple avec un fichier simplifié.

Bonjour Fred

Bonjour Steelson...

on en est toujours a demander un fichier de test..... comme trop souvent....

Fred

Bonjour,

Pour commenter ton code je dirai que le seul moment ou tu travailles sur ton csv c'est entre With et End With...

Dès lors que tu sors de ton With tu ne travailles plus sur ActiveWorkbook mais sur ThisWorkbook...

With appxl
.Workbooks.Open (Range("N3").Value)
sourceFileName = appxl.ActiveWorkbook.Name
.Visible = False
End With 'et on quitte cette instance...
'convertir le fichier csv en excel 
Columns("A:A").Select

A+

Bonjour Fred2406,

Pas de soucis je mets en pj un fichier sur lequel je travaillais.

Pas facile d'avoir les bons réflexes quand on débute

Je confirme donc que le code que j'ai fournit fonctionne avec ton fichier csv...

ci joint un fichier test en retour ou il faut adapter évidemment le chemin du fichier csv dans la cellule N3

Fred

2solis.xlsm (15.81 Ko)

Effectivement cela fonctionne !

Et cela simplifie grandement le code, merci beaucoup !

Je suis impressionnée par la réactivité que vous avez eu sur le forum

Dans une perspective d'amélioration : saurais-tu me dire pourquoi mon code ne fonctionnait pas ?

Re

Regarde la réponse de Galopin... qui t'explique ce qu'il se passe....

Bonjour,

Pour commenter ton code je dirai que le seul moment ou tu travailles sur ton csv c'est entre With et End With...

Dès lors que tu sors de ton With tu ne travailles plus sur ActiveWorkbook mais sur ThisWorkbook...

Set appxl = CreateObject("Excel.application")
...
With appxl
.Workbooks.Open (Range("N3").Value)
sourceFileName = appxl.ActiveWorkbook.Name
.Visible = False
End With 'et on quitte cette instance...
'convertir le fichier csv en excel 
Columns("A:A").Select

A+

tu as dans ton code fait une nouvelle instance excel... alors que moi je reste dans la même instance excel...

Fred

Ok je vois...

Merci encore pour votre aide !

Rechercher des sujets similaires à "copier donnees feuille"