Macro pour ouvrir un .csv

Bonjour,

je suis en train de créer une application Excel qui va permettre en deux clics, d'ouvrir un doc .csv, sans avoir à passer par "Données" > "Fichier Texte". A l'aide de l'enregistreur de macro, j'ai pu extraire le code qui se cache derrière cette manipulation pour l'adapter à mon besoin.

Aussi, voici l'explication :

A l'ouverture du fichier "Ouverture des fichiers csv", un userform apparaît, permettant de choisir le fichier cvs à ouvrir. En cliquant ensemble sur le bouton "lancer l'ouverture", le classeur s'ouvre normalement (comme le fait la procédure "manuelle").. Par contre, j'ai une erreur sur une ligne et je vois pas où est le soucis :

Voici le code de mon bouton "lancer l'ouverture"

' Bouton ouvrir fichier
Private Sub Ouvrir_Click()
Workbooks.Open Filename:=Me.Chemin
With ActiveSheet.QueryTables.Add(Connection:= _
"Text;Me.chemin", Destination:=Range("$A$1"))
        .CommandType = 0
        .Name = "Classeur1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

'Workbooks.Open Filename:=Me.Chemin, local:=True

End Sub

Le bug a lieu sur la ligne CommanType = 0

Merci de vos éclairages futurs !

bonjour,

Hum... Je n'ai pas de réponse à ta question sous la forme ou elle est posée,

Moi j'utilise la macro suivante :

Sub Import(myName$)
            Workbooks.OpenText Filename:=myName, Origin:=xlWindows, _
                StartRow:=1, DataType:=xlDelimited, Semicolon:=True
End Sub

Et la clef pour l'ouvrir :

Sub Sésame()
Import "AAA.csv"
End Sub

YAPUKA changer avec le nom du fichier qui t'intéresse...

A+


bonjour,

Hum... Je n'ai pas de réponse à ta question sous la forme ou elle est posée,

Moi j'utilise la macro suivante :

Sub Import(myName$)
            Workbooks.OpenText Filename:=myName, Origin:=xlWindows, _
                StartRow:=1, DataType:=xlDelimited, Semicolon:=True
End Sub

Et la clef pour l'ouvrir :

Sub Sésame()
Import "AAA.csv"
End Sub

YAPUKA changer avec le nom du fichier qui t'intéresse...

A+

Salut ! Et merci, ça fonctionne hyper bien !

J'ai une question... Je vais avoir des CSV avec des séparations virgule et d'autres en point-virgule. J'aimerai intégrer cette "double casquette" alors j'ai essayé deux choses :

la première, où monsieur VBA était pas content

Private Sub Ouvrir_Click()
Workbooks.OpenText Filename:=Me.Chemin, Origin:=xlWindows, _
                StartRow:=1, DataType:=xlDelimited, (Semicolon:=True or Comma:=True)
End Sub

Et la seconde, qui ne me bloque pas, mais quand j'ouvre un fichier avec séparateurs ;, et bien rien

Private Sub Ouvrir_Click()
Workbooks.OpenText Filename:=Me.Chemin, Origin:=xlWindows, _
                StartRow:=1, DataType:=xlDelimited, Semicolon:=True, Comma:=True
End Sub

Cette dernière formulation à un fonctionnement parfois erratique.

Je ne sais pas à quoi cela tient peut-être à la version Office ? Chez moi elle ouvre correctement avec le séparateur virgule.

Par contre avec le séparateur ";" le comportement est parfois incompréhensible : Le fichier s'ouvre correctement mais ne "parse" pas : Tout est sur une colonne et il faut alors convertir.

Peut-être cela tient-il à quelque spécification cachée de ".csv". Il y a d'ailleurs parfois de nombreuses interrogations à propos de ces csv...

Chez moi (W8 et 2010 Pro) je n'ai aucune difficulté avec cette macro :

Sub test()
myName = "aaaa.csv"
            Workbooks.OpenText Filename:=myName, Origin:=xlWindows, _
                StartRow[code]

:=1, DataType:=xlDelimited, Comma:=True, Semicolon:=True

ActiveCell.CurrentRegion.TextToColumns Semicolon:=True 'facultatif (au cas ou... le "parsage" serait difficile !)

End sub()[/code]

[EDIT] D'où ils sortent tes .csv ? On peut en avoir un bout ? (2 lignes de chaque suffisent...)

j'ai aussi quelques doutes avec ton "Me.chemin" : Il sort d'où aussi celui là ?

C'est comme ton "et bien rien" il ne me dit rien non plus...

Merci d'être plus précis parce que là, d'un seul j'ai mas tension qui remonte...

A+

Bonsoir,

pour ouvrir des fichier avec un séparateur ; .. cela fonctionne si votre "Windows" est paramétré en français (séparateur point-virgule) ..

et vous rajoutez l'option local:=true à votre commande d'ouverture afin qu'Excel utilise les paramètre régionaux locaux..

Bonjour, pierre.jy

rajoutez l'option local:=true

Ouiiii... Bien vu !

A+

Bonjour,

Et merci de vous intéresser à mon problème.

Concernant les diverses questions de Galopin :

  • les CSV sortent du CRM interne de l'entreprise dans laquelle je suis. Impossible d'en extraire ne serait-ce qu'une partie.
  • le me.chemin : c'est un bout de code qui me permet d'aller chercher le chemin complet du fichier csv que j'ai ouvert (ex : W:\User\aaaa.csv).. J'avais trouvé ce truc je ne sais plus où et ça avait l'air de bien fonctionné...

