Copier et traiter donnée CSV avec séparateur ";" dans une feuille XLSX
Bonjour à tous,
Je réalise, ou essai plutôt
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