Voici une petite procédure pour exporter des données dans un fichier .csv qu'Excel saura interpréter correctement.

Pour rappel, un fichier .csv est un fichier texte dont les valeurs sont séparées par des points virgules (ou des virgules) :
http://fr.wikipedia.org/wiki/Comma-separated_values

Le problème principal rencontré lors de l'ouverture d'un fichier .csv dans Excel est que lorsque des valeurs composées uniquement de chiffres commencent par un ou plusieurs zéros, ces zéros "non significatifs" sont supprimés à l'affichage dans Excel.

Dans mon cas, je souhaite conserver ces zéros.

Les séparateurs (; ou ,) et guillemets présents dans une valeur de type texte doivent aussi être "échappés" en entourant la valeur de guillemets.

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
 
LOCAL
	iIDFi est un entier = 0
	sVal1 est une chaîne = ""
	sVal2 est une chaîne = ""
	sVal3 est une chaîne = ""
	sVal4 est une chaîne = ""
	sVal5 est une chaîne = ""
	sVal6 est une chaîne = ""
	sVal7 est une chaîne = ""
	sVal8 est une chaîne = ""
	sLigne1 est une chaîne = ""
	sLigne2 est une chaîne = ""
	sFiCsvChemin est une chaîne = ""
 
sFiCsvChemin = "c:\test.csv"
 
iIDFi = fOuvre(sFiCsvChemin,foCréationSiInexistant+foAjout)
 
sVal1 = "Ceci est un texte"
sVal2 = "Ceci est un texte; contenant un point virgule"
sVal3 = "Ceci est un ""texte"" contenant des guillemets"
sVal4 = "Ceci est un ""texte""; contenant des guillemets et un point virgule"
sVal5 = "00001"
sVal6 = "00002"
sVal7 = "04.90.90.90.90"
sVal8 = "2011"
 
ModifChaine(sVal1)
ModifChaine(sVal2)
ModifChaine(sVal3)
ModifChaine(sVal4)
ModifChaine(sVal5)
ModifChaine(sVal6)
ModifChaine(sVal7)
ModifChaine(sVal8)
 
sLigne1 = sVal1+";"+sVal2+";"+sVal3+";"+sVal4+";"+sVal5+";"+sVal6+";"+sVal7+";"+sVal8
fEcritLigne(iIDFi,sLigne1)
 
sLigne2 = sVal1+";"+sVal2+";"+sVal3+";"+sVal4+";"+sVal5+";"+sVal6+";"+sVal7+";"+sVal8
fEcritLigne(iIDFi,sLigne2)
 
fFerme(iIDFi)
 
LanceAppliAssociée(sFiCsvChemin)
Code de la procédure "ModifChaine" :

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
 
PROCEDURE ModifChaine(_sChaine est une chaîne)
 
//Déterminer si la valeur contient uniquement des chiffres
bUniquementChiffre est un booléen = Vrai
 
POUR i = 1 _A_ Taille(_sChaine)
	SI PAS (Asc(_sChaine[[i]]) >= 48 ET Asc(_sChaine[[i]]) <= 57) ALORS
		bUniquementChiffre = Faux
		SORTIR
	FIN
FIN
 
SI bUniquementChiffre ALORS
	//Conserver les zéros non significatifs
	 SI Gauche(_sChaine,1) = "0" ALORS
	 	_sChaine = """=""""0"+Droite(_sChaine,Taille(_sChaine)-1)+""""""""
	 FIN	
SINON
	_sChaine = Remplace(_sChaine,"""","""""")
	_sChaine = """"+_sChaine+""""
FIN
Voici le résultat en ouvrant le fichier avec le bloc note Windows :

"Ceci est un texte";"Ceci est un texte; contenant un point virgule";"Ceci est un ""texte"" contenant des guillemets";"Ceci est un ""texte""; contenant des guillemets et un point virgule";"=""00001""";"=""00002""";"04.90.90.90.90";2008

Bonne prog