CSV traitement des données

Bonjour,

Je viens demander de l’aide (comme de nombreuses personnes ici )

J’ai créé une macro qui permet d’ouvrir un fichier, filtrer une colonne, après filtre, copier 3 colonnes et refermer le fichier.

Aucun problème, tout fonctionne.

Seule ombre au tableau, le fichier source est en réalité un csv (chose que je ne savais pas lors de l’écriture de la macro), et je n’arrive pas à savoir comment contourner le problème.

J’ai cherché sur le net mais il existe beaucoup de solutions et je ne trouve rien qui fonctionne chez moi.

Pour info, les données sont séparées par des « ; ».

Voici un bout de code (là où le document est ouvert et traité) :

MsgBox "Tu vas importer les données"
Set BD = Application.FileDialog(msoFileDialogFilePicker) 'définit la boîte de dialogue BD
BD.AllowMultiSelect = False 'n'autorise pas le sélection multiple
BD.Show 'affiche la boîte de dialogue
If BD.SelectedItems.Count = 0 Then GoTo 1 'si aucun fichier sélectionné, sort de la procédure
Workbooks.Open BD.SelectedItems(1) 'ouvre le fichier sélectionné
Set CS = ActiveWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets(1) 'définit l'onglet source OS
Set OD2 = CD.Worksheets("BDD") 'définit l'onglet destination OD2 (BDD)

OS.Columns("A:X").Select
Selection.AutoFilter Field:=17, Criteria1:="internet"

OS.Columns(6).Copy OD2.Columns(15)
OS.Columns(8).Copy OD2.Columns(16)
OS.Columns(10).Copy OD2.Columns(17)

CS.Close SaveChanges:=False 'ferme le classeur source (sans enregistrer)

Un grand merci par avance pour votre aide,

Bonne journée,

Loic

Bonjour,

Quel est ton problème exactement ? La macro ne n'exécute pas ? Elle bloque ? à quel moment ? à l'ouverture du fichier ?

Cdlt,

Oups

En fait aucune donnée n'est importée... Rien ne se passe.

Et si je fais un pas à pas, toutes les données sont en colonne A et les infos séparées par des ";"

Merci pour ta réponse,

Bonne journée,

Loic

Personnellement, je suis pas du tout un expert du VBA mais je pense que contourner le problème peut être la solution.

Je te propose donc de, avant que ta macro réalise l'importation des données, d'ouvrir ton fichier .csv et de l'enregistrer en .xls. Pas manuellement tu intègre sa dans ton code.

Je sais pas, peut être que c'est une solution un peu lourde.

Cdlt,

Bonjour

voila une macro import CSV

A tester

Private Sub ChoixFicCsv()
Dim dossier As FileDialog
ChoixChemin = ActiveWorkbook.Path & Application.PathSeparator
   Set dossier = Application.FileDialog(msoFileDialogFilePicker)
      With dossier
         .AllowMultiSelect = False
         .InitialFileName = ChoixChemin
         .Title = "Choix d'un fichier CSV"
         .Filters.Clear
         .Filters.Add "Fichier Csv ", "*.csv*", 1
            If .Show = -1 Then
               Chemin = .SelectedItems(1)
               LireMan Chemin
            End If
      End With
   Set dossier = Nothing
End Sub

Sub LireMan(NomFichier)
Dim Ar() As String
   With Application
      .ScreenUpdating = False
      .EnableEvents = False
      .Calculation = xlManual
   End With
'Rows("1:" & Rows.Count).ClearContents
Sep = ";"
Lig = 1
' -----------------------------------------
On Error Resume Next
   Open NomFichier For Input As #1
        Do While Not EOF(1)
            Line Input #1, Chaine
               Ar = Split(Chaine, Sep)
               Col = 1
                  For x = LBound(Ar) To UBound(Ar)
                     Cells(Lig, Col).Value = CStr(Ar(x))
                     Col = Col + 1
                  Next
            Lig = Lig + 1
        Loop
    Close #1
' -----------------------------------------
   With Application
      .ScreenUpdating = True
      .Calculation = xlCalculationAutomatic
      .EnableEvents = True
      .CutCopyMode = False
      .Goto [A1], True
   End With
End Sub

A+

Maurice

Hello,

Je n'arrive pas à l'intégrer à ma macro

Je ne vois pas exactement où l'insérer...

Merci encore à tous,

Bonne journée,

Loic

a_loic a écrit :

Hello,

Je n'arrive pas à l'intégrer à ma macro

Je ne vois pas exactement où l'insérer...

Merci encore à tous,

Bonne journée,

Loic

MsgBox "Tu vas importer les données"
Set BD = Application.FileDialog(msoFileDialogFilePicker) 'définit la boîte de dialogue BD
BD.AllowMultiSelect = False 'n'autorise pas le sélection multiple
BD.Show 'affiche la boîte de dialogue
If BD.SelectedItems.Count = 0 Then GoTo 1 'si aucun fichier sélectionné, sort de la procédure
Workbooks.Open BD.SelectedItems(1) 'ouvre le fichier sélectionné
Set CS = ActiveWorkbook 'définit le classeur source CS

