Détection d'un séparateur de colonne quelconque (VBA Excel) - VB/VBA/VBS - Programmation
Marsh Posté le 21-01-2011 à 14:49:57
Salut,il faudrait sans doute passer par les expressions régulières mais ne les ayant que peut utilisées je ne te serais pas d'une grosse utilité, qqs liens tout de même :
voir sur http://www.excel-downloads.com/for [...] egexp.html http://tahe.developpez.com/web/vbs [...] e_4#LIII-B http://www.vbaexpress.com/kb/getarticle.php?kb_id=68
Marsh Posté le 21-01-2011 à 10:01:36
Bonjour,
n'étant pas un expert en macro, je sollicite aujourd'hui votre aide pour un problème que j'ai rencontré et qui ne trouve pas de solution dans mon entourage.
j'ai en ma possession un fichier csv, qui lorsque je l'ouvre sur excel sépare chaque colonne par une virgule. Le problème c'est que mes données sont des nombres à virgule.
Il y a surement différentes façons de résoudre ce problème, je vous expose ici la méthode que j'ai choisi.
S'il y a des méthodes plus simples, je suis prêt à entendre toutes propositions.
Avant toute chose je tiens à préciser que le nombre de chiffres entre chaque virgule est totalement variable.
Déroulement de la macro :
J'ai enregistré chaque caractère de chaque cellule dans un tableau et lorsque je trouvais une case i et i+1 qui correspondaient à une "," suivi d'un "+" ou "-", j'ai copié tous les caractères qui se trouvaient avant, dans ma première cellule et ainsi de suite pour toute la chaine de caractère et pour toutes les lignes.
J'ai fait défilé ma macro en mode pas à pas, ma cellule prend bien les valeurs attendues jusqu'à un certain point.
Pour un nombre qui doit être 1,353 au final, la macro copie : "1" puis "1," puis "1,3" puis "1,35" mais lorsque j'arrive au 3ème chiffre après la virgule, au lieu d'écrire tout simplement 1,353 il considère que la "," indique les milliers et écrit donc 1 353.
J'ai vérifié le format de cellule, après le passage de la macro il est en mode scientifique et la "," n'est pas définie comme séparateur de milliers.
J'ai essayé de passer le format en mode texte cela ne change rien.
Je ne comprend vraiment pas pourquoi le format de ce que je copie change alors que mes données sont censés sortir en tant que string de mon tableau.
Je vous remercie d'avance pour tout le temps que vous accorderez à l'étude de ce cas.
exemple de données :
Je vous donne les valeurs de 2 cellules afin que vous puissiez voir le format de départ (l'arrivée étant simplement de séparer les nombres) :
cellule "A2" :
+0,00e+000,+3,90015e-003,-2,25830e-003,-4,51660e-002,-5,71899e-004,+4,40063e-004
je désire obtenir : +0,00e+000 +3,90015e-003 -2,5830e-003 -4,51660e-002 -5,71899e-004 +4,40063e-004
cellule "A3" :
+2,00e-002,+2,97241e-003,-4,29688e-003,-4,45557e-002,-5,82275e-004,+4,29688e-004
Code déjà réalisé :
Je vous donne aussi la macro que j'ai réalisé :
Option Explicit
Sub extraireValeursNumeriques_DansChaine()
Const nbLigne As Integer = 23900
Const longueurText As Integer = 100
Dim text As String, n As Integer, i As Integer, j As Integer, cell As String
Dim tableau(1 To nbLigne, 0 To longueurText) As String
Dim compteur As Integer, pas As Integer
Range("A1" ).Select
For n = 1 To nbLigne 'n pour parcourir les n lignes
If ActiveCell.Offset(n, 0).Value <> "" Then
tableau(n, 0) = ""
text = ActiveCell.Offset(n, 0).Value
ActiveCell.Offset(n, 0) = ""
compteur = 0
pas = 0
For i = 1 To Len(text) 'i pour parcourir le texte dans la cellule selectionnée par le n
tableau(n, i) = Mid(text, i, 1)
If tableau(n, i - 1) = "," And tableau(n, i) = "+" Then
For j = pas To i - 2 'j pour transcrire la partie du tableau desiree dans la cellule dessiree
ActiveCell.Offset(n, compteur).Formula = ActiveCell.Offset(n, compteur).Formula & tableau(n, j)
Next j
compteur = compteur + 1 'Le compteur permet simplement de changer de colonne
pas = i
End If
If tableau(n, i - 1) = "," And tableau(n, i) = "-" Then
For j = pas To i - 2
ActiveCell.Offset(n, compteur).Formula = ActiveCell.Offset(n, compteur).Formula & tableau(n, j)
Next j
compteur = compteur + 1
pas = i
End If
Next i
End If
Next n
End Sub