Double quote CSV [Résolu]

cs_ckimoi 15 Messages postés vendredi 14 mars 2008Date d'inscription 2 mars 2010 Dernière intervention - 14 mars 2008 à 11:53 - Dernière réponse : cs_ckimoi 15 Messages postés vendredi 14 mars 2008Date d'inscription 2 mars 2010 Dernière intervention
- 14 mars 2008 à 15:56
Hello tous, je galère:
j' ai fichier csv extrait de ma base access qui contient les doubles quotes pour les champs nonn vide,
je l'ouvre sous excel pour le retravailler (format date, classement ....)
je l'enregistre en .CSV
le reouvre avec textpad ou notpad ou wordpad , mais les doubles quote ont disparu pour les champ non vide et j' en ai absolument besoin pour le réimporter dans une bas mysql

j'ai cherché , cherché et cherché et je ne m'en sors pas , qu'est ce que je peux rajouter à cette macro pour lors de l'enregistrement excel me rajoute des guillemets pour encadrer une valeur non nul dans le csv:

Code:
Sub test()
'
' test Macro
' Macro enregistrée le 14/03/2008 par e203112
'

'
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Documents and Settings\e203112\Desktop\arcad\CSV\last\test12h.csv", _
        FileFormat:=xlCSV, CreateBackup:=False
End Sub
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 14 mars 2008 à 14:37
3
Merci
A toi de personnaliser la chose, mais voilà deja quelques bases

Sub test()
   ExportCSV ActiveSheet, "C:\a.csv"
End Sub<hr />
Sub ExportCSV(ByRef voSheet As Worksheet, ByRef vsCsvFilePath As String)
Dim nRow As Long
Dim nCol As Long
Dim nRows As Long
Dim nCols As Long
Dim xsParts() As String
Dim nIndex As Long
Dim iFile As Integer
Dim sBuffer As String
Dim bIsLineEmpty As Boolean
Const sSep = ";" '# On pourrais récupérer le separateur de liste spécifié dans les regioal settings
   '# On récupère le nombre de lignes et de colonnes reelement utilisées
   nRows = voSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
   nCols = voSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
   '# On créé un tableau pour contenir les données de la feuille Excel
   ReDim xsParts(nCols * nRows * 2 - 2)
   '# Ensuite, on parcoure chaque ligne
   For nRow = 1 To nRows
       '# On ne stockes pas les lignes vides...
       If bIsLineEmpty Then
           '# ... donc si on en rencontre une, on la suppriem du tableau
           nIndex = nIndex - nCols + 1
       ElseIf nRow > 1 Then
           '# Si on se trouve après la première ligne, on ajoute un saut de ligne
           xsParts(nIndex) = vbCrLf
           '# Et on décale le curseur d'ecriture
           nIndex = nIndex + 1
       End If
       '# On initialise le flag
       bIsLineEmpty = True
       '# Et pour chaque colonne de notre feuille...
       For nCol = 1 To nCols
           '# On ajoute un séparateur (";") entre les colonnes
           If nCol > 1 Then
               xsParts(nIndex) = sSep
               nIndex = nIndex + 1
           End If
           '# On récupère le texte de la cellule en cours
           sBuffer = voSheet.Cells(nRow, nCol)
           '# Si la cellule est non vide...
           If LenB(sBuffer) Then
               '# notre flag passe à False: la ligne doit être conservée
               bIsLineEmpty = False
               '# Ensuite, si on est dans la première colonne
               If nCol = 1 Then
                   '# On mémorise le contenu de la cellule tel quel
                   xsParts(nIndex) = sBuffer
               Else
                   '# Dans le cas contraire, on ajoute des guillemets
                   xsParts(nIndex) = """" & sBuffer & """"
               End If
           End If
           '# Et on décale le curseur d'ecriture
           nIndex = nIndex + 1
       Next nCol
   Next nRow
   
   '# Ici, on ecrit le tableau dans un fichier
   iFile = FreeFile
   Open vsCsvFilePath For Output As iFile
       Print #iFile, Join(xsParts, vbNullString)
   Close iFile
End Sub<hr />
, ----
By Renfield

Renfield
Admin CodeS-SourceS- MVP Visual Basic

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Renfield
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 14 mars 2008 à 12:05
0
Merci
Pas nativement, j'ai l'impression...
cependant, tu peux toujours générer ce fichier par toi même, formatté comme tu le souhaites

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
cs_ckimoi 15 Messages postés vendredi 14 mars 2008Date d'inscription 2 mars 2010 Dernière intervention - 14 mars 2008 à 13:41
0
Merci
Merci,

