Bonjour !

Envoyé par
nullos
Après de nombreuses recherches, j'ai accouché péniblement du code suivant très largement pompé
Pourtant juste en consultant la documentation sur MSDN, même pas besoin de pomper comme
un Shadok !

Envoyé par
nullos
si j'en crois Notepad++ est bien encodé en UTF8 sans BOM.
Oui il faut le croire ! Le fichier est donc bon et le code à peu près … Circulez, y a rien à voir !

Envoyé par
nullos
Or, en fait les caractères accentués (é,à, ï...) présents dans la table n'ont absolument été convertis.
Comment l'as-tu vérifié ?‼
Car Notepad++ comme le Bloc-notes décodant bien l'encodage utf-8, c'est normal que les caractères y soient bien affichés !
Par contre en pensant juste depuis l'Explorateur Windows à double-cliquer sur le fichier csv ainsi généré …
Le fichier étant bien encodé en uft-8 sans BOM, le problème est peut-être alors du côté de l'importation SQL …
Décapitation de ton code tant côté Excel comme côté Stream :
• Ligne n°13 : pas de précision de classeur ni de feuille de calculs, donc c'est la feuille active …
Par contre lignes n°19 & 22 une feuille est bien précisée (du classeur actif car il est omis) !
Heureusement que la feuille export est déjà active pour la ligne n°13 ! …
Juste en déclarant une variable de type Worksheet si le classeur n'est pas celui contenant le code,
sinon il suffit d'utiliser directement le CodeName de la feuille comme dans l'exemple plus bas …
• Si la documentation avait été consultée concernant la méthode WriteText, il n'y aurait pas eu besoin de la ligne n°25 !
• Lignes n°15 à 28 : via le B-A-BA d'Excel ce bloc peut être simplifié en seulement 3 lignes de code en une unique boucle …
• La ligne n°48 est en commentaire alors qu'elle ne doit pas l'être afin de libérer la mémoire utilisée par l'objet !
Voici une démonstration du même traitement :
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
| Sub Demo()
Dim otsie As Object, Rg As Range, BILL$
Set otsie = CreateObject("ADODB.Stream")
otsie.Type = 1
otsie.Open
BILL = ThisWorkbook.Path & "\tmp"
With CreateObject("ADODB.Stream")
.Charset = "utf-8"
.Open
For Each Rg In Feuil1.Cells(1).CurrentRegion.Rows
.WriteText Join$(Application.Index(Rg.Resize(2).Value, 1), ";"), 1
Next
.SaveToFile BILL, 2
.Close
.Type = 1
.Open
.LoadFromFile BILL
.Position = 3
.CopyTo otsie
.Close
End With
Kill BILL
otsie.SaveToFile ThisWorkbook.Path & "\Test utf-8 no BOM .csv", 2
otsie.Close
Set otsie = Nothing
End Sub |
Cadeau bonus : 2 lignes de code références cinématographiques à trouver !
_________________________________________________________________________________________________________
Merci de cliquer sur

pour chaque message ayant aidé puis sur

pour clore cette discussion …
_________________________________________________________________________________________________________
Je suis Paris, Berlin, Nice, Bruxelles, Charlie, …
Partager