'ici j'aurais dit
CS.SaveAs Replace(Cs.FullName, ".csv", ".xls")

Set OS = CS.Worksheets(1) 'définit l'onglet source OS
Set OD2 = CD.Worksheets("BDD") 'définit l'onglet destination OD2 (BDD)

OS.Columns("A:X").Select
Selection.AutoFilter Field:=17, Criteria1:="internet"

OS.Columns(6).Copy OD2.Columns(15)
OS.Columns(8).Copy OD2.Columns(16)
OS.Columns(10).Copy OD2.Columns(17)

CS.Close SaveChanges:=False 'ferme le classeur source (sans enregistrer)

Note bien que je suis pas sur de moi !

Cdlt,

Re

Ca ne fonctionne pas... Une autre idée?

J'ai tenté plusieurs solutions et je n'y arrive toujours pas

Merci pour l'aide, encore !

Loic

Et qu'es qui fait que ça fonctionne pas ?

EDIT :

Comme celà ?

 CS.SaveAs Filename:=Replace(Cs.FullName, ".csv", ".xls")

La partie sur le filtre est surlignée.

Et le doc ouvert n'a pas changé, toutes les données sont toujours en colonne A, séparée par des ";"

a_loic a écrit :

La partie sur le filtre est surlignée.

Et le doc ouvert n'a pas changé, toutes les données sont toujours en colonne A, séparée par des ";"

 CS.SaveAs Filename:=Replace(Cs.FullName, ".csv", ".xls")
CS = Activeworkbook

??

Bonjour

hum voila fichier avec la macro import

A+

Maurice

19importcsv.zip (14.68 Ko)

Bonjour,

Je me permets de relancer mon sujet.

Je mets en pièce jointe un fichier d'exemple avec : la base de données (sur laquelle se trouve la macro)

Deux exemples de données (car la base de donnée est remplie par deux extractions : c'est assez clair lors de l'utilisation).

Merci d'avance pour ceux qui voudraient encore m'aider

Bonne journée,

Loic

6bdd.xlsm (46.16 Ko)
4donnes-1.csv (15.99 Ko)
4donnes-2.csv (6.51 Ko)

Bonjour,

Désolé d'insister mais j'ai essayé d'appliquer ma méthode à ton fichier .csv et il se retrouve bien finalement en .xls

J'ai utilisé cette macro :

Sub x()
Dim cs, ncs
cs = ThisWorkbook.FullName
ncs = Replace(cs, ".csv", ".xls")
ThisWorkbook.SaveAs Filename:=ncs
End Sub

Directement dans le fichier .csv mais je suis persuadé que cela peut fonctionner depuis un autre fichier.

Pour réaliser ta macro, utilise des msgbox entre les étapes pour afficher tes variables et les contrôlé et voir ou cela ne fonctionne pas. Puis, je mettrai le nouveau nom du fichier dans une variable, comme dans la macro que je t'ai mis au-dessus.

Je suis désolé mais je n'ai que cette balle dans mon chargeur, mais je suis sur qu'elle peut partir !

Tu me dit.

Cdlt,

Je dois être bête... Je n'y parviens pas.

Ca m'enregistre bien le fichier en xls mais ca enregistre mon fichier base de donnée et pas le csv... (j'ai du mal noter un truc)

De plus, mon nouveau fichier xls ne s'ouvre pas automatiquement, ce qui ne m'arrange pas pour la suite du processus

Encore merci,

Bonne journée,

Loic

Bon je m'avoue vaincu...

C'est assez bizarre car quand j'enregistre le classeur manuellement en .xls, l'importation fonctionne. Mais je crois que je n'arrive pas à redéfinir la variable CS dans ton code ..

If BD.SelectedItems.Count = 0 Then GoTo 1 'si aucun fichier sélectionné, sort de la procédure
Workbooks.Open BD.SelectedItems(1) 'ouvre le fichier sélectionné
Set CS = ActiveWorkbook 'définit le classeur source CS
'Code VH_AE
ncs = Replace(CS.FullName, ".csv", ".xls")
CS.SaveAs Filename:=ncs
CS.Close
Workbooks.Open (ncs)
Set CS = ActiveWorkbook

Peut être que quelqu'un nous éclaira sur le sujet..

:/

Cdlt,

EDIT :

En plus les données se retrouve toutes groupées dans une seule cellule avec les ";" comme tu me l'indiquai... mais pas quand ont enregistre manuellement, là, elle reste bien dans leur colonne ces malicieuses.

Yes ! Merci pour ton aide en tout cas !

Une autre personne qui peut m'aider ? :)

Rechercher des sujets similaires à "csv traitement donnees"