Extraction de données entre parenthèses

Bonjour à toutes et à tous,

je suis débutant dans Excel et voilà que je suis face à une problématique un peu complexe pour moi.

Dans mon fichier Excel je souhaiterai réunir grâce à une macro toutes les lésions dans une colonne et tous les sièges dans une autre comme dans l'exemple ci-dessous.

  • Joueurs : A

Blessures : Douleur ostéo-articulaire diverse(Cou) | Douleur ostéo-articulaire diverse(Dos (centre)) | Douleur ostéo-articulaire diverse(Épaule (droite)) | Douleur ostéo-articulaire diverse(Genou (gauche))

Lésions : Douleur ostéo-articulaire diverse | Douleur ostéo-articulaire diverse | Douleur ostéo-articulaire diverse | Douleur ostéo-articulaire diverse

Siege : Cou | Dos (centre) | Épaule (droite) | Genou (gauche)

  • Joueurs : G

Blessures : Entorse / Foulure (Pied (droit))

Lésions : Entorse / Foulure

Sièges : Pied (droit)

Le fait qu'il ait des parenthèses imbriquées me complique un peu la tâche.

Votre aide me serait vraiment bénéfique.

Merci :)

8test.xlsx (8.86 Ko)

Bonjour ss1021, le forum,

Un début de piste...

Sub test()
 Dim tb, i%, douleur, siège, x&

 Application.ScreenUpdating = False

  x = 2
  Do While x <= Range("A" & Rows.Count).End(xlUp).Row
   tb = Split(Range("B" & x), "|")
    For i = LBound(tb) To UBound(tb)
     On Error Resume Next
     douleur = douleur & Left(Trim(tb(i)), InStr(Trim(tb(i)), "(") - 1) & Chr(10)
     siège = siège & Replace(Replace(Mid(Trim(tb(i)), InStr(Trim(tb(i)), "("), Len(Trim(tb(i)))) & Chr(10), "(", ""), ")", "")
    Next i
   Range("C" & x) = douleur: Range("D" & x) = siège
   Erase tb: douleur = Nothing: siège = Nothing
   x = x + 1
  Loop
End Sub
2ss1021.xlsm (19.32 Ko)

Remarque : ne fonctionne que si le siège est mentionné entre parenthèses.......

Cordialement,

Bonjour @xorsankukai,

Merci beaucoup pour votre réponse et pour ce début de piste.
Effectivement j'ai certains cas où le siège n'est pas mentionné, je vais essayé de l'adapter en fonction si j'arrive .

Bien cordialement,

ss1021

Bonjour,

Merci pour le retour,

Une nouvelle tentative, à tester....

Sub test()
 Dim tb, i%, douleur, douleurS, siège, siègeS, x&

 Application.ScreenUpdating = False

  x = 2
  Do While x <= Range("A" & Rows.Count).End(xlUp).Row
   tb = Split(Range("B" & x), "|")
    For i = LBound(tb) To UBound(tb)
     On Error Resume Next
      If tb(i) Like "*(*)*" Then
       douleurS = Left(Trim(tb(i)), InStr(Trim(tb(i)), "(") - 1) & Chr(10)
       siègeS = Replace(Replace(Mid(Trim(tb(i)), InStr(Trim(tb(i)), "("), Len(Trim(tb(i)))) & Chr(10), "(", ""), ")", "")
      Else
       douleurS = tb(i) & Chr(10)
       siègeS = Chr(10)
      End If
       douleur = douleur & douleurS
       siège = siège & siègeS
    Next i
   Range("C" & x) = Left(douleur, Len(douleur) - 1): Range("D" & x) = Left(siège, Len(siège) - 1)
   Erase tb: douleur = Nothing: siège = Nothing
   x = x + 1
  Loop
End Sub
2ss1021-v2.xlsm (17.83 Ko)

Cordialement,

Bonjour xorsankukai,

Merci beaucoup pour ce script complet, ça fonctionne bien comme il faut.

Moi j'étais plutôt parti sur ça :

Sub test()

Dim tb, i%, douleur, siège, x&

Application.ScreenUpdating = False

x = 2

Do While x <= Range("A" & Rows.Count).End(xlUp).Row

tb = Split(Range("B" & x), "|")

For i = LBound(tb) To UBound(tb)

On Error Resume Next

If InStr(1, tb(i), "(", vbTextCompare) > 0 And InStr(1, tb(i), ")", vbTextCompare) > 0 Then

douleur = douleur & Left(Trim(tb(i)), InStr(Trim(tb(i)), "(") - 1) & Chr(10)

siège = siège & Replace(Replace(Mid(Trim(tb(i)), InStr(Trim(tb(i)), "("), Len(Trim(tb(i)))) & Chr(10), "(", ""), ")", "")

Else

douleur = douleur & tb(i) & Chr(10)

siège = siège & ""

End If
Next i

Range("C" & x) = douleur: Range("D" & x) = siège

Erase tb: douleur = Nothing: siège = Nothing

x = x + 1

Loop

End Sub

Cependant je me retrouvais avec un espace/retour à la ligne à la fin que j'ai du mal enlever .

Bien cordialement,

ss1021

Pour quelqu'un de débutant dans Excel c'est plutôt pas mal

Re,

Bien joué,

Je rejoinsl'avis de JB_(), pas si débutant que ça, car moi, ça m'a grillé quelques neurones pour y parvenir,

Bonne continuation, pense à clôturer le sujet,

A bientôt,

Je vous remercie pour votre aide.

Je dirai que j'ai vite appris aux côtés de xorsankukai .

Je suis encore face à un problème, j'essaye d'utiliser un recherchev sur ma colonne douleur, cependant ma fonction ne tient compte uniquement que de la dernière valeur d'une cellule comportant plus d'une valeur.

Je souhaiterai avoir pour chaque douleur le niveau correspondant.

Si vous avez des pistes à me proposer .

Bien cordialement,

ss1021

1rechervchev.xlsm (23.44 Ko)

Bonjour,

Je souhaiterai avoir pour chaque douleur le niveau correspondant.

Voici une piste.....

Cordialement,

Bonsoir xorsankukai,

Cela répond exactement à ma question .

Merci beaucoup pour tes réponses .

Bien cordialement,

ss1021

Rechercher des sujets similaires à "extraction donnees entre parentheses"