[VBA] Trouver une valeur entre 2 expressions d'une même cellule

taicafard

XLDnaute Nouveau
Bonjour à tous,


Je cherche à créer une macro qui irait rechercher le mot (pas nécessairement du texte, et de longueur variable) qui se situe entre 2 expressions connues dans une cellule donnée.

Je m''explique: j'ai un tableau avec différentes colonnes. La dernière colonne est une colonne "commentaires". Les commentaires sont toujours structurés de la même manière: il s'agit d'un texte généré automatiquement par un autre programme, assez long et qui contient un mot que je souhaiterais extraire dans une autre cellule.

Je voudrais isoler une valeur dans ce commentaire (voir image), sachant qu'elle sera toujours précédée de la phrase "Cannot find mapping in the customizer with the value" et suivie de "and first criteria"

soit ceci: Cannot find mapping in the customizer with the value XXXXXX and first criteria


Voici l'image:

Existe-t-il une fonction Excel ou VBA pour retrouver cette valeur?

Comment pourrais-je procéder ?
 

porcinet82

XLDnaute Barbatruc
Re : [VBA] Trouver une valeur entre 2 expressions d'une même cellule

Salut,

Voici un bout de code par macro (en supposant que tes données de départ soient en colonne A, le résultat étant affiché en colonne B) :
Code:
Sub test()
Dim i As Integer, long_chaine As Integer
For i = 1 To Range("A65536").End(xlUp).Row
    long_chaine = Len("Cannot find mapping in the customizer with the value")
    Cells(i, 2).Value = Mid(Cells(i, 1).Value, long_chaine + 1, InStr(1, Cells(i, 1).Value, "and first criteria") - long_chaine - 1)
Next i
End Sub

@+
 

taicafard

XLDnaute Nouveau
Re : [VBA] Trouver une valeur entre 2 expressions d'une même cellule

Merci pour la réponse rapide!

Il semblerait qu'il y ait une erreur dans ta ligne "Cells(i, 2)..." (erreur 5, invalid procedure call or argument)

et je ne vois pas de référence à 'B' dans ton code.
(pour info: la cellule de départ est la colonne I et la cellule de destination est la colonne F)
 

RENAUDER

Nous a quitté
Repose en paix
Re : [VBA] Trouver une valeur entre 2 expressions d'une même cellule

Bonjour,

Code:
Sub Split2()
    Dim C As Range
    Dim j As Integer
    Dim k As Integer
    For Each C In Selection
        j = 1
        Do While Not (IsNumeric(Mid(C.Value, j, 1))) And j <= Len(C)
            j = j + 1
        Loop
        k = j
        Do While IsNumeric(Mid(C.Value, k, 1)) And k <= Len(C)
            k = k + 1
        Loop
        'C.Offset(0, 1) = Left(C, j - 1)
        C.Offset(0, 2) = Mid(C, j, k - j)
       ' C.Offset(0, 3) = Mid(C, k, Len(C) - (k - 1))
    Next C
End Sub
 

RENAUDER

Nous a quitté
Repose en paix
Re : [VBA] Trouver une valeur entre 2 expressions d'une même cellule

BONJOUR?

C represente la cellule sélectionnée
For Each C In Selection

On inscrit le résultat
C.Offset(0, 2) = Mid(C, j, k - j) ou C est la cellule sélectionné donc sur la même ligne et avec un décalage de 2 colonnes (Offset(0, 2))

J et K sont des compteurs
j = j + 1
k=k+1
 

taicafard

XLDnaute Nouveau
Re : [VBA] Trouver une valeur entre 2 expressions d'une même cellule

Je ne comprend pas bien ce que fait votre code en fait ?

Je n'ai peut être pas été assez clair, voici quelques infos supplémentaires:

Dans une colonne 'commentaires' (colonne I), il y a un texte généré automatiquement dans lequel il y a une valeur qui m'intéresse et que je voudrais isoler. Cette valeur sera toujours entourée des même mots (la phrase qui précède et qui suit est connue). Je voudrais extraire cette valeur dans la colonne F.

Est-ce que votre code peut faire ceci ?


Je l'ai testé chez moi, il travaille mais il n'y a aucune modification.
 

porcinet82

XLDnaute Barbatruc
Re : [VBA] Trouver une valeur entre 2 expressions d'une même cellule

re, Salut Renauder,

Essais comme ceci, mais chez moi, le code fonctionnait tel quel (je te laisse modifier les lettres de colonnes) :
Code:
Sub test()
Dim i As Integer, long_chaine As Integer
For i = 1 To Range("A65536").End(xlUp).Row
    long_chaine = Len("Cannot find mapping in the customizer with the value")
    Range("B" & i).Value = Mid(Range("A" & i).Value, long_chaine + 1, InStr(1, Range("A" & i).Value, "and first criteria") - long_chaine - 1)
Next i
End Sub

Sinon, met nous un exemple en pièce jointe.

@+
 

Discussions similaires

Statistiques des forums

Discussions
314 489
Messages
2 110 133
Membres
110 682
dernier inscrit
mgaudi