VBA Extraire chaîne de longueur variable de droite à gauche à partir d'un caractère x

clochete

XLDnaute Nouveau
Bonjour à tous,

Je tourne en rond et j'ai besoin de votre aide. En VBA, je dois extraire une chaîne de caractère spécifique perdu au milieu d'une autre longue chaîne (jamais la même). La chaîne à extraire est toujours une contenance (ml) mais sa longueur est variable (3 ml, 0,5 ml, 10:20 ml, 2000 ml...).

J'ai essayé différente construction avec les fonctions Mid, Instr, Right... mais rien à faire, je n'y arrive pas.

Pouvez-vous m'éclairer svp ?

Mille mercis d'avance,

Clochete
 

Staple1600

XLDnaute Barbatruc
Re : VBA Extraire chaîne de longueur variable de droite à gauche à partir d'un caract

Bonsoir à tous

Clochete
Sans voir plus avant comment sont agencées tes données faute d'un fichier exemple (anonymisé) que tu n'as pas pris le temps de joindre, je suggère donc au pif l'emploi de Données/Convertir , Délimité, Séparateur : ESPACE

Mais si tu joins un fichier (juste un cours extrait), on pourra y voir plus clair et tester nos propositions avant de te les soumettre dans le fil ;)
 

clochete

XLDnaute Nouveau
Re : VBA Extraire chaîne de longueur variable de droite à gauche à partir d'un caract

Bonsoir Staple1600,

Mes données concernent des caractéristiques produits saisie à la chaîne dans une cellule. Les chaînes de caractères peuvent être très longues et l'emploi de données/convertir pourrait me renvoyer des centaines de colonnes. Ingérable.

Je joins une fichier exemple. Je dois extraire vers la droite, en plus de "ml" tous le groupe de caractère précédent jusqu'à l'espace. Cette chaîne de caractère peut se trouver n'importe où dans la cellule.

Merci de ton aide.
Clochete
 

Pièces jointes

  • Extrait ml.xlsx
    8.9 KB · Affichages: 58

Staple1600

XLDnaute Barbatruc
Re : VBA Extraire chaîne de longueur variable de droite à gauche à partir d'un caract

Re

Merci pour le fichier exemple.

Ce cas de figure semble pile poil correspondre à ce sait faire RegExp (expressions régulières)
Voir ce fil de JNP en guise de tutoriel.
Il ne reste plus qu' à trouver le bon pattern ;)
J'essaie de mon côté.
J'espère que d'autres membres d'XLD ne manqueront pas de plonger le nez dans le pattern ;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : VBA Extraire chaîne de longueur variable de droite à gauche à partir d'un caract

Bonsoir clochete, Staple1600 :),

Un essai en VBA (j'ai beaucoup de mal à utiliser efficacement RegExp :mad:)

Deux fonctions personnalisées utilisables sur les feuilles de calcul ou en VBA: contenanceA et contenanceB qui donnent deux résultats différents.

Le code est dans module1.
VB:
Function contenanceA$(x$, y$)
Dim tablo, i&, a$, j$
   tablo = Split(Application.Trim(x$))
   For i = LBound(tablo) To UBound(tablo)
      If InStr(1, tablo(i), y, vbTextCompare) > 0 Then
         If i > LBound(tablo) Then
            a = tablo(i - 1)
            j = Len(a)
            Do Until j = 0
               If Not IsNumeric(Mid(a, j, 999)) Then Exit Do
               j = j - 1
            Loop
            If IsNumeric(Mid(a, j + 1, 999)) Then
               contenanceA = Mid(a, j + 1, 999) & " " & y
               Exit For
            End If
         End If
      End If
   Next i
End Function

Function contenanceB$(x$, y$)
Dim tablo, i&, a$, j$
   tablo = Split(Application.Trim(x$))
   For i = LBound(tablo) To UBound(tablo)
      If InStr(1, tablo(i), y, vbTextCompare) > 0 Then
         If i > LBound(tablo) Then
            contenanceB = tablo(i - 1) & " " & tablo(i)
            Exit For
         End If
      End If
   Next i
End Function
 

Pièces jointes

  • clochete-Extrait ml v1.xlsm
    18.4 KB · Affichages: 63
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : VBA Extraire chaîne de longueur variable de droite à gauche à partir d'un caract

(re)Bonsoir clochete,

Une version v2a qui accepte que l'expression recherchée (ex: "ml") soit accolée à l'expression à extraire.
 

Pièces jointes

  • clochete-Extrait ml v1a.xlsm
    18.9 KB · Affichages: 59
Dernière édition:

clochete

XLDnaute Nouveau
Re : VBA Extraire chaîne de longueur variable de droite à gauche à partir d'un caract

Bonsoir mapomme,

Je suis scotché ! J'ai pas d'autre mot. Et je peux l'utiliser avec tous types de chaîne. Terrible !

Si je peux me permettre une question. Si la chaîne de départ contient deux caractères mini (ml, kg, mm) c'est nickel mais si la valeur est un caractères unique comme l (litre) ou g (gramme), comment identifier le bon l. Avec un ajout d'espace ? mais =contenance(A1;" l") ou =contenance(A1;"l ") ne fonctionne pas. Comment dois-je m'y prendre ?

Merci mille fois pour cette fonction
Clochete
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : VBA Extraire chaîne de longueur variable de droite à gauche à partir d'un caract

(re,re) Bonsoir clochete,

[...] Si je peux me permettre une question. Si la chaîne de départ contient deux caractères mini (ml, kg, mm) c'est nickel mais si la valeur est un caractères unique comme l (litre) ou g (gramme), comment identifier le bon l. Avec un ajout d'espace ? mais =contenance(A1;" l") ou =contenance(A1;"l ") ne fonctionne pas. Comment dois-je m'y prendre ? [...]

Une tentative avec la version v2 ?

nota: juste par curiosité, quel type de fonction vous convient-il ? A ou B ?
 

Pièces jointes

  • clochete-Extrait ml v2.xlsm
    19.5 KB · Affichages: 76
Dernière édition:

clochete

XLDnaute Nouveau
Re : VBA Extraire chaîne de longueur variable de droite à gauche à partir d'un caract

re, re, re....

Les deux me conviennent au-delà de mes attentes car je traite les deux cas de figure. Quel temps gagné !
mapomme, vous venez d'apporter une énorme contribution à un projet public gigantissime relatif à la recherche médicale et chaque contribuable de France vous remercie, moi y compris ;-)

Chapeaux !!!!
Clochete
 

Statistiques des forums

Discussions
312 085
Messages
2 085 196
Membres
102 814
dernier inscrit
JLGalley