Concernant le code suivant, où rien ne se passait (les séparateurs étaient encore visibles), aujourd'hui les fichier séparateur virgule s'ouvrent correctement mais pas les séparateurs ;

Private Sub Ouvrir_Click()
Workbooks.OpenText Filename:=Me.Chemin, Origin:=xlWindows, _
                StartRow:=1, DataType:=xlDelimited, Semicolon:=True, Comma:=True
End Sub

En ajoutant le "local := True", c'est l'inverse qui se produit ! A savoir, les séparateurs point-virgule s'ouvrent correctement, contrairement aux séparateurs virgule...

En ajoutant le code

ActiveCell.CurrentRegion.TextToColumns Semicolon:=True

, la séparation se fait en partie : seule la première variable est correctement séparée.

bonjour,

C'est plus un problème de Conf Window qu'un problème Excel car chez moi ça fonctionne maintenant impec...

Essaie d'inverser et de mettre

ActiveCell.CurrentRegion.TextToColumns Comma:=True

A+

Re,

Voici mon code final, qui fonctionne (Ouiiiiiiii !!!!) :

Private Sub Ouvrir_Click()
Workbooks.OpenText Filename:=Me.Chemin, Origin:=xlWindows, _
                StartRow:=1, DataType:=xlDelimited, Semicolon:=True, Comma:=True

ActiveCell.CurrentRegion.TextToColumns Comma:=True
End Sub

L'ouverture se fait correctement, que le séparateur soit un virgule ou un point virgule... Mais, j'ai un bug à la fin de la macro lorsqu'un CSV séparateur virgule s'ouvre : (voir PJ)

bug

Mettre un :

Application.DisplayAlerts = False

au début.

A+

Salut,

Le problème persiste toujours

ci-dessous, le code :

' Bouton ouvrir fichier
Private Sub Ouvrir_Click()
Application.DisplayAlerts = False
Workbooks.OpenText Filename:=Me.Chemin, Origin:=xlWindows, _
                StartRow:=1, DataType:=xlDelimited, Semicolon:=True, Comma:=True

ActiveCell.CurrentRegion.TextToColumns Comma:=True
End Sub

Bonjour,

Je me permet de faire un double-post... Je tourne encore en rond sur cette erreur que je ne n'arrive pas contourner avec le displayalerts=false

Voici mon code

' Bouton ouvrir fichier
Private Sub Ouvrir_Click()
Application.DisplayAlerts = False
If (Me.Chemin = "Faux" Or Me.Chemin = "Chemin + nom + extension du fichier ouvert") Then   'Si aucun fichier n'est sélectionné alors
MsgBox "Choisissez un fichier !"                                    'Message d'erreur précisant qu'il faut choisir un fichier
Else                                                                'Si tout ok, on lance la conversion du fichier csv
Workbooks.OpenText Filename:=Me.Chemin, Origin:=xlWindows, _
                StartRow:=1, DataType:=xlDelimited, Semicolon:=True, Comma:=True

ActiveCell.CurrentRegion.TextToColumns Comma:=True

Ouverture.Hide
Workbooks("Outil_ouverture_V3.xlsm").Save
'Workbooks("Outil_ouverture_V3.xlsm").Close
End If
End Sub

Le problème survient à la ligne "ActiveCell.CurrentRegion.TextToColumns Comma:=True". Un message d'erreur m'indique qu'Excel ne peut pas convertir plus d'une colonne à la fois. Je précise que le blocage a lieu quand j'ouvre un fichier avec séparateur virgule... Quand j'ouvre un fichier séparateur point-virgule, tout va bien !

Bonjour,

il faut que tu te décide ... ton séparateur c'est une virgule ou un point-virgule ? c'est utopique d'utiliser simultanément les deux ..

Bonjour,

En aucun cas je n'ai demandé une macro qui gènère la conversion d'un CSV en point-virgule et virgule en même temps. Je sais que ça n'existe pas. Mon but était de gérer dans une même macro, l'ouverture de CSV avec virgule OU avec point-virgule. Mais du coup, le problème semble résolu :

J'ai remplacé

ActiveCell.CurrentRegion.TextToColumns Comma:=True

Par

ActiveCell.CurrentRegion.Columns(1).TextToColumns Comma:=True

Bonsoir,

Pixelle a écrit :

Bonjour,

En aucun cas je n'ai demandé une macro qui gènère la conversion d'un CSV en point-virgule et virgule en même temps. Je sais que ça n'existe pas. Mon but était de gérer dans une même macro, l'ouverture de CSV avec virgule OU avec point-virgule. Mais du coup, le problème semble résolu :

tu ne l'as pas demandé mais c'est ce que tu essai de faire ...

ton code ne fonctionne toujours pas dans le cas ou le séparateur est une virgule et que ton fichier contient des point virgule dans un premier temps lors de l'ouverture de ton fichier tu vas séparer en colonne en utilisant le point-virgule ...

ensuite avec ton text-tocolumns tu éclate ta première colonne par rapport aux virgules .. .en écrasant les colonnes suivantes (celles que tu as précéda-ment séparé avec tes ; ...) ...

Je répète il faut que tu choisisse ton séparateur virgule ou point-virgule ...

si tu ne veux pas faire explicitement la sélection .. tu peu commencer par lire la première ligne et déterminer le caractère "virgule" ou "point-virgule" le plus utilisé dans cette ligne...

ensuite tu utilise ce caractère comme séparateur...

Rechercher des sujets similaires à "macro ouvrir csv"