Bonjour,

Je cherche à me faire une petite macro en VB (excel toute versions), qui me convertit un fichier CSV (sep. = point virgule).
Dans certaines colonnes, j'ai des valeur hexa 16 bits, qui sont interprétée comme des nombre, et la c'est le drame: une valeur 07E5 est traduite par 70000... logique
J'ai donc essayé de spécifier le format de chaque colonne avec le champ FieldInfo (oui, j'ai bien lu l'aide )
Le problème est que j'ai 168 colonnes à traiter, et si j'écris des trucs du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
Selection.TextToColumns Destination:=Range("A1"), _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
FieldInfo  :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), _
Array(5, 1), Array(6, 1),  Array(7, 1), Array(8, 2), Array(9, 2), Array(10, 2), _
Array(11, 2), Array(12, 2), Array(13, 2 ), Array(14, 2), Array(15, 2), _
Array(16, 2), Array(17, 2), Array(18, 2), Array(19, 2)), etc...
et bien je dépasse les capacités de l'éditeur apparemment !



Donc, j'ai tenté d'écrire un truc plus intelligent:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
29
30
31
 
Dim TableauDeCol(256) As Variant
Dim TableauDeFormats As Variant
Dim i As Integer
TableauDeFormats = Array(1, 1, 1, 1, 1, 1, 1, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
1, 1, 1, 1, 1, 1, 1, 1, 1, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
1, 1, 1, 1, 1, 1, 1, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1)
 
    iNbCol = UBound(TableauDeFormats)
    For i = 1 To iNbCol
        TableauDeCol(i) = Array(i, TableauDeFormats(i))
    Next i
 
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"),  _
DataType:=xlDelimited, _
   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        FieldInfo:=TableauDeCol, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False
En clair, je construit un tableau de tableau contenant les formats de chaque colonne (1 pour standard, 2 pour texte).

Mais ca coince: erreur -13 incompatibilité de type.


Si qqun à une idée, merci d'avance.