Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA, Sauvegarde Unicode avec délimiteur

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

STephane

XLDnaute Occasionnel
Bonjour,


Une collègue m'a demandé de faire en sorte qu'un programme développé par quelqu'un d'autres puisse écrire des caractères d'autres alphabets, en l'occurence de l'alphabet cyrillique.

Le programme actuel utilise la méthode "open" (for output) pour écrire le fichier texte et inscrit chaque champ de chaque ligne en les séparant d'un point virgule.

J'ai essayé en vain les méthodes suivantes :
- l'enregistrement au format "CSV Comma-Delimited", mais les caractères ne sont pas corrects.
- la création d'une coquille vide au format unicode puis son édition avec "open for output", cela ne marche pas non plus.
- l'utilisation de bytes()
- l'encodage du fichier avec la méthode ADO (changement du CharSet)


Sachant que la méthode "Enregistrer Sous" au format "Unicode" marche très bien, j'ai un code opérationnel mais il ne me plaît pas : je copie mes données dans un nouveau classeur, j'insère des colonnes pour y mettre le point virgule et j'enregistre le fichier en unicode (pas d'utilisation de la méthode Open).


Avez-vous tordu le coup à une telle problématique avec une des méthodes précédentes ou une autre ?


Merci
 

Pièces jointes

Re : VBA, Sauvegarde Unicode avec délimiteur

Bonjour STephane,


c'est une vraie galère ce truc et j'ai déjà pas mal cherché de mon côté à simplement faire une macro qui exporte une table excel en utf-8 sans BOM avec un séparateur de champ = virgule. J'ai fini par faire un csv et à faire mes conversions dans notepad++.

J'ai essayé ma façon de faire sur ton tableau mais je perds les caractères cyrilliques 🙁

J'ai trouvé des outils mais payants.
En regardant à l'instant je trouve ceci qui a l'air gratuit (pas testé !)
Je ne sais pas si ça peut t'aider
Convert XLS To CSV Easily with 'Convert XLS'.  20 times faster than using Excel. Excel is not required.
ils ne parlent pas vraiment du format du texte dedans.

en tous cas si tu trouves une solution, partage 🙂

Une solution à tester : faire le job avec Open Office qui serait plus compétent pour cela.
 
Re : VBA, Sauvegarde Unicode avec délimiteur

Voilà la méthode que j'ai envisagée mais le fichier contient bien le séparateur ";" cependant il contient une tabulation créée par Excel lors de l'enregistrement unicode.

Je cherche donc une meilleure solution.
 

Pièces jointes

Re : VBA, Sauvegarde Unicode avec délimiteur

J'ai trouvé une autre syntaxe avec FileSystemObject.

Reste à trouver un moyen propre pour le délimiteur de champs.
ADO sait créer une chaîne délimitée mais c'est pas la méthode la plus pratique.

Code:
Sub quickdemo()
Const s_fichier As String = "c:\temp\test.txt"
Dim fso As Object
Dim x As String
Dim f
x = ActiveCell.Text
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateTextFile(s_fichier, -1, -1)  'unicode
f.WriteLine x
End Sub
 
Dernière édition:
Re : VBA, Sauvegarde Unicode avec délimiteur

Pas idéal... attention il te manque un ; entre les champs 6 et 7.
Tu te retrouves en UTF-16LE fais attention à cela suivant l'usage ultérieur du fichier texte. (si c'est pour l'insérer dans une base de données par exemple).
 
Re : VBA, Sauvegarde Unicode avec délimiteur

Pas idéal... attention il te manque un ; entre les champs 6 et 7.
Tu te retrouves en UTF-16LE fais attention à cela suivant l'usage ultérieur du fichier texte. (si c'est pour l'insérer dans une base de données par exemple).

la méthode CreateTextFile accepte un autre paramètre qui pourrait peut être aider (localeID).

sinon, dans le même registre :
Code:
S_Separateur=";"
    ' Détermination de la plage à copier.
    Set r_PlageData = range("A1").currentregion
    
    ' Création de la coquille vide au format unicode.
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.CreateTextFile(s_Fichier_CheminComplet, -1, -1)  'unicode
    f.Close

    ' on pourrait écrire chaque ligne avec la méthode FSO : f.writeline "maligne"

    ' Ecriture de chaque ligne de données de la plage à copier, en intercalant le séparateur choisi.
    Open s_Fichier_CheminComplet For Append As #1
    For Each Line In r_PlageData.Rows
        s_Temp = ""
        For Each Cell In Line.Cells
            s_Temp = s_Temp & CStr(Cell.Text) & s_Separateur
        Next
        Print #1, StrConv(s_Temp, vbUnicode) & StrConv(vbCrLf, vbUnicode);  'le point virgule à la fin a son importance.
    Next Line
    Close #1
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…