conversion d'un fichier csv

Yvettebis

XLDnaute Nouveau
Bonjour,
Je butte sur un problème depuis 2 jours, insoluble malgré mes recherches.
J'ai exporté des contacts Gmail dans un fichier csv.
Je souhaite le convertir en un joli tableau excel 2010 : un contact par ligne / données réparties en colonnes.
ça va bien pour les colonnes mais les contacts sont sur plusieurs lignes donc c'est le bazar.
Quelqu'un a-t-il déjà rencontré ce problème ?

Merci d'avance pour votre aide.
 

Yvettebis

XLDnaute Nouveau
Re : conversion d'un fichier csv

Je ne dois peut-être pas faire ce qu'il faut car cela ouvre simplement le fichier csv mal présenté. (tout à la suite, avec les virgules) Et en plus au lieu d'avoir les 3700 lignes correspondant aux contacts, il y en a plus de 10 000 !

Dans ton code, c'est quoi : "C:\Test2\FICHIERS ZIP\export au format google.csv". Car je n'ai pas à cet emplacement ces dossiers et fichier.

Merci :)
 

Staple1600

XLDnaute Barbatruc
Re : conversion d'un fichier csv

Bonsoir à tous

Yvettebis
Dans ton code, c'est quoi : "C:\Test2\FICHIERS ZIP\export au format google.csv".
C'est le chemin ou le path
Il faut d'habitude l'adapter et remplacer par "l'adresse" de ton fichier csv sur ton PC.
Mais Docmarti avait inhibé cette ligne de code en mettant un ' devant
(cela transforme la ligne en commentaire)
et il l'a remplacé par ceci:
fichier = Application.GetOpenFilename("Fichiers CSV (*.csv), *.csv")
(ce qui permet de ne pas avoir à saisir "l'adresse" dans le code VBA puis on peut alors choisir le fichier manuellement)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : conversion d'un fichier csv

Re


Ce bon vieil enregistreur de macros est parfois bien utile ;)
NB: Adapte le chemin de ton fichier csv, puis testes chez toi
(Ici avec XL 2013, les champs sont bien séparés par la virgule.
Code:
Sub Macro1()
    Dim NFichier$
NFichier="C:\Temp\FICHIERS ZIP\export au format google.csv"
    Workbooks.OpenText Filename:=NFichier, Origin _
        :=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _
        , Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
        , 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), _
        Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array( _
        28, 1), Array(29, 1), Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), _
        Array(35, 1), Array(36, 1), Array(37, 1), Array(38, 1), Array(39, 1), Array(40, 1), Array( _
        41, 1), Array(42, 1), Array(43, 1), Array(44, 1), Array(45, 1), Array(46, 1), Array(47, 1), _
        Array(48, 1), Array(49, 1), Array(50, 1), Array(51, 1), Array(52, 1), Array(53, 1), Array( _
        54, 1), Array(55, 1), Array(56, 1), Array(57, 1), Array(58, 1), Array(59, 1)), _
        TrailingMinusNumbers:=True
End Sub
 

Modeste geedee

XLDnaute Barbatruc
Re : conversion d'un fichier csv

Bonsour®
dans l'instruction :
Workbooks.OpenText Filename:=NFichier, etc...
on peut également ajouter en dernier argument :
,Local:=True

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.
 

Staple1600

XLDnaute Barbatruc
Re : conversion d'un fichier csv

Bonsoir Modeste Geedee

Merci pour l'info

Mais en relisant l'intégralité du fil, je viens de m'apercevoir que:
ça va bien pour les colonnes mais les contacts sont sur plusieurs lignes donc c'est le bazar.
Quelqu'un a-t-il déjà rencontré ce problème ?

