Expression Régulières : comment faire ?

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

LPandre

XLDnaute Impliqué
Bonjour,
Où puis je trouver un cours sur les expression régulières ?
Leur syntaxe, leur "code", etc.
J'ai regardé sur le forum, mais le peu que j'ai trouvé ne me permet pas de comprendre : elles sont toutes différentes !

J'ai reçu un code macro contenant ça :
myRegExp.Pattern = "^lot([0-9]+).*$"

Je comprends qu'il s'agit d'un modèle pour un expression régulière, mais après? :
Pourquoi le ^ ? pourquoi le ([0-9]+) , pour quoi le $ ?
Bref ???
Par avance merci.
 
Re : Expression Régulières : comment faire ?

Bonjour LPandre,

Je ne pourrais pas trop t'aider, j'ai juste mis ce cours de coté (en me disant que je regarderai un jour quand j'aurais le temps...).
Apparemment, le ^ signifie "Négation ou début de ligne" et le $ signifie "Fin de ligne".
(Chap 3.2. Les métacaractères)

a+
 
Re : Expression Régulières : comment faire ?

Bonjour à tous


Quand tu as gouté à la puissance de regexp, tu ne peux plus t'en passer 😉

Justement: tape ce mot clé dans un moteur de recherche : regexp

et tu en auras pour des heures de lectures.

Tu peux aussi faire une recherche sur le forum
- Mots-clés :regexp
Trouver les messages de : Staple1600
et aussi:
- Mots-clés :regexp
Trouver les messages de : cafeine

tu trouveras des exemples d'utilisation de regexp en vba
 
Re : Expression Régulières : comment faire ?

Salut Stapple1600,

j'avais cherché sur le forum et sur le web "expression régulières", mais le résultat : bof.

Les liens de tototiti et mromain me permettent d'essayer de comprendre le "code" des RegExp, et du coup de mieux ( moins mal ?) comprendre les exemples trouvés dans tes messages et ceux de caféine.

De nouveau merci à vous trois.
 
Re : Expression Régulières : comment faire ?

re :
après quelques heures de lecture et prise d'Aspirine, je commence à piger l'utilité et la puissance des RegExp.
J'ai donc souhaité commencer sur un exemple déja résolu, le fichier "extraire" de Gagliardi au lien ci dessous :
https://www.excel-downloads.com/threads/extraire-rechercher-numeros-adresse.92690/

J'ai copié le fichier sur mon disque, j'ai copié le code donné par caféine.
Sauf que lorsque je l'exécute, j'ai un message d'erreur :
erreur de compilation Type défini par l'utilisateur non défini.

J'ai vraiment fait du copier/coller.

Pour l'exécution je demande à insérer une formule personnalisée, je choisi celle de caféine nommée "GetAddressElement", dans la première case "strAddr" de la formule je choisi la cellule à "casser" ici C2, dans la deuxième case je tape numéro car je souhaite extraire le numéro de la rue.

J'utilise Excel 2003, y'a t il un truc que j'ai raté ?

Par avance merci.
 
Re : Expression Régulières : comment faire ?

Re :
j'ai progressé avec les lectures proposées, et "l'analyse" (bien grand mot 🙂) des codes de Staple1600 et cafeine.
J'ai même réussi à modifier (un peu) pour extraire les numéros de rue avec une lettre dérrière.
MAIS...ça coince encore pas mal. Ci joint un fichier avec en colonne B une saisie d'adresses, en colonne C la fonction perso que j'ai utilisée, en D le résultat obtenu, en E celui attendu, et en F mes remarques/questions.
Pour ne pas mettre de macro dans le fichier, je vous copie les 2 codes fonction utilisés pour faire l'extraction.
NB : je pense que des pros des formules, arriveraient au résultat souhaité, mais je souhaite vraiment y arriver avec les RegExp/fonctions.
Par avance un grand merci.

Code 1 (sur base de code cafeine):
******
Function GetAddressElement(ByVal strAddr As String, _
ByVal strPartie As String) As String
Dim Reg As Object: Set Reg = CreateObject("Vbscript.RegExp")
Dim r As Range
Reg.Global = True
Reg.IgnoreCase = True
Reg.MultiLine = False
Select Case strPartie
Case "numéro"
' motif qui définit la recherche de numéro
' suivi ou pas d'une lettre suivi ou pas de bis ou ter
Reg.Pattern = "^(\d+[a-z]?( bis| ter)?)"
If Reg.test(strAddr) Then
GetAddressElement = Reg.Execute(strAddr)(0).SubMatches(0)
Else
GetAddressElement = ""
End If
Case "voie"
' motif qui définit la recherche de nom de voie
Reg.Pattern = "(rue|impasse|avenue|boulevard|bvd|allée|allee|chemin|grande rue|ave )"
If Reg.test(strAddr) Then
GetAddressElement = Reg.Execute(strAddr)(0).SubMatches(0)
Else
GetAddressElement = ""
End If
Case "nom voie"
Reg.Pattern = "(rue|ave |impasse|avenue|boulevard|bvd|allée|allee|chemin|grande rue)(.*)"
If Reg.test(strAddr) Then
GetAddressElement = Reg.Execute(strAddr)(0).SubMatches(1)
Else
GetAddressElement = ""
End If
' celui là je l'ai crée en espérant extraire le code postal
Case "CP"
' je souhaite lui imposer l'extraction des 5 chiffres du code postal et rien
' que les chiffres du CP
Reg.Pattern = "\d{5}"
If Reg.test(strAddr) Then
GetAddressElement = Reg.Execute(strAddr)(0).SubMatches(1)
Else
GetAddressElement = ""
End If
End Select
Set Reg = Nothing
End Function
*****
code 2 ( sur base de code de Staple1600)
*****
Function CP(r As Range)
Dim chiffres As String
Dim oReg As Object
Set oReg = CreateObject("vbscript.regexp")
With oReg
.Global = True
.IgnoreCase = True
.Pattern = "\d{5}"
chiffres = .Replace(r.Text, "")
End With
CP = Val(chiffres)
End Function
*****
 
Re : Expression Régulières : comment faire ?

Salut le fil,

Je connais pas trop les REG mais voila ce que je te propose, découpé etape par étape l adresse.

De ce que j ai pu comprendre, dans une expression reguliere on ne peut pas lui dire de stop des qu il trouve un truc(comme le CP), apres je me trompe peut etre mais j ai pas reussi.

Ci dessous le code te permet de découper les adresses, il faut bien sur l alimenter exemple j ai mis que RUE et AVE.

Dis moi ce que t en penses.

Cordialement

Code:
Sub Cartman()
chaine = "28A TER RUE GRANDE RUE 75000 Paris"
Dim Reg As Object: Set Reg = CreateObject("Vbscript.RegExp")
'numéro
Reg.Pattern = "^([0-9]+[A-Z]?( BIS| TER)?)"
Set Matches = Reg.Execute(chaine)
For Each Match In Matches
    numero = Trim(Match.Value)
Next Match
'CP
Reg.Pattern = "[0-9]{5}"
Set Matches = Reg.Execute(chaine)
For Each Match In Matches
    C_P = Trim(Match.Value)
Next Match
'Ville
Reg.Pattern = "[0-9]{5}(.*)"
Set Matches = Reg.Execute(chaine)
For Each Match In Matches
    ville = Trim(Right(Match.Value, Len(Match.Value) - 5))
Next Match
'voie
Reg.Pattern = "^([0-9]+[A-Z]?( BIS| TER)?)[ ]+(RUE|AVE)"
Set Matches = Reg.Execute(chaine)
For Each Match In Matches
    Voie = Trim(Right(Match.Value, Len(Match.Value) - Len(numero)))
Next Match
'nom voie
'on retire le numero
tmp = Trim(Right(chaine, Len(chaine) - Len(numero)))
'on retire la voie
tmp = Trim(Right(tmp, Len(tmp) - Len(Voie)))
'on retire la ville
tmp = Trim(Left(tmp, Len(tmp) - Len(ville)))
'on retire le CP
tmp = Trim(Left(tmp, Len(tmp) - Len(C_P)))
nom_voie = tmp
End Sub
 
Re : Expression Régulières : comment faire ?

Bonjour,
j'ai du rater un truc, car je n'ai pas réussi à faire "tourner" ta macro.
MAIS...la lecture de ta réponse m'a permis de réfléchir autrement:
plutôt que de tout vouloir d'un coup, j'ai décomposé les extractions via plusieurs fonctions.

Merci à toi pour cette autre voie de réflexion.

Si quelqu'un sait comment extraire le code postal d'un seul coup et uniquement le cp via fonction + patern, je reste preneur.
 
Re : Expression Régulières : comment faire ?

Salut,

Ma macro marche sous excel 2000.
elle ne renvoi rien, juste elle alimente les variables.
A toi de dire ce que tu veux en faire.

Le code ci dessous te renvoie le code postal de la variable chaine dans la variable C_P :

Code:
'CP
Reg.Pattern = "[0-9]{5}"
Set Matches = Reg.Execute(chaine)
For Each Match In Matches
    C_P = Trim(Match.Value)
Next Match
 
- 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
7
Affichages
1 K
Réponses
5
Affichages
1 K
Retour