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

  • Initiateur de la discussion Initiateur de la discussion clochete
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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 😉
 
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

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 😉
 
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 😡)

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

Dernière édition:
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
 
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

Dernière édition:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour