Extraction d'une partie d'une chaine

Bonjour tout le monde,

J'ai un fichier qui contient des données comme celles-ci :

901,703920334559,0,0747343047573167,62281,52435

905,610271316841,0,0789000218702767,69471,57930

909,512394949837,0,0755882805860891,74945,62973

Je dois extraire deux parties pour chaque ligne, voici un exemple :

1ère partie : 901,703920334559 (donc, jusqu'à la 2e virgule rencontrée) et la 2e partie 0,0747343047

Cela fait plusieurs jours que je travaille sur cette macro, voici à quoi je suis arrivé :

Public Function ExtractFirstPartOfPath(path As String) As String

  Dim first, second As Integer
  Dim firstPart As String
  Dim secondPart As String

 'InStr() permet de tester si un texte contient une chaîne de caractères spécifiée et si oui, elle permet de savoir où cette chaîne se trouve dans le texte.
  'Position de la première virgule trouvée dans la chaine dans laquelle on exécute la fonction
  first = InStr(path, ",")
  'Position de la deuxième virgule trouvée dans la chaine dans laquelle on exécute la fonction
  second = InStr(first + 1, path, ",")

  'Permet de récupére'r la première partie du premier nombre (exemple  901,703920334559,0,0747343047573167,62281,52435 va récupérer  901,)
   ExtractFirstPartOfPath1 = Left(path, first)
  MsgBox (ExtractFirstPartOfPath1)
  ExtractFirstPartOfPath2 = Mid(path, first + 1, second - first - 1)
  MsgBox (ExtractFirstPartOfPath2)
  firstPart = ExtractFirstPartOfPath1 + ExtractFirstPartOfPath2
  MsgBox (firstPart)
  'ActiveCell.Value = firstPart

  'Position + 1 de la deuxième virgule trouvée dans la chaine dans laquelle on exécute la fonction
  second = second + 1
  'Permet d'extraire la 2e portion de chiffre après la première portion  par exemple 0,07473430475 le 12 veut dire que je prends 12 caractères
  ExtractFirstPartOfPath = Mid(path, second, 12)

  MsgBox (ExtractFirstPartOfPath)

  ActiveCell.Value.Offset(1, 0).Select
  ActiveCell.Value = ExtractFirstPartOfPath

Mes questions :

1- Quand je veux intégrer dans les cellules les valeurs, j'obtiens #VALEUR au lieu de la valeur.

2- Comme vous pouvez le voir, c'est une function, je dois donc faire ceci pour =ExtractFirstPartOfPath() pour pouvoir l'utiliser, mais j'aimerais créer une macro qui permet de traiter toutes les lignes (j'en ai plusieurs centaines par fichiers)

Je vous joins un exemple de fichier en pièce jointe.

La première ligne à traiter est A31, ensuite A32...

Je vous remercie d'avance pour votre aide.

7corenthin.xlsm (28.50 Ko)

Bonjour,

Pour être sûr d'avoir bien compris ...

S'agit-il d'extraire tous les caractères en partant de la gauche ...

jusqu'au dixième caractère qui se situe après la troisième virgule ...???

Si... c'est bien le cas ... tu peux tester la formule jointe ...

5corenthin.xlsm (26.81 Ko)

Bonjour,

à tester,

Sub test()
For i = 31 To Cells(Rows.Count, 1).End(xlUp).Row
    t = Split(Cells(i, 1), ",")
    For j = LBound(t) To UBound(t)
      Cells(i, 2 + j) = t(j)
    Next j
    Erase t
Next i
End Sub

Bonjour à vous deux et mercis,

Woaw, je suis impressionné par la vitesse de vos réponses et le résultat que j’obtiens déjà.

J'ai dans un premier temps j'ai testé le code de i20100, je vais tester et revenir vers vous avec la solution James007 dans quelques minutes.

Voici ce que j'obtiens comme résultat actuellement avec le code de i20100 :

En BA31 901 en C31 7,0392E+11 en D31 0 7,47343E+14 62281 52435

Sur base de cette String qui se trouve en A31: 901,703920334559,0,0747343047573167,62281,52435

L'idée serait d'obtenir en B31 par exemple 901,703920334559 et en C31 0,07473430475

Encore sincères mercis à vous deux.

Je vais maintenant tester la solution de James007, à tout de suite.

Edit : James, je n'arrive pas à ouvrir votre fichier Excel, quand je l'ouvre, j'active les macros plusieurs fois, il me dit qu'il y a une erreur...

Merci pour votre aide.

Re,

Si je comprends bien ce sont deux chaines à extraire et non pas une ...en B31 et C31 ...

2corenthin.xlsx (18.94 Ko)

Re,

J'ai cette chaine :

901,703920334559,0,0747343047573167,62281,52435

Elle doit en créer deux :

1) 901,703920334559 En F31

2) 0,0747343047 En G31

et ensuite passer à la suivante qui est :

905,610271316841,0,0789000218702767,69471,57930

J'aurais donc deux chaines en F32 et G32 :

905,610271316841 en F32 et 0,0789000218 en G32

J'ai plusieurs centaines de lignes :

901,703920334559,0,0747343047573167,62281,52435

905,610271316841,0,0789000218702767,69471,57930

