XL 2016 Changer l'encodage en UTF-8 avec Variable

Dymouille

XLDnaute Nouveau
Bonjour,

j'ai un petit soucis avec mon code et je n'arrive pas à comprendre pourquoi ca plante,
j'ai des fichiers csv en masse qui ne prennent pas en compte les caractères spéciaux,
du coup je change l'encodage de ces derniers avec ce code :
VB:
Sub Encode(sPath As String, Optional SetChar$ = "UTF-8")

With CreateObject("ADODB.Stream")
    'MsgBox sPath
    .Open
    .LoadFromFile sPath 'Loads a File
    .Charset = SetChar 'sets stream encoding (UTF-8)
    .SaveToFile sPath, 2 'adSaveCreateOverWrite
    .Close
End With

End Sub

et je l'appelle comme ceci :

VB:
Encode "C:\Users\Dy\OneDrive\Extraction\" & Format(Date, "dd.mm.yy") & "\" & fichier, "UTF-8"

La variable "Fichier" contient le nom de chaque .csv que je veux convertir,
Le problème ici c'est qu'en utilisant la variable Fichier la macro n'arrive pas à ouvrir le fichier et j'ai l'erreur "3002"
alors que quand je vais écrire le nom d'un fichier csv sans passer par une variable la ca marche niquel..

VB:
Encode "C:\Users\Dy\OneDrive\Extraction\" & Format(Date, "dd.mm.yy") & "\Reference,Descriptions,Assets3011797320001.csv", "UTF-8"

La variable "Fichier" est un String.

Merci d'avance
 

Dymouille

XLDnaute Nouveau
C'etait pas la même chose, non je n'ai pas rajouté ca !

Je vous ai mis la macro en entière, je ne pense pas que ce soit une histoire de chemin, j'ai plus l'impression que c'est le type de la variable qui bloque avec le .LoadFromFile de la methode Encode non ?

merci !


VB:
Sub Convert(fichier As String)

Dim dossier As String
Dim MonDossier As String

Application.ScreenUpdating = False

MonDossier = "C:\Users\Dy\OneDrive\Extraction\" & Format(Date, "dd.mm.yy") & "\"

'SI DOSSIER DATE DU JOUR EXISTE
    If DossierExiste(MonDossier) = True Then
    
    If Dir((MonDossier & "Format Xlsx"), vbDirectory) = "" Then 'on verifie si le dossier existe
            MkDir (MonDossier & "Format Xlsx")
    End If
    
        Workbooks.Open Filename:=MonDossier & fichier
        
              
    Encode "C:\Users\Dy\OneDrive\Extraction\" & Format(Date, "dd.mm.yy") & "\Reference,Descriptions,Assets3011797320001.csv", "UTF-8"
    
        
            'delete la ligne 2
            Rows("2:2").Select
            Selection.Delete Shift:=xlUp
    'colonne en ligne
    Application.DisplayAlerts = False 'pour eviter le msg de confirmation
    
    Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Comma:=True
    'L'incrémentation
    Call Incrémentation
    
    'Appels de la bonne fonction en fonction du nom du fichier
    If Left(fichier, 31) = "Reference,Descriptions,Assets30" Then
        Call ReferenceDescriptionsAssets(fichier)
    End If
    
    If Left(fichier, 31) = "Reference,Descriptions,Handling" Then
        Call ReferenceDescriptionsHandling(fichier)
    End If
    
    If Left(fichier, 31) = "Reference,Global,General,Descri" Then
        Call ReferenceGlobalGeneralDescription(fichier)
    End If
      

    'conversion csv en xlsx
    ActiveWorkbook.SaveAs Filename:=Replace(MonDossier & "Format Xlsx\" & fichier, ".csv", ".xlsx"), FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    
    Application.DisplayAlerts = True ' on remet les alertes
              
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    
    
    End If
    

End Sub

Code:
Convert "Reference,Descriptions,Assets3011542300012.csv"
Convert "Reference,Descriptions,Assets3011797320001.csv"
Convert "Reference,Descriptions,Assets3012789200103.csv"
 

Discussions similaires

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83