Ouvrir un fichier CSV via une macro : UNE SOLUTION

SebG

XLDnaute Nouveau
Salut le forum,

Lors de l'ouverture en direct, dans Excel, d'un fichier CSV, il y a une reconnaissance automatique du fichier et les champs se trouvent correctements distribués dans les colonnes.

Si on enregistre une macro en faisant la manip, quand on la rejoue, le résultat n'est pas le même et toutes les données sont dans la premiére colonne.:mad:

Vu la bibliographie internet sur le sujet, nombreux sont ceux qui se "cognent" au problème. La solution de renommer le fichier en txt ne me plaisait pas vraiment mais je l'ai quand même utilisée, car c'était la plus efficace

A force de chercher et d'essayer, il se trouve que j'ai trouvé (par pur hasard ) en changeant un false en true
une combinaison qui fonctionne :)

Tout à l'air d'être dans "local:=true" :confused:
Je vous fait partager ma "trouvaille" parce que depuis le temps que je cherche et vu le nombre de post ici et ailleurs et des solutions qui ne marchaient pas (pour moi) ou que je trouvait lourdes, j'ai envie de faire plaisir à tout le monde :p et de contribuer à cet EXCELLENT forum.

Code:
Workbooks.OpenText Filename:=NomFic, DataType:=1, Semicolon:=True, local:=True
+ en PJ un zip avec les fichiers de démo (excel + csv)
 

Pièces jointes

  • démo cvs vers XL.zip
    8.4 KB · Affichages: 3 221

SebG

XLDnaute Nouveau
Re : Ouvrir un fichier CSV via une macro : UNE SOLUTION

Depuis mon premier post, j'ai poursuivi les essais sur des fichiers joints à d'autres posts concernant ce sujet afin de blinder la validation de la solution(j'sais pas j'suis clair là...).

Certains fichier CSV utilisent un ";" comme séparateur, d'autres utilisent une "," et il faut s'adapter à chacun des cas.

si le séparateur est ";" => il faut utiliser :
Code:
Workbooks.OpenText Filename:=NomFic, DataType:=1, [b]Semicolon[/b]:=True, local:=[b]True[/b]

si le séparateur est "," => il faut utiliser :
Code:
Workbooks.OpenText Filename:=NomFic, DataType:=1, [b]comma[/b]:=True, local:=[b]False[/b]

A la lecture de certains posts, j'en déduit qu'il doit y avoir une localisation du type de séparateur, c'est pourquoi il doit falloir jouer avec local.
 

kiki29

XLDnaute Barbatruc
Re : Ouvrir un fichier CSV via une macro : UNE SOLUTION

Soir Bon
Depuis XL 2002, l'export en CSV via VBA prend par défaut pour séparateur une ","
sauf si on le fait à la main : Fichier Enregistrer sous CSV (séparateur point-virgule)

Vérifier dans les Options Régionales | Personnaliser si le séparateur de listes est bien un point-virgule.

L'aide en ligne sur SaveAs est suffisamment explicite :
Local Argument de type Variant facultatif. La valeur True enregistre les fichiers en fonction de la langue de Microsoft Excel (y compris les paramètres du Panneau de configuration). La valeur False (valeur par défaut) enregistre les fichiers en fonction de la langue de Visual Basic pour Applications (VBA) (qui est généralement l'anglais des États-Unis, sauf si le projet VBA où Workbooks.Open est exécuté est un ancien projet VBA XL5/95 de niveau international).

de même pour OpenText sur option Local :
Spécifiez True si les paramètres régionaux de l'ordinateur doivent être utilisés pour la mise en forme des séparateurs, des nombres et des données.
 
Dernière édition:

SebG

XLDnaute Nouveau
Re : Ouvrir un fichier CSV via une macro : UNE SOLUTION

Bonsoir à tous,

J'ai besoin de vos lumiéres. Mes propositions ci-dessus marchent bien avec Xl 2002 (à la maison), mais au boulot c'est XL Excel 2000 (9.0.8961 SP-3) et cette version là ne connait pas le paramétre local et donc pas moyen d'ouvrir ces fichus CSV sauf à passer en fichier texte....

Quelqu'un a-t-il une solution qui tienne la route pour ce sujet ?
 

VIARD

XLDnaute Impliqué
Re : Ouvrir un fichier CSV via une macro : UNE SOLUTION

Bonjour à tous

Je suis tombé par hasard sur la discussion.
Avant que je m'aperçoive qu'une commande permettais de traiter un fichier CSV
j'ai réalisé une macro à mettre dans un module.

'====================================================
Sub Ranger_Colonne() 'Traitement fichier au format CSV (point virgule)
Dim Text As String, X As String, ADéconcaténer As String, Caractere As String
Dim M As Integer, Y As Integer, J As Integer, Nb As Integer

M = Sheets("Feuil1").Range("b65536").End(xlUp).Row
Sheets("Feuil1").Activate
Caractere = ";" 'caractère de séparation

'----------- Compteur point virgule ---------------
For Y = 4 To M
ADéconcaténer = Sheets("Feuil1").Range("b" & Y).Value
Nb = Len(ADéconcaténer)
J = 0
Text = ""
For i = 1 To Nb 'traitement caractère par caractère
X = Mid(ADéconcaténer, i, 1)
Text = Text & X
If X = Caractere Then
J = J + 1
Text = Left(Text, Len(Text) - 1)
Sheets("Feuil1").Range("A" & Y).Select
Sheets("Feuil1").Range("A" & Y).Offset(0, J).Value = Text 'si j-1 colonne A départ
Text = ""
End If
Next
Next
End Sub

'====================================================

Bien sur il faut que le copie du fichier CSV soit présent sur la colonne "A" de la feuille 1.

salutation à tous
Jean-Paul
 

Discussions similaires

Réponses
10
Affichages
317

Statistiques des forums

Discussions
312 239
Messages
2 086 495
Membres
103 236
dernier inscrit
Menni