XL 2021 Extraire valeur entre caractère par VBA

  • Initiateur de la discussion Initiateur de la discussion Rabeto
  • 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 !

Rabeto

XLDnaute Occasionnel
Bonjour,

J'aimerai svp extraire la valeur entre 2 caractères par VBA (premier caractère / et second -)

Valeur à extraire en rouge entre (/ et -)= /XXX/YYY/JJ-MM-AAA-QQ-RR-VALEUR-VILLE-PRIX

Voici le code à adapter selon les besoins : .Cells(i + 3, 12).Value = Split(Split(tbl1(i), "/")(3), "-")(-6)

Merci pour votre aide,
 
Solution
Bonjour à tous ,


Si V est la valeur à traiter alors l'expression suivante extrait la chaine entre le dernier "/" et le cinquième "-" :
VB:
= Mid(Left(V, InStr(Replace(V, "-", "^", , 4), "-") - 1), InStrRev(V, "/") + 1)
Bonjour @Rabeto

Je te propose :
20240604_115841.gif

VB:
Sub Extraction()
MaValeur = [A1] 'A adapter bien sur
MsgBox Left(Split(MaValeur, "/")(UBound(Split(MaValeur, "/"))), 15)
End Sub
 
Merci Phil69970 et mapomme

Que signifie la valeur 4 dans la réponse de mapomme svp ?
est ce la position de la dernière valeur à extraire venant de la fin ?
c'est assez simple comme raisonnement
il fait un replace en mémoire des "-" sauf qu'il le fait sur la 4 premiers seulement

le instr est fait dans un anonyme
il est facile ensuite de repérer le premier "\" en partant de la droite " et le 5eme "-" puisqu'il est tout seul
 
Bonjour à toutes et à tous
une petite fonction ...
VB:
Function ExtrairePartie(valeur As Variant) As String

     Dim txt As String
     txt = valeur
     ExtrairePartie = ""
     nbSlash = Len(txt) - Len(Replace(txt, "/", ""))
     nbMoins = Len(txt) - Len(Replace(txt, "-", ""))
     If nbSlash <> 3 Or nbMoins <> 7 Then Exit Function
     ExtrairePartie = Split(Split(WorksheetFunction.Substitute(txt, "-", "¤", 5), "/")(3), "¤")(0)
    
End Function

Exemple en pièce jointe
 

Pièces jointes

re
Perso je pense que @mapomme a donné une solution précise
et me semble t il la plus économique et simple a comprendre

alors oui si vous voulez transformons en fonction mais pas la peine de faire de l'UAG
VB:
Function PartOfchain(v, FirstChar$, charplit$, IndexTableChar)
PartOfchain = Mid(Left(v, InStr(Replace(v, charplit, "^", , IndexTableChar), charplit) - 1), InStrRev(v, FirstChar) + 1)
End Function
la formule
=PartOfchain(A1;"/";"-";4)
pas la peine d'en rajouter les argument sont suffisamment explicites
comme ca on a pas besoins de savoirs combien mesure les chaines
entres les charsplit (en l'occurrence ici les "-")
 
En utilisant les expressions régulières :
VB:
Sub Capture_JP()
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
regex.pattern = "/(\w+-\w+-\w+-\w+-\w+)-" '
On Error GoTo Erreur
        Set matches = regex.Execute([A1])
        Debug.Print matches(0).submatches(0)
Exit Sub
Erreur:
  Debug.Print "Rien"
End Sub
Le motif (pattern) permet de "capturer" ce qui est entre parenthèses sachant que \w+ signifie 1 ou plus caractères alphanumériques
 
bonsoir @AtTheOne
tu es loin d'être ignorant 🤣
UAG =usine à gaz ou si tu préfère une lionelyte aigue 🤣🤣🤣

plus sérieusement je dis usine à gaz (sans méchanceté) par ce que 3 split (me semble til)
ca fait beaucoup pour une petite chaine
je suis d'accords avec toi sur le besoins de gestion d'erreur
perso je ne l'ai pas fait tout simplement par ce que là encore on peut laisser excel faire en englobant la formule dans un SIERREUR(.......)
peut être effectivement un on error resume next tout cours au cas ou
sinon après tout les chemins mènent à Rome tout dépend des basket que l'on porte
les ampoules ça fait mal 🤣
 
Re
3 split (me semble ti
Hé non ! 2 et la fonction Excel SUBSTITUTE. et sans gestion d'erreur ça peut se résumer à
VB:
ExtrairePartie = Split(Split(WorksheetFunction.Substitute(txt, "-", "¤", 5), "/")(3), "¤")(0)
Pas trop loin de
VB:
PartOfchain = Mid(Left(v, InStr(Replace(v, charplit, "^", , IndexTableChar), charplit) - 1), InStrRev(v, FirstChar) + 1)
😉
Mais c'est moins adaptable que ta proposition avec ses 4 paramètres ...

1717526247267.png


En parlant UAG des nouvelles de @Usine à gaz ?
A bientôt
 
- 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

Discussions similaires

Réponses
13
Affichages
712
  • Question Question
Microsoft 365 Programme VBA
Réponses
6
Affichages
1 K
Retour