[VBA] Trouver une sous-chaine selon un pattern

Le
ThierryP
Bonjour le forum !

Je cherche à extraire une sous-chaine de 5 chiffres dans une chaine, s=
achant que cette sous-chaine n'est pas forcément toujours au même=
endroit dans la chaine.

Je pense qu'il faut passer par une expression régulière..que j=
e ne maitrise absolument pas !

Toute piste sera la bienvenue !

Merci d'avance,

ThierryP
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26528307
Le 15/10/19 à 04:44, ThierryP a écrit :
Bonjour le forum !
Je cherche à extraire une sous-chaine de 5 chiffres dans une chaine, sachant que cette sous-chaine n'est pas forcément toujours au même endroit dans la chaine.
Je pense qu'il faut passer par une expression régulière.....que je ne maitrise absolument pas !
Toute piste sera la bienvenue !
Merci d'avance,
ThierryP


Bonjour,
Donne des exemples de sous-chaine à extraire.
Quelles conditions une sous-chaine doit avoir pour que tu décides de
l'extraire? Comme ta question est posée, il est difficile de concevoir
une solution.
MichD
Péhemme
Le #26528320
Bonjour ThierryP, bonjour Denis,
Récemment, certainement sur ce forum un contributeur a publié une réponse
utilisant :
Set RegExp = CreateObject("vbscript.regexp")
qui m'a semblé extrêmement puissant.
La difficulté d'utilisation de regexp est de définir le "pattern" dans le
langage approprié.
Denis a raison, quelle chaîne précise souhaites-tu extraire ?
Peut-être que cet outil peut répondre à ta demande ?
Bonne journée à tous
Michel

"MichD" a écrit dans le message de groupe de discussion :
qo45nc$v3t$
Le 15/10/19 à 04:44, ThierryP a écrit :
Bonjour le forum !
Je cherche à extraire une sous-chaine de 5 chiffres dans une chaine,
sachant que cette sous-chaine n'est pas forcément toujours au même endroit
dans la chaine.
Je pense qu'il faut passer par une expression régulière.....que je ne
maitrise absolument pas !
Toute piste sera la bienvenue !
Merci d'avance,
ThierryP


Bonjour,
Donne des exemples de sous-chaine à extraire.
Quelles conditions une sous-chaine doit avoir pour que tu décides de
l'extraire? Comme ta question est posée, il est difficile de concevoir
une solution.
MichD
ThierryP
Le #26528318
Bonjour Denis,
Effectivement, j'ai posté un peu vite !!
Je recherche (à titre d'exemple) la sous-chaine 21325 dans une chaine "PO21325 - Order Confirmation bla bla bla", mais la position dans la chaine peut varier (ex : "bla bla bla 21325")
J'espère que c'est plus clair ainsi !
ThierryP
Bonjour,
Donne des exemples de sous-chaine à extraire.
Quelles conditions une sous-chaine doit avoir pour que tu décides de
l'extraire? Comme ta question est posée, il est difficile de concevo ir
une solution.
MichD
ThierryP
Le #26528321
Bonjour Péhemme, re-bonjour Denis,
C'est ce que j'avais vu il y a quelque temps et c'est effectivement ce qui doit répondre à ma demande !
Et comme tu le soulignes, c'est la création du pattern qui n'est pas s imple si on ne maitrise pas les expressions régulières ni comment les intégrer dans un script !
Denis est sur le coup, je ne suis pas inquiet !!!
ThierryP
Le mardi 15 octobre 2019 12:31:38 UTC+2, Péhemme a écrit :
Bonjour ThierryP, bonjour Denis,
Récemment, certainement sur ce forum un contributeur a publié u ne réponse
utilisant :
Set RegExp = CreateObject("vbscript.regexp")
qui m'a semblé extrêmement puissant.
La difficulté d'utilisation de regexp est de définir le "patter n" dans le
langage approprié.
Denis a raison, quelle chaîne précise souhaites-tu extraire ?
Peut-être que cet outil peut répondre à ta demande ?
Bonne journée à tous
Michel
Péhemme
Le #26528331
Salut ThierryP,
En attendant Denis, peux-tu essayer cela :
Function Nb_A_Cinq_Chiffres(expression As String) As Boolean
Dim reg As Object
Set reg = CreateObject("vbscript.regexp")
reg.Pattern = "d{5}" 'équivalant de : reg.Pattern = "[0-9]{5}"
Nb_A_Cinq_Chiffres = reg.Test(expression)
End Function
Sub Test()
MsgBox Nb_A_Cinq_Chiffres("PO21325 - Order Confirmation bla bla bla")
End Sub
Bonne chance :-)))
Michel