j'ai testé aussi ,
 en rajoutant des guillemets dans mes cellules contenant du non vide mais j'obtiens dans le CSV du triple quote
ex: "garage dupont"  me donne en csv """garage dupont""" et moi j'ai besoin d'obtenir "garage dupont"

Mon gros soucie c'est que j'ai 150 colonnes et 20000 lignes (dur dur)

testé également tous les script que j'ai pu trouvé en VBS en sql ... mais appart modifié un quote anglais "," en euro ";" rien y fait

help me please
Commenter la réponse de cs_ckimoi
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 14 mars 2008 à 13:46
0
Merci
je te parlais pas de modifier tes cellules, mais bien d'exporter le fichier toi même, sans passer par SaveAs.

donne moi quelques lignes exemples de ce que tu cherches a obtenir, je vais voir ce que je peux faire de mon coté (sous entendu testes du tiens)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
cs_ckimoi 15 Messages postés vendredi 14 mars 2008Date d'inscription 2 mars 2010 Dernière intervention - 14 mars 2008 à 13:58
0
Merci
Merci,

voilà un exemple de ligne de mon fichier excel:

colonne 1   colonne2   colonne3               colonne4
ER                              garage dupont         SAS

ce que j'obtient en csv:
ER;;garage dupont;SAS;

ce qu'il me faut en csv:
"ER";;"garage dupont";"SAS"

et la cerise ce serait de ne pas avoir les guillemets pour la colonne 1:
ER;;"garage dupont";"SAS"

<col style=\"width: 60pt;\" span=\"3\" width=\"80\" /><col />----
ER, , , SARLAT AUTOS, , SAS, <col style=\"width: 419pt;\" width=\"559\" /><col style=\"width: 78pt;\" width=\"104\" /><col style=\"width: 60pt;\" width=\"80\" />
<col style=\"width: 60pt;\" span=\"3\" width=\"80\" /><col />----
ER, , , SARLAT AUTOS, , SAS, <col style=\"width: 419pt;\" width=\"559\" /><col style=\"width: 78pt;\" width=\"104\" /><col style=\"width: 60pt;\" width=\"80\" />
Commenter la réponse de cs_ckimoi
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 14 mars 2008 à 14:08
0
Merci
NB: "Réponse acceptée" c'est juste quand ton probleme est solutionné, pour indiquer les posts qui t'ont aidé...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
cs_ckimoi 15 Messages postés vendredi 14 mars 2008Date d'inscription 2 mars 2010 Dernière intervention - 14 mars 2008 à 14:22
0
Merci
Ok je debute , lol, 1000 excuses
Commenter la réponse de cs_ckimoi
cs_ckimoi 15 Messages postés vendredi 14 mars 2008Date d'inscription 2 mars 2010 Dernière intervention - 14 mars 2008 à 14:42
0
Merci
super ,

je vais bosser la dessus et pondre un script pour ceux que ca interesse ,

encore merci
Commenter la réponse de cs_ckimoi
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 14 mars 2008 à 14:45
0
Merci
si tu te demande pourquoi je compliques la chose avec un tableau, c'est pour accélerer le traitement... j'évite de me trainer une chaine que j'agrandirait n fois, j'evite aussi de faire n accès au fichier...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
cs_ckimoi 15 Messages postés vendredi 14 mars 2008Date d'inscription 2 mars 2010 Dernière intervention - 14 mars 2008 à 14:50
0
Merci
De la folie,

toi t' es un pro , j'ai rien a modifier c'est exactement le resultat escompté,

je vais analyser le script pour mieux le comprendre mais tu m'enleve un Glaive du pied

Thanks again
Commenter la réponse de cs_ckimoi
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 14 mars 2008 à 14:55
0
Merci
l'important c'est que tu le comprenne, effectivement.
ravi de voir que tu aprécie le cote plug & <strike>play</strike> run

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
cs_ckimoi 15 Messages postés vendredi 14 mars 2008Date d'inscription 2 mars 2010 Dernière intervention - 14 mars 2008 à 15:56
0
Merci
Compliqué la chose, c'est pas le mot, je prefers toujours en avoir trop que pas assez,
et effectivement pour 20000 lignes et 130 colonnes, le traitement a duré moins d'une minute!!!

PS: je me suis penché dessus et j'avoue que ce script est parfais même la cerise y est:
If nCol = 1 Then
                   '# On mémorise le contenu de la cellule tel quel
                   xsParts(nIndex) = sBuffer
               Else
                   '# Dans le cas contraire, on ajoute des guillemets
                   xsParts(nIndex) = """" & sBuffer & """"

tu meriterai un salaire pour ça ;)
Commenter la réponse de cs_ckimoi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.