Vba - edition csv

Bonjour à tous,

J’ai un souci avec l’édition d’un csv généré automatiquement via vba.

J’ai passé du temps sur le net pour trouver une solution à mon problème mais après avoir tenter de combiner, modifier plusieurs bouts de code trouvés sans réussite je me retourne vers vous.

Le souci vient du fait que je dois générer un fichier csv où le séparateur n’est pas une virgule mais un point-virgule. Or quand je le fais à la main, tout est ok le fichier est créé avec des “;” mais si je le fais avec vba il me sort des “,”.

Du coup j’ai tenté le code suivant:


Dim Range As Object, Line As Object, Cell As Object
Dim StrTemp, chemin As String

Dim Separateur As String
chemin_csv = ThisWorkbook.Path & "\nomfichier.csv"
Separateur = ";"
Set Range = ActiveSheet.UsedRange

Open chemin_csv For Output As #1
For Each Line In Range.Rows
StrTemp = ""
For Each Cell In Line.Cells
StrTemp = StrTemp & CStr _
(Cell.Text) & Separateur
Next
Print #1, StrTemp '= " "
Next
Close

J’ai trouvé ce bout de code sur le net mais le souci c’est qu’il me met un point virgule en fin de ligne sur le fichier csv.
Ce “;” me gêne vu que je dois réutiliser ce fichier csv pour autre chose, et la plateforme où je l’insère me sort une erreur de format du fait de ce point-virgule en plus…

Au départ, tu faisais avec SaveAs() ?
tu avais mis quelle valeur pour l’argument local ?

Sinon, si tu tiens à utiliser le code ci dessus, c’est toi qui lui dis de mettre un “;”, y compris après la dernière cellule de chaque ligne
For Each Cell In Line.Cells
Il faut que tu arrêtes ta boucle à la cellule précedente, puis que tu mettes une ligne spécifique pour ajouter le contenu de la dernière.
Ou alors tu ne changes rien à tes boucles, mais juste avant de faire ton Print, tu supprimes le dernier caractère de la chaîne à imprimer (tu peux aussi imprimer les n-1 caractères de gauche de la chaîne).
Edité le 25/11/2010 à 13:12

Il faut gérer le séparateur autrement.
Pour l’instant tu l’ajoutes à chaque cellule ce qui a pour effet qu’à la dernière cellule, tu écris sa valeur et ajoutes le ‘;’.

Je te propose l’algo suivant extrait de ton code complet :


Pour toutes les cellules dans la ligne
  if strtemp == ""
    strtemp = cellule.texte
  sinon
    strtemp = strtemp & separateur & cellule.texte
  fin si
fin pour

avec cet algo, tu ne devrais plus avoir de point virgule à la fin de la ligne du fichier csv

@gcc :

Au départ j’ai essayé avec SaveAs, et le paramètre local en true et false. Quel que soit la valeur que j’y ai mis il me sort des virgules. Si je le fais à la mano pas de problème par contre.

Aorès pour mon code je tiens pas tant que ça à utiliser celui-ci, c’est juste un truc que j’avais trouvé sur le net.

Je pense que le plus simple d’après tes propals est de faire print de n-1. Si tu peux m’expliquer le code à rentrer. J’ai jamais manipuler ceci.

@Jiheme44 :

Je comprends pas trop comment insérer ton code par rapport au mien … :confused:

En principe, le paramètre Local à True sauvegarde avec le séparateur de listes déclaré dans windows
(en XP : Panneau de configuration > Options régionales > Personnaliser > Séparateur de listes)
Chez moi
ActiveWorkbook.SaveAs Filename:=“Moncsv.csv”, FileFormat:=xlCSV, CreateBackup:=False, Local:=True
ça fonctionne.

Ce n’était pas par rapport à d’autres codes, mais par rapport à la fonction SaveAs().

tu utilises left() pour prendre les n-1 premiers caractères, et len() pour déterminer le n

ALors il se passe un truc super bizarre.

Si je génère mon csv avec SaveAs ça fonctionne seulement si je le fais en pas à pas avec f8, si je lance la macro via un bouton ou le bouton play il me met des virgules ???

Tu sais de quoi ça peut venir ce problème. Ca me semble assez incohérent tout ça.

Difficile de répondre sans avoir le fichier.
Déjà, il faudrait savoir si ça vient de la config ; tu utilises quel windows et quel excel ?
Peux-tu mettre ton programme sur une clé et le tester sur un PC qui n’a pas la même config ?
Ou alors tu donnes un lien pour qu’on puisse regarder le fichier en question à condition quand même que son contenu ne soit pas confidentiel

Alors j’ai Windows XP et Excel 2007.

Je vais essayer de mettre mon fichier sur un excel 2003.

Je reviendrais vers toi une fois le test fait. Si ca ne marche pas je ferais une copie de mon fichier en mettant des infos bidon pour ne pas casser la confidentialité du truc.

Merci encore.