Bonjour à toutes et tous,
Je souhaite à convertir des fichiers excel en csv mais avec un séparateur personnalisé (§).
Je ne trouve pas comment faire....
Merci de votre aide.
Bonne journée.
Bonjour à toutes et tous,
Je souhaite à convertir des fichiers excel en csv mais avec un séparateur personnalisé (§).
Je ne trouve pas comment faire....
Merci de votre aide.
Bonne journée.
Une solution pas très élégante mais simple et rapide.
En supposant que tes données sont en colonne A, B et C, tu mets en D1 la formule :
Avec Excel 365, tu peux utiliser à la place la fonction JOINDRE.TEXTE https://support.office.com/fr-FR/art...3-0e8fc845691c
Code : Sélectionner tout - Visualiser dans une fenêtre à part =A1&"§"&B1&"§"&C1
Tu copies D1 vers le bas autant que tu as de lignes de données.
Tu ouvres un nouveau fichier.
Sélectionne la colonne D de tes données sources > Ctrl+C > Sélectionne A1 de ton nouveau fichier > Clic droit > Copier valeurs
Il ne reste plus qu'à enregistrer le nouveau fichier en CSV.
Si tu as à le faire régulièrement, tout ceci peut bien sûr être automatisé par une macro en VBA.
Bonjour et merci pour la réponse,
Cependant, la formule indiquée ne répond pas au besoin, en effet, le § est remplacé par un õ
Merci
Ce n'est pas la formule qui est en cause mais l'enregistrement et/ou l'application de destination.
Normalement, ce qui transforme les § en õ, c'est le passage de MS-DOS à Windows.
N'aurais-tu pas enregistré le fichier au format CSV MS-DOS ?
Si c'est le cas, essaye de l'enregistrer en CSV Windows.
Il faudrait que tu en dises plus sur l'application qui va ouvrir le CSV (et éventuellement son OS) car ton problème est sans doute à cause du codage des caractères.
Salut.
Tu dois réaliser cela souvent ou sur beaucoup de fichiers?
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Pas très propre mais j'ai fait un remplacer tout de õ pour §
Merci à tous.
Salut.
Normalement, un csv devrait s'appuyer sur une table de données. Voici un code qui enregistre un tableau nommé tableau1 en CSV. Si des données doivent être formatées d'une certaine manière (nombres avec . et pas , ou date dans un certain format), il conviendra d'adapter la boucle d'alimentation de la variable Data en traitant cellule par cellule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 Sub Test() Dim Data As String Dim t As ListObject Dim r As ListRow Dim c As Range Dim h As Range Dim Pos As Long Dim Separator As String Dim FileName As String FileName = "e:\temp\Fichier.csv" Separator = "§" Set t = Range("tableau1").ListObject Set h = t.HeaderRowRange For Each c In h If Data = "" Then Data = c.Value Else Data = Data & Separator & c.Value Next c Data = Data & Chr(10) For Each r In t.ListRows Pos = 1 For Each c In r.Range If Pos = 1 Then Data = Data & c.Value Else Data = Data & Separator & c.Value Pos = 0 Next c If r.Index < t.ListRows.Count Then Data = Data & Chr(10) Next r CreateCSV Data, FileName End Sub Function CreateCSV(Data As String, FileName As String) As Long Dim st As Object If Dir(FileName) <> "" Then Kill FileName Set st = CreateObject("ADODB.Stream") With st .Type = 2 .Charset = "utf-8" .Open .writetext Data .savetofile FileName End With EndHandler: Set st = Nothing If Err <> 0 Then CreateCSV = Err.Number End Function
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
C'est à cause de problèmes de ce genre que j'utilise la procédure que j'ai donnée, car elle force la création du csv en utf-8 alors que l'enregistrement via Excel le fait en iso-8859-1, si je ne dis pas de bêtises.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Merci à tous pour vos réponses.
J'ai dû finalement refaire tous mes fichiers depuis notepad afin qu'ils soient interprétables par mon script.
Merci encore pour votre temps.
Bonne journée.
Bonjour,
Code Inspiré par Pierre Fauconnier : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 Sub test() ThisWorkbook.Sheets("Feuil1").UsedRange.Copy CreateCSV Replace(PressePapier, vbTab, "§"), Environ("Temp") & "\TOTO.txt" End Sub Function CreateCSV(Data As String, FileName As String) As Long Dim st As Object If Dir(FileName) <> "" Then Kill FileName Set st = CreateObject("ADODB.Stream") With st .Type = 2 .Charset = "utf-8" .Open .writetext Data .savetofile FileName End With EndHandler: Set st = Nothing If Err <> 0 Then CreateCSV = Err.Number End Function Public Property Let PressePapier(Value) Const DATAOBJECT_BINDING As String = "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}" With CreateObject(DATAOBJECT_BINDING) .SetText Value .PutInClipboard End With End Property Public Property Get PressePapier() Const DATAOBJECT_BINDING As String = "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}" With CreateObject(DATAOBJECT_BINDING) .GetFromClipboard PressePapier = .GetText End With End Property
Partager