909,512394949837,0,0755882805860891,74945,62973

913,410291233547,0,0767086113089299,82071,68783

917,303960167971,0,074278373586277,89895,75763

921,193401753109,0,0778096480912883,100341,83882

925,078615988961,0,078150497026379,112869,94281

928,959602875527,0,0804972692318788,127509,105936

932,836362412807,0,07754655672397,142982,119601

937,998799252514,0,0796784678166156,163602,136179

941,865694974795,0,078287950052507,178047,148678

945,728363347789,0,0785775874445774,192819,160906

949,586804371497,0,0783535385382356,207267,173052

953,441018045919,0,078005699812782,221881,185402

957,291004371056,0,077292511128063,237103,198447

Désolé pour la confusion.

Re,

A priori les deux formules en B31 et C31 n'ont qu^à être déplacées en F31 et G31 ...

Et ensuite ... une simple copie vers le bas ...

Me trompe-je ...?

re,

à tester,

Sub test()
'En BA31 901 en C31 7,0392E+11   en D31 0    7,47343E+14 62281   52435
Dim i As Long, t, t1, t2, t3
For i = 31 To Cells(Rows.Count, 1).End(xlUp).Row
    t = Split(Cells(i, 1), ",")
    t1 = t(0)
    t2 = (t(1) & "," & t(2)) / 100000000000#
    t3 = Int(t(3) & "," & t(4)) / 100000000000000#
    Cells(i, "BA") = t1
    Cells(i, "C") = t2
    Cells(i, "D") = t3
    Erase t
Next i
End Sub

Bonjour,

Une autre proposition à étudier.

Réalisé avec Power Query.

Cdlt.

3corenthin.xlsx (36.03 Ko)

Re i20100,

Merci beaucoup pour le temps que vous me consacrez.

Le résultat obtenu n'est pas celui attendu :

Ce que je voudrais svp :

901,7039203 0,074734305

905,6102713 0,078900022

909,5123949 0,075588281

913,4102912 0,076708611

917,3039602 0,074278374

921,1934018 0,077809648

925,078616 0,078150497

928,9596029 0,080497269

Ce que j'obtiens :

901 et 7,039203346 et 7,473430476

905 et 6,10271316 et 7,890002187

909 et 5,123949498 et 7,558828059

913 et 4,102912335 et 7,670861131

Je devrais donc avoir :

901,7039203 et 0,074734305

905,6102713 et 0,078900022

909,5123949 et 0,075588281

913,4102912 et 0,076708611

En fait, il faut donc donc xxx,xxxxxxxx et x,xxxxxxxxx

Le problème ici est que les 3 premiers chiffres sont isolés dans une cellule et qu'ensuite, ce qui est censé se trouver après la virgule des 3 premiers chiffres se met dans une autre cellule.

Merci beaucoup à nouveau pour votre temps.

Bonjour Jean-Eric,

@Jean-Eric

Le résulat obtenu est en effet celui que j'attendais, merci beaucoup :

901,7039203 0,074734305

905,6102713 0,078900022

909,5123949 0,075588281

913,4102912 0,076708611

917,3039602 0,074278374

921,1934018 0,077809648

925,078616 0,078150497

928,9596029 0,080497269

Je ne connais pas du tout Power Query, je suis sous mac, on peut l'utiliser sous mac ?

Merci beaucoup pour votre aide.

Re,

Power Query est réservé à Windows.

Cdlt.

@ dadub,

As-tu ... au moins essayé les formules proposées dans le message de 20h 12 ...

Aucune macro ...

0corenthin-v2.xlsx (18.96 Ko)

re,

Le résultat obtenu n'est pas celui attendu :

peux-tu mettre le résultat attendu sur ton fichier et joindre ton fichier, car ici ce n'est pas évident à lire.

ps/ seulement 2 ou 3 lignes

Salut Isa,

Je ne sais si dadub arrive à s'en sortir avec cette avalanche de propositions ...

slt James, c'est à souhaiter

slt James, c'est à souhaiter

Effectivement ... mais j'ai l'impression qu'il n'a même pas lu tous les messages ...

Re,

Je le fait immédiatement, désolé encore (voir fichier joint) :

Merci pour tout.

6i20100.xlsx (8.98 Ko)

slt James, c'est à souhaiter

Effectivement ... mais j'ai l'impression qu'il n'a même pas lu tous les messages ...

J'ai lu un maximum de messages et je vous en remercie tous.

J'ai envoyé un fichier d'exemple, j'espère que cela vous aidera.

Encore merci.

slt James, c'est à souhaiter

Effectivement ... mais j'ai l'impression qu'il n'a même pas lu tous les messages ...

J'ai lu un maximum de messages et je vous en remercie tous.

J'ai envoyé un fichier d'exemple, j'espère que cela vous aidera.

Encore merci.

Super ...

Peux-tu répondre à la question contenue dans le second message de cette page ...?

Je t'ai placé tes deux formules ... dans les bonnes cellules ...

Merci

@James,

Oui, j'ai besoin de deux extractions svp.

Voici le fichier qui montre l'original et les deux extractions.

Je vous remercie pour voter aide.

1i20100.xlsx (8.98 Ko)
Rechercher des sujets similaires à "extraction partie chaine"