Forcer le format de données de la valeur d'un objet (Range)
Bonjour,
Je vous explique mon problème. J'ai écris un petit code qui me permet d'importer des données qui sont dans un format txt brut.
Voici un exemple de données (avec le soucis):
Code:
1 2 3 4
|
1001 NOM NUMERO 1 01.23.45.67.89 01.23.45.67.89/ 000
88
1002 NOM NUMERO 2 01.23.45.67.89 01.23.45.67.89 000 |
Certaines lignes contiennent la suite de la valeur de la case supérieure (ici 88 est normalement la suite de 01.23.45.67.89/ )
Lorsqu'une ligne contient plus d'un report sur la ligne suivante, le contenu de la ligne est considéré comme une suite d'espaces avec du texte. Mais quand il n'y a qu'une seule suite de chiffre, vba considère qu'il s'agit de chiffre et fait sauter tous les espaces précédents.
Le soucis, c'est que le report peut être présent à différents endroits. Et donc, je ne peux pas anticiper l'endroit ou je compte remettre les données.
Je découpe les informations grâce à la fonction mid().
Et je ne peux pas faire le correctif à la main, mon fichier source faisant plus de 40 000 lignes
La manière dont j'ai écrit ma fonction fait que je ne peux pas forcer le type string sur la source.
Voici un exemple de mon code qui sera surement plus facile à comprendre :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
Dim Cell As Range
For Each Cell In ActiveSheet.Range("A4:A" & nbLignesSrc)
Workbooks(NomClasseur).Worksheets("DONNEES").Range("A" & LigneDest).Value = Trim(Mid(Cell.Value, ColA(0), ColB(0) - ColA(0)))
Workbooks(NomClasseur).Worksheets("DONNEES").Range("B" & LigneDest).Value = Trim(Mid(Cell.Value, ColA(1), ColB(1) - ColA(1)))
Workbooks(NomClasseur).Worksheets("DONNEES").Range("C" & LigneDest).Value = Trim(Mid(Cell.Value, ColA(2), ColB(2) - ColA(2)))
Workbooks(NomClasseur).Worksheets("DONNEES").Range("D" & LigneDest).Value = Trim(Mid(Cell.Value, ColA(3), ColB(3) - ColA(3)))
Workbooks(NomClasseur).Worksheets("DONNEES").Range("E" & LigneDest).Value = Trim(Mid(Cell.Value, ColA(4), ColB(4) - ColA(4)))
LigneDest = LigneDest + 1
Next Cell |
- nbLignesSrc vient d'une autre fonction qui me donne la taille du fichier en nombre de lignes.
- ColA() et ColB() sont récupérés avant sur une feuille qui contient les paramètres de mon classeur xls et définissent les bornes de découpe des colonnes.
Je ne peux pas forcer directement le type string sur Cell lors de la déclaration vu que j'utilise un for each qui réclame un Objet ou Variant. Et si je force le string sur Mid(), cela ne change rien (Strings.Mid())
Le code n'est probablement pas très propre, on va dire que je débute en VBA.
Je suis donc ouvert à toute proposition d'amélioration.
Merci d'avance