"ThierryP" a écrit dans le message de groupe de discussion :

Bonjour Péhemme, re-bonjour Denis,
C'est ce que j'avais vu il y a quelque temps et c'est effectivement ce qui
doit répondre à ma demande !
Et comme tu le soulignes, c'est la création du pattern qui n'est pas simple
si on ne maitrise pas les expressions régulières ni comment les intégrer
dans un script !
Denis est sur le coup, je ne suis pas inquiet !!!
ThierryP
Le mardi 15 octobre 2019 12:31:38 UTC+2, Péhemme a écrit :
Bonjour ThierryP, bonjour Denis,
Récemment, certainement sur ce forum un contributeur a publié une réponse
utilisant :
Set RegExp = CreateObject("vbscript.regexp")
qui m'a semblé extrêmement puissant.
La difficulté d'utilisation de regexp est de définir le "pattern" dans le
langage approprié.
Denis a raison, quelle chaîne précise souhaites-tu extraire ?
Peut-être que cet outil peut répondre à ta demande ?
Bonne journée à tous
Michel
Péhemme
Le #26528335
Par ailleurs, je me demande dans quelle situation on doit cocher la
référence :
Microsoft VBScipt Regular Expressions 5.5
Nul doute que Denis va nous faire un cours sur ce sujet.
:-))
Bien amicalement
Michel
"ThierryP" a écrit dans le message de groupe de discussion :

Bonjour Péhemme, re-bonjour Denis,
C'est ce que j'avais vu il y a quelque temps et c'est effectivement ce qui
doit répondre à ma demande !
Et comme tu le soulignes, c'est la création du pattern qui n'est pas simple
si on ne maitrise pas les expressions régulières ni comment les intégrer
dans un script !
Denis est sur le coup, je ne suis pas inquiet !!!
ThierryP
Le mardi 15 octobre 2019 12:31:38 UTC+2, Péhemme a écrit :
Bonjour ThierryP, bonjour Denis,
Récemment, certainement sur ce forum un contributeur a publié une réponse
utilisant :
Set RegExp = CreateObject("vbscript.regexp")
qui m'a semblé extrêmement puissant.
La difficulté d'utilisation de regexp est de définir le "pattern" dans le
langage approprié.
Denis a raison, quelle chaîne précise souhaites-tu extraire ?
Peut-être que cet outil peut répondre à ta demande ?
Bonne journée à tous
Michel
ThierryP
Le #26528338
Re-bonjour Michel,
En première approche, ta macro fonctionne très bien !
Je l'ai un peu retouchée grâce à JB, dont le site (http://bo isgontierjacques.free.fr/) reste une mine ! ça donne :
Function Nb_A_Cinq_Chiffres(expression As String) As String
Dim reg As Object
Set reg = CreateObject("vbscript.regexp")
reg.Pattern = "d{5}"
reg.Global = False
Set x = reg.Execute(expression)
If x.Count > 0 Then Nb_A_Cinq_Chiffres = x(0) Else Nb_A_Cinq_Chiffres = ""
End Function
Merci pour le coup de main !
ThierryP
Le mardi 15 octobre 2019 16:41:34 UTC+2, Péhemme a écrit :
Salut ThierryP,
En attendant Denis, peux-tu essayer cela :
Function Nb_A_Cinq_Chiffres(expression As String) As Boolean
Dim reg As Object
Set reg = CreateObject("vbscript.regexp")
reg.Pattern = "d{5}" 'équivalant de : reg.Pattern = "[0-9]{5}"
Nb_A_Cinq_Chiffres = reg.Test(expression)
End Function
Sub Test()
MsgBox Nb_A_Cinq_Chiffres("PO21325 - Order Confirmation bla bla bla")
End Sub
Bonne chance :-)))
Michel
MichD
Le #26528353
Le 15/10/19 à 11:11, Péhemme a écrit :
Par ailleurs, je me demande dans quelle situation on doit cocher la
référence :
Microsoft VBScipt Regular Expressions 5.5