Donc avec Local:=True ou pas, c'est toujours le bordel ;)
(mais au moins j'ai décrassé mon enregistreur ;) )
 

Staple1600

XLDnaute Barbatruc
Re : conversion d'un fichier csv

Bonsoir à tous


Docmarti:
Je suis confus. :eek:
Je n'avais testé ton code.
Je viens de le faire.
Test OK (Excel 2013 et Local:=true) et sans lignes vides (alors que mon code qui correspond en fait à l'ouverture avec l'assistant d'importation de fichier texte laisse des lignes vides et ne produit le même résultat que ton code)
Tu aurais une idée du pourquoi?
testCSV.jpg
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : conversion d'un fichier csv

Bonjour à tous

Je me suis plus occupé du format Outlook. Voici un fichier à tester. Mais attention le nombre de ligne généré par le CSV doit être bien structuré, sinon, il faut revoir le traitement de la concaténation.

Sinon, il faut toujours voir si Outlook ou le logiciel utilisé ne permet pas d'exporter dans un autre format.

Code:
Sub Traitement_CSV_Spécial()
'Permet de définir la zone à traiter en sélectionnant les cellules
'ActiveWorkbook.Names.Add Name:="zone", RefersToR1C1:=Selection
    
    Application.Goto Reference:="zone" 'F5 pour atteindre et voir la zone à traiter
    
'Attention il faut impérativement avoir toujours 1 ligne sur 2,
'sinon: revoir les paramètres de concaténation de lignes
    For Each cell In Selection
        cell.Select
        ActiveCell = cell & "," & cell.Offset(1, 0) & "," & cell.Offset(1, 1)
        cell.Select
    Next
    Application.Goto Reference:="zone"
    NBLig = Selection.Count
    ActiveCell.Select
    For i = 1 To Int(NBLig / 2)
        Sup_1_Ligne_Sur_2
    Next
    Converti
    [A1].Select
End Sub
Private Sub Sup_1_Ligne_Sur_2()
    ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
    Selection.Delete Shift:=xlUp
    ActiveCell.Select
End Sub
Private Sub Converti()
'Henry
    ActiveCell.Columns("A:A").EntireColumn.Select
    Selection.TextToColumns Destination:=ActiveCell, DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, OtherChar _
        :="""", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5 _
        , 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array( _
        12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), _
        Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array( _
        25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), _
        Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1), Array(36, 1), Array(37, 1), Array( _
        38, 1), Array(39, 1), Array(40, 1), Array(41, 1), Array(42, 1), Array(43, 1), Array(44, 1), _
        Array(45, 1), Array(46, 1), Array(47, 1), Array(48, 1), Array(49, 1), Array(50, 1), Array( _
        51, 1), Array(52, 1), Array(53, 1), Array(54, 1), Array(55, 1), Array(56, 1), Array(57, 1), _
        Array(58, 1), Array(59, 1), Array(60, 1), Array(61, 1), Array(62, 1), Array(63, 1), Array( _
        64, 1), Array(65, 1), Array(66, 1), Array(67, 1), Array(68, 1), Array(69, 1), Array(70, 1), _
        Array(71, 1), Array(72, 1), Array(73, 1), Array(74, 1), Array(75, 1), Array(76, 1), Array( _
        77, 1), Array(78, 1), Array(79, 1), Array(80, 1), Array(81, 1), Array(82, 1), Array(83, 1), _
        Array(84, 1), Array(85, 1), Array(86, 1), Array(87, 1), Array(88, 1), Array(89, 1), Array( _
        90, 1)), TrailingMinusNumbers:=True
End Sub
 

Pièces jointes

  • Export_Format_Outlook_MJ.xls
    93 KB · Affichages: 57

Docmarti

XLDnaute Occasionnel
Re : conversion d'un fichier csv

Bonjour Staple; Yvette

Le fichier csv est corrompu.
Workbooks.Open corrige les erreurs semble-t-il.
OpenText ne le fait pas.
QueryTables.Add non plus.
En fait, certaines valeurs contiennent un retour à la ligne composé de chr(10) et chr(13).
Chr(13) est interprété comme une fin de ligne et les champs suivants sont placés sur la ligne suivante.

Seul Workbooks.Open ne se laisse pas tromper par ce caractère Fin de Ligne mal placé.

Cordialement

Docmarti
 

Docmarti

XLDnaute Occasionnel
Re : conversion d'un fichier csv

Bonjour Staple; Yvette

Il y a une solution très simple adoptée par Microsoft mais qui fonctionne uniquement avec Excel :

Ajoutez en tête du fichier CSV une ligne qui indique quel est le séparateur dans ce fichier:

Code:
sep=,

ou

Code:
sep=;

Ça règle même le problème des caractères de fin de ligne que l'on trouve dans les 2 fichiers envoyés par Yvette.

Cordialement

Docmarti[/QUOTE]
 

MJ13

XLDnaute Barbatruc
Re : conversion d'un fichier csv

Bonjour à tous
Il y a une solution très simple adoptée par Microsoft mais qui fonctionne uniquement avec Excel :

Ajoutez en tête du fichier CSV une ligne qui indique quel est le séparateur dans ce fichier:

Code :
sep=,

Merci Docmarti, cela pourrait être intéressant. Je testerai à l'occasion :).
 

Yvettebis

XLDnaute Nouveau
Re : conversion d'un fichier csv

Bonsoir,
Je viens mettre la solution que j'avais trouvée au cas où quelqu'un en aurait besoin : en passant par open office et ensuite par excel, l'extraction avait fonctionné...

Merci à tous pour votre aide ;)
 

Discussions similaires

Réponses
5
Affichages
450
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 469
Messages
2 088 696
Membres
103 924
dernier inscrit
Patrick c