web-dev-qa-db-fra.com

Enregistrer en tant que CSV avec séparateur de point-virgule

J'utilise actuellement cette fonction pour la sauvegarde, mais cela me pose problème:

Private Sub spara()
    ActiveWorkbook.SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", _
    FileFormat:=xlCSV, CreateBackup:=False
End Sub

Il enregistre automatiquement avec , mais j'en ai besoin pour enregistrer avec ; dans son fichier. Est-il possible de changer la façon dont cela économise?

J'ai essayé de rechercher Google pour résoudre ce problème, mais toutes les macros concernant l'enregistrement d'un fichier .csv indiquent simplement comment enregistrer au format .csv et comment fractionner plusieurs feuilles au format .csv.

8
saknar namn

Quelle langue utilise votre Excel? Si votre langue maternelle utilise ";" par défaut, vous pouvez passer le paramètre "local: = True"

ActiveWorkbook.SaveAs Filename:="C:\Temp\Fredi.csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True

Sinon, votre seul choix est de chercher et de remplacer après ...

11
Christian Sauer

Modifiez les options Excel (options avancées et d'édition) pour définir le séparateur décimal sur , (évidemment (!)).

2
pnuts

Il est fort possible que ce problème ne soit pas résolu en utilisant uniquement Excel VBA. Le problème est que, bien que Excel Save As... utilise la valeur du séparateur de liste pour définir les paramètres régionaux, Excel VBA utilise toujours les paramètres régionaux en-US et utilise donc , comme séparateur de liste.

Je recommanderais de sauvegarder un fichier CSV puis d'utiliser une application/script de console personnalisée pour le post-traitement. Il y a beaucoup d'analyseurs CSV disponibles qui peuvent lire un ,-csv puis l'enregistrer en tant que ;-csv.

1
Petr Abdulin

Je l'ai résolu en ajoutant "SaveChanges: = False" lors de la fermeture du classeur

With ActiveWorkbook
     .SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", FileFormat:=xlCSV, Local:=True
     .Close SaveChanges:=False
End With
1
Lionel T.

Pour les personnes ayant des problèmes avec ce code

dim wa as Workbook

Workbooks.OpenText FileName:=path2file, _
DataType:=xlDelimited, Semicolon:=True, Local:=True
set wa = ActiveWorkbook

    wa.SaveAs FileName:=path2file, FileFormat:=xlCSV, _ ConflictResolution:=xlLocalSessionChanges, Local:=True

    wa.Close False

La deuxième ligne est vraiment importante, si wa.Close False n’est pas là, il demandera l’approbation de la sauvegarde ou, si wa.Close True, il remplacera le ";" pour ",".

Après être entré dans les paramètres locaux et en faisant ";" le délimiteur de liste, VBA se séparait toujours avec un ",". Modification du code à ce qui précède et cela a été fait.

J'espère que cela jette un peu de lumière pour certains

0
dmb

J'avais cherché ceci pour aider à résoudre un problème similaire que j'avais, j'avais une feuille Excel que j'exporte dans un fichier csv, elle est ensuite téléchargée ailleurs mais nécessite l'utilisation de points-virgules plutôt que de virgules pour la séparation des caractères, cela a fonctionné très bien quand j'exportais manuellement le fichier car j'avais déjà modifié le Panneau de configuration >> Région et langue >> paramètres supplémentaires >> Séparateur de listes de virgule en point-virgule. Mais lorsque j'ai essayé d'automatiser via VBA, il est revenu par défaut à la virgule. Pour corriger ce problème, j'ai ajouté le paramètre de papramètre local suggéré par Christian Sauer ci-dessus, qui prend en compte le fait que j'ai modifié mes paramètres régionaux.

ActiveWorkbook.SaveAs Filename:="Filename.txt", FileFormat:=xlCSV, CreateBackup:=False, Local:=True

Merci à Christian pour le pointeur.

0
Jason