Au pire, je créerais une table de conversion puis je la balaierais pour remplacer tous les caractères qui y sont présents.
Version imprimable
Au pire, je créerais une table de conversion puis je la balaierais pour remplacer tous les caractères qui y sont présents.
Merci transitoire,
Je viens de modifier mon fichier et en fait c'est beaucoup + simple que je pensais :
J'ai regardé sur les 3 dernières années et il y a seulement 5 caracteres spéciaux différents, donc j'ai mis juste 5 lignes de "replace" de ce type :
C'est parfait, je suis content :-)Code:
1
2
3
4 For BcleLg = y + 1 To iFinListing Range("B" & BcleLg) = Replace(Range("B" & BcleLg), "√º", "ü") 'etc ... Next BcleLg
Merci à tous d'avoir contribué
Bonjour,
Pour un fichier Utf8 avec BOM, tu peux aussi essayer avec OpenText :
Code qui prend en compte l'éventualité d'avoir un retour à la ligne dans le texte d'une cellule (comme celui du post #11) :
Ou plus simplement si aucune cellule ne contient de retour à la ligne :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Sub Test() Dim wbk As Workbook Dim rng As Range Dim i As Long Dim nomfich As Variant nomfich = Application.GetOpenFilename("Fichiers csv, *.csv") If nomfich = False Then Exit Sub Workbooks.OpenText Filename:=nomfich, Origin:=65001, Tab:=False, semicolon:=False, Comma:=False, Space:=False, Other:=False Set rng = ActiveWorkbook.Worksheets(1).Range("A1").CurrentRegion ' Reconstituer les lignes coupées (celles qui contiennent un saut de ligne) For i = rng.Rows.Count To 1 Step -1 If (Len(rng(i, 1).Text) - Len(Replace(rng(i, 1).Text, idTxt, ""))) Mod 2 = 1 Then rng(i - 1, 1).Value = rng(i - 1, 1).Text & vbLf & rng(i, 1).Text rng(i, 1).Delete xlShiftUp End If Next i rng.TextToColumns DataType:=xlDelimited, Comma:=True End Sub
Note : Grâce à un autre post, on constate que l'ouverture d'un même fichier, avec l'extension .txt fonctionne alors qu'avec l'extension .csv, il n'est pas toujours interprété correctement.Code:
1
2
3
4
5
6
7
8
9
10 Sub Test() Dim wbk As Workbook Dim rng As Range Dim nomfich As Variant nomfich = Application.GetOpenFilename("Fichiers csv, *.csv") If nomfich = False Then Exit Sub Workbooks.OpenText Filename:=nomfich, Origin:=65001, Tab:=False, semicolon:=False, Comma:=False, Space:=False, Other:=False Set rng = ActiveWorkbook.Worksheets(1).Range("A1").CurrentRegion rng.TextToColumns DataType:=xlDelimited, Comma:=True End Sub
C'est pour ça que j'ouvre avec OpenText sans séparer les champs (tous les séparateurs à False) et que je sépare les champs avec TextToColumns