Si tu déclares la bibliothèque "Microsoft VBScipt Regular Expressions
5.5", la fonction ressemble à ceci :
'------------------
Function Nb_A_Cinq_Chiffres(expression As String) As Boolean
Dim reg As RegExp
Set reg = CreateObject("vbscript.regexp")
reg.Pattern = "d{5}" 'équivalant de : reg.Pattern = "[0-9]{5}"
Nb_A_Cinq_Chiffres = reg.test(expression)
End Function
'------------------
La déclaration de la bibliothèque te permet d'attribuer le "type" à la
variable "Reg" comme "RegExp" au lieu de "Object"
En déclarant la variable, dim Reg As RegExp
En plus d'être un peu plus rapide de quelques nanosecondes, dans ton
code, tu vas avoir accès aux propriétés et méthodes des objets. Ceci est
beaucoup plus simple surtout lorsque nous ne connaissons pas bien ces
attributs.
Par exemple, si tu tapes dans la procédure Reg. Immédiatement après le
point apparaît la liste des propriétés ou méthodes de l'objet "Reg" au
lieu de les deviner ou de les apprendre par coeur, en plus, cela évite
les fautes d'orthographe...
MichD
Péhemme
Le #26528363
Bonsoir Denis,
Merci de tes explications.
À l'instar de ThierryP, il me faut maintenant travailler les "Expressions
Rationnelles".
:-))
Bien amicalement
Michel
"MichD" a écrit dans le message de groupe de discussion :
qo4t7p$eko$
Le 15/10/19 à 11:11, Péhemme a écrit :
Par ailleurs, je me demande dans quelle situation on doit cocher la
référence :
Microsoft VBScipt Regular Expressions 5.5

Si tu déclares la bibliothèque "Microsoft VBScipt Regular Expressions
5.5", la fonction ressemble à ceci :
'------------------
Function Nb_A_Cinq_Chiffres(expression As String) As Boolean
Dim reg As RegExp
Set reg = CreateObject("vbscript.regexp")
reg.Pattern = "d{5}" 'équivalant de : reg.Pattern = "[0-9]{5}"
Nb_A_Cinq_Chiffres = reg.test(expression)
End Function
'------------------
La déclaration de la bibliothèque te permet d'attribuer le "type" à la
variable "Reg" comme "RegExp" au lieu de "Object"
En déclarant la variable, dim Reg As RegExp
En plus d'être un peu plus rapide de quelques nanosecondes, dans ton
code, tu vas avoir accès aux propriétés et méthodes des objets. Ceci est
beaucoup plus simple surtout lorsque nous ne connaissons pas bien ces
attributs.
Par exemple, si tu tapes dans la procédure Reg. Immédiatement après le
point apparaît la liste des propriétés ou méthodes de l'objet "Reg" au
lieu de les deviner ou de les apprendre par coeur, en plus, cela évite
les fautes d'orthographe...
MichD
ThierryP
Le #26528419
Bonjour Denis,
Merci une fois de plus pour tes explications !
ThierryP
Publicité
Poster une réponse
Anonyme