Copier et traiter donnée CSV avec séparateur ";" dans une feuille XLSX

Bonjour à tous,

Je réalise, ou essai plutôt , un fichier Excel qui pourrait aller chercher un fichier csv (différent nom chaque semaine), le convertir en tableau et le coller dans une nouvelle feuille d'un classeur xlsx.

J'ai déjà réaliser ce type d'opération par le biais d'un bouton+macro avec un fichier xlsx vers xlsx qui ne pose pas de problème.

Mais avec le CVS, les séparateur doivent poser problème et la macro plante.

Les personnes qui vont utiliser le fichier n'ont pas beaucoup de notion en excel et ne l'utiliseront uniquement pour copier le graphique du tableau croisé dynamique qui en résultera.

J'ai regardé du côté de Power Query et des requêtes, mais je n'arrive qu'à ouvrir un fichier bien précis.

Donc ma question, avant d'entamer les recherches de code est la suivante :

- Est-il possible par le biais d'un bouton, d'ouvrir un explorateur de fichier qui permettra de sélectionner un fichier .csv et de copier son contenue dans une nouvelle feuille d'un fichier xlsx.

Ou alors, par une autre méthode, je suis preneur aussi. L'idée est d'être le plus simple possible pour l'utilisateur qui ira juste chercher ses fichier dans son explorateur.

Merci pour la réponse .

Bonjour Nico, bonjour le forum,

Essaie ce code à placer dans le classeur destination qui, par conséquent, ne sera plus .xlsx mais .xlsm :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim BD As FileDialog 'déclare la variable BD (Boîte de Dialogue)
Dim CS As workbbok 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)

Set CD = ThisWorkbook 'définit le classeur destination
CD.Worksheets.Add After:=Sheets(Sheets.Count) 'ajoute un onglet vierge en dernière position
Set OD = CD.ActiveSheet 'définit l'onglet destination
Set BD = Application.FileDialog(msoFileDialogFilePicker) 'définit la boîte de dialogue BD
BD.AllowMultiSelect = False 'n'accepte qu'un seul fichier
BD.Filters.Add "Fichiers CSV", "*.csv" 'définit le filtre (uniquement les fichier CSV)
BD.Show 'affiche la boîte de dialogue BD
If BD.SelectedItems.Count > 0 Then Workbooks.Open (BD.SelectedItems(1)) 'si un fichier est sélectionné, ouvre le fichier
Set CS = ActiveWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets(1) 'définit l'onglet source OS
OS.Cells.Copy OD.Range("A1") 'copie toutes les cellules de l'onglet source et les colle dans A1 de l'onglet destination OD
End Sub

Merci beaucoup pour l'aide.

En étant chiant, c'est possible d'indiquer le nom de la feuille qui reçoit la donné et de fermer le fichier csv a la fin de l'import ?

Merci

Re,

Mais... Évidemment bien dur :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim BD As FileDialog 'déclare la variable BD (Boîte de Dialogue)
Dim CS As workbbok 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)

Set CD = ThisWorkbook 'définit le classeur destination
CD.Worksheets.Add After:=Sheets(Sheets.Count) 'ajoute un onglet vierge en dernière position
CD.ActiveSheet.Name = "TOTO" 'définit le nom de l'onglet (tu adapteras)
Set OD = CD.ActiveSheet 'définit l'onglet destination
Set BD = Application.FileDialog(msoFileDialogFilePicker) 'définit la boîte de dialogue BD
BD.AllowMultiSelect = False 'n'accepte qu'un seul fichier
BD.Filters.Add "Fichiers CSV", "*.csv" 'définit le filtre (uniquement les fichier CSV)
BD.Show 'affiche la boîte de dialogue BD
If BD.SelectedItems.Count > 0 Then Workbooks.Open (BD.SelectedItems(1)) 'si un fichier est sélectionné, ouvre le fichier
Set CS = ActiveWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets(1) 'définit l'onglet source OS
OS.Cells.Copy OD.Range("A1") 'copie toutes les cellules de l'onglet source et les colle dans A1 de l'onglet destination OD
CD.Save 'enregistre le classeur destination
CS.Close 'ferme le classeur source
End Sub

Ou, si l'onglet existe déjà :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim BD As FileDialog 'déclare la variable BD (Boîte de Dialogue)
Dim CS As workbbok 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)

Set CD = ThisWorkbook 'définit le classeur destination
set OD = CD.Worksheets("TOTO")'définit l'onglet destination OD
Set BD = Application.FileDialog(msoFileDialogFilePicker) 'définit la boîte de dialogue BD
BD.AllowMultiSelect = False 'n'accepte qu'un seul fichier
BD.Filters.Add "Fichiers CSV", "*.csv" 'définit le filtre (uniquement les fichier CSV)
BD.Show 'affiche la boîte de dialogue BD
If BD.SelectedItems.Count > 0 Then Workbooks.Open (BD.SelectedItems(1)) 'si un fichier est sélectionné, ouvre le fichier
Set CS = ActiveWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets(1) 'définit l'onglet source OS
OS.Cells.Copy OD.Range("A1") 'copie toutes les cellules de l'onglet source et les colle dans A1 de l'onglet destination OD
CD.Save 'enregistre le classeur destination
CS.Close 'ferme le classeur source
End Sub

Merci beaucoup pour l'aide et la rapidité !

Je vais essayer d'appliquer cela !

encore merci

Rechercher des sujets similaires à "copier traiter donnee csv separateur feuille xlsx"