Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1030 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Détection d'un séparateur de colonne quelconque (VBA Excel)

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Détection d'un séparateur de colonne quelconque (VBA Excel)

n°2050638
luke91
Posté le 21-01-2011 à 10:01:36  profilanswer
 

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
 
 

mood
Publicité
Posté le 21-01-2011 à 10:01:36  profilanswer
 

n°2050744
kiki29
Posté le 21-01-2011 à 14:49:57  profilanswer
 

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


Message édité par kiki29 le 21-01-2011 à 14:59:53

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Détection d'un séparateur de colonne quelconque (VBA Excel)

 

Sujets relatifs
[VBA WORD] Liste deroulante avec source ExcelExcel 07 / Copier coller dans des sheets
[VBa Excel]Programme gestion d'absence[VBA] Equivalent du .GetOpenFilename dans Word
[VBA] faisabilité[VBA access] Copie de graphique Access vers Excel
[VBA] Adapter la taille de plusieurs images pour impression 
Plus de sujets relatifs à : Détection d'un séparateur de colonne quelconque (VBA Excel)


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR