Extraire plusieurs chaines de caractères d'une colonne

Bonjour,

J'ai un programme avec une boucle qui parcourt une colonne j'arrive a extraire seulement la première chaine mais je n'arrive pas a récupérer la deuxième chaine de caractère qui est entre parenthèses.

Et c'est pour cela que j'ai mis la ligne "DeuxiemeCh = ExtraireChaineDelimitee(ChaineOriginale2, LimiteGauche2, LimiteDroite2)" en commentaire pour l'instant.

Le but étant de lire (extraire) les données entre les parenthèses, exemple cellule O1: (Z123_AA.E4) … (Z12_CESJ12AA.19) je voudrais récupérer Z123_AA.E4 et Z12_CESJ12AA.19 et ensuite a la place de "MsgBox PremiereCh" dans le code je voudrais chercher ces chaine de caractères (Z123_AA.E4 et Z12_CESJ12AA.19) sur la feuille 2 colonnes E et mettre en couleur rouge la cellule

Merci d'avance

Voici le fichier excel et mon code la première partie étant une fonction et le corps principal est après :

Public Function ExtraireChaineDelimitee(ChaineSource As String, Optional LimiteAvant As String = "", Optional LimiteApres As String = "")

Dim ExtraitPositionDebut As Variant

On Error GoTo FunctionErreur
If InStr(1, ChaineSource, LimiteAvant) = 0 Then
    ExtraireChaineDelimitee = CVErr(xlErrNA)
    Exit Function
Else
    ExtraitPositionDebut = InStr(1, ChaineSource, LimiteAvant) + Len(LimiteAvant)
End If

If LimiteApres = "" Then
    ExtraitPositionFin = Len(ChaineSource)
Else
    ExtraitPositionFin = InStr(1, ChaineSource, LimiteApres) - 1
End If
ExtraireChaineDelimitee = Mid(ChaineSource, ExtraitPositionDebut, ExtraitPositionFin - ExtraitPositionDebut + 1)
Exit Function

FunctionErreur:
    ExtraireChaineDelimitee = CVErr(xlErrNA)
    'ExtraireChaineDelimitee = ""
End Function

Sub ExempleExtractionDeChaine()

Application.ScreenUpdating = False
'On Error GoTo ExempleErreur
Dim ChaineOriginale1 As String
Dim ChaineOriginale2 As String
Dim LimiteGauche As String
Dim LimiteDroite As String
Dim LimiteGauche2 As String
Dim LimiteDroite2 As String
Dim Var As String
Dim Col_tests As String
Dim PremiereCh As String
Dim DeuxiemeCh As String

Set FL1 = Worksheets("Feuil1")
    NoCol = 15
    derniereLigne = 10
    'Limite 1ere chaine
    LimiteGauche = "("
    LimiteDroite = ")"
    'Limite 2e chaine
    LimiteGauche2 = "... ("
    LimiteDroite2 = ")"
'boucle qui parcourt la colonne
    For NoLig = 1 To derniereLigne
        Worksheets("Feuil1").Select
        Var = FL1.Cells(NoLig, NoCol)
        Col_tests = FL1.Cells(NoLig, NoCol).Offset(, -3).Value
        If Col_tests <> "" Then
        ChaineOriginale1 = Var
        ChaineOriginale2 = Var
        PremiereCh = ExtraireChaineDelimitee(ChaineOriginale1, LimiteGauche, LimiteDroite)
'        DeuxiemeCh = ExtraireChaineDelimitee(ChaineOriginale2, LimiteGauche2, LimiteDroite2)
        MsgBox PremiereCh
'        MsgBox DeuxiemeCh
        End If
'        Exit Sub
'ExempleErreur:
'        MsgBox "Une erreur est survenue..."

    Next
      Set FL1 = Nothing
Application.ScreenUpdating = True
End Sub

Bonjour,

Utilise les expressions régulières

Sub test()
For i = 2 To 5
    For j = 1 To 5
        Cells(i, j + 1) = extraction(Cells(i, 1).Value, Cells(1, j + 1).Value, Cells(1, 1).Value)
    Next
Next
End Sub

Function extraction(source As String, indice As Integer, code As String)
    extraction = ""
    On Error Resume Next
    Set obj = CreateObject("vbscript.regexp")
    obj.Pattern = code
    obj.Global = True
    Set res = obj.Execute(source)
    extraction = res(indice - 1)
End Function

avec

\(([A-Z1-9_.])+\)

Bonjour. Proposition pour les 4 lignes proposées

Sub Macro1()
    Dim i As Integer, tablo() As String

    For i = 1 To 4
        tablo = Split(Cells(i, 15), "(")
        tablo(1) = Left(tablo(1), Len(tablo(1)) - 4)
        Cells(i, 12) = tablo(1)
        tablo(2) = Left(tablo(2), Len(tablo(2)) - 1)
        Cells(i, 13) = tablo(2)
    Next i
End Sub

Merci pour votre réactivité, enfaite c'est plus compliqué que ca car la chaine que je souhaite extraire peut varier en taille exemple "Z12_CESJ12AA.19" peut être aussi "Z12_CESJ12AA.9" c'est pour cela que je souhaite utiliser ce qui est entre les parenthèses et non en comptant le nombre de caractère en partant de la gauche.

Et erreur de copier coller dans la feuille 2 je n'ai pas de parenthèses c'est pour ca que je veux extraire uniquement ce qu'il ya dedans , exemple : Z123_AA.E4

c'est pour cela que je souhaite utiliser ce qui est entre les parenthèses et non en comptant le nombre de caractère en partant de la gauche

donc ma solution en expression régulière fonctionne

sinon, dans le même esprit qu'optimix, voici une fonction utilisant split

Sub test()
For i = 2 To 5
    tbl = Split(Cells(i, 1), "(")
    For j = 1 To UBound(tbl)
        Cells(i, j + 1) = Split(tbl(j), ")")(0)
    Next
Next
End Sub
la chaine que je souhaite extraire peut varier en taille

Je pense que tu as dû lire le code un peu en diagonale, car les chaînes peuvent être de longueurs variables. C'est la fonction Left(Len()) qu'il faut regarder et non pas la fonction Left(). Le principal est que tu aies une solution.

Merci à vous deux, avec split en effet sa marche très bien

Bonne journée

Rechercher des sujets similaires à "extraire chaines caracteres colonne"