Info - Un autre petit exercice avec des expressions régulières
53 réponses
Clément Marcotte
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions
régulières, et devant la question qui revient quand même assez
souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des
transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la
fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va
retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va
retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction
va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en
supposant que c'est bien Antoine), la fonction va retourner, toujours
ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant
Dim letexte As String, RE As Object, Matches As Object, match
letexte = CStr(parametre)
Set RE = New RegExp
'Recherche toutes les correspondances
RE.Global = True
'Ignore les différences majuscules/minuscules
RE.IgnoreCase = False
'Recherche le second prénom d'un prénom composé
RE.Pattern = "(-\w+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
'Met en majuscule l'initiale du second prénom
'd'un prénom composé
Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte,
match.FirstIndex + 2, 1))
Next
'Recherche les espaces et met en majuscules
'l'initiale du mot qui suit; même pour "de la"
'dans de la Rochefoucauld
RE.Pattern = "(\s\w+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte,
match.FirstIndex + 2, 1))
Next
'met en majuscule, l'initiale du
'premier mot de la cellule
RE.Pattern = "(\w+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1))
Next
PremiereLettreEnMajuscule = letexte
End Function
Mais c'est toujours bon de chercher à inventer de nouvelles fonctions.
-- Patrick
"Clément Marcotte" wrote in message news:
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions régulières, et devant la question qui revient quand même assez souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en supposant que c'est bien Antoine), la fonction va retourner, toujours ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant Dim letexte As String, RE As Object, Matches As Object, match letexte = CStr(parametre) Set RE = New RegExp 'Recherche toutes les correspondances RE.Global = True 'Ignore les différences majuscules/minuscules RE.IgnoreCase = False 'Recherche le second prénom d'un prénom composé RE.Pattern = "(-w+)" Set Matches = RE.Execute(letexte) For Each match In Matches 'Met en majuscule l'initiale du second prénom 'd'un prénom composé Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'Recherche les espaces et met en majuscules 'l'initiale du mot qui suit; même pour "de la" 'dans de la Rochefoucauld RE.Pattern = "(sw+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'met en majuscule, l'initiale du 'premier mot de la cellule RE.Pattern = "(w+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1)) Next PremiereLettreEnMajuscule = letexte End Function
Bonjour,
Tu sais que cette fonction existe dans Excel ?
NOMPROPRE ou PROPER.
Mais c'est toujours bon de chercher à inventer de nouvelles fonctions.
--
Patrick
"Clément Marcotte" <clement.marcotte@sympatico.ca> wrote in message
news:Oz53qXk1EHA.2804@TK2MSFTNGP15.phx.gbl...
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions
régulières, et devant la question qui revient quand même assez
souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des
transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la
fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va
retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va
retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction
va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en
supposant que c'est bien Antoine), la fonction va retourner, toujours
ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant
Dim letexte As String, RE As Object, Matches As Object, match
letexte = CStr(parametre)
Set RE = New RegExp
'Recherche toutes les correspondances
RE.Global = True
'Ignore les différences majuscules/minuscules
RE.IgnoreCase = False
'Recherche le second prénom d'un prénom composé
RE.Pattern = "(-w+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
'Met en majuscule l'initiale du second prénom
'd'un prénom composé
Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte,
match.FirstIndex + 2, 1))
Next
'Recherche les espaces et met en majuscules
'l'initiale du mot qui suit; même pour "de la"
'dans de la Rochefoucauld
RE.Pattern = "(sw+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte,
match.FirstIndex + 2, 1))
Next
'met en majuscule, l'initiale du
'premier mot de la cellule
RE.Pattern = "(w+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1))
Next
PremiereLettreEnMajuscule = letexte
End Function
Mais c'est toujours bon de chercher à inventer de nouvelles fonctions.
-- Patrick
"Clément Marcotte" wrote in message news:
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions régulières, et devant la question qui revient quand même assez souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en supposant que c'est bien Antoine), la fonction va retourner, toujours ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant Dim letexte As String, RE As Object, Matches As Object, match letexte = CStr(parametre) Set RE = New RegExp 'Recherche toutes les correspondances RE.Global = True 'Ignore les différences majuscules/minuscules RE.IgnoreCase = False 'Recherche le second prénom d'un prénom composé RE.Pattern = "(-w+)" Set Matches = RE.Execute(letexte) For Each match In Matches 'Met en majuscule l'initiale du second prénom 'd'un prénom composé Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'Recherche les espaces et met en majuscules 'l'initiale du mot qui suit; même pour "de la" 'dans de la Rochefoucauld RE.Pattern = "(sw+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'met en majuscule, l'initiale du 'premier mot de la cellule RE.Pattern = "(w+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1)) Next PremiereLettreEnMajuscule = letexte End Function
Clément Marcotte
Bonjour,
Tu sais que cette fonction existe dans Excel ?
NOMPROPRE ou PROPER.
Mais si, mais si ;-)
Dans une feuille de calcul, cette fonction ne sert pas à grand chose. Pour une macro Excel, on peut sans doute s'en tirer avec application.proper. Mais, comme je disais, c'est pour l'expérimentation des expressions régulières.
D'un autre côté, VBA est devenu le langage de macros de plusieurs applications, office et non Office, Microsoft et non Microsoft. VBA n'a pas, en natif de fonction nompropre. Cette fonction peut être facilement utilisée avec toute autre application qui supporte VBA, sans devoir créer une aautre instance d'Excel, juste pour utiliser nompropre.
Bonjour,
Tu sais que cette fonction existe dans Excel ?
NOMPROPRE ou PROPER.
Mais si, mais si ;-)
Dans une feuille de calcul, cette fonction ne sert pas à grand chose.
Pour une macro Excel, on peut sans doute s'en tirer avec
application.proper. Mais, comme je disais, c'est pour
l'expérimentation des expressions régulières.
D'un autre côté, VBA est devenu le langage de macros de plusieurs
applications, office et non Office, Microsoft et non Microsoft. VBA
n'a pas, en natif de fonction nompropre. Cette fonction peut être
facilement utilisée avec toute autre application qui supporte VBA,
sans devoir créer une aautre instance d'Excel, juste pour utiliser
nompropre.
Dans une feuille de calcul, cette fonction ne sert pas à grand chose. Pour une macro Excel, on peut sans doute s'en tirer avec application.proper. Mais, comme je disais, c'est pour l'expérimentation des expressions régulières.
D'un autre côté, VBA est devenu le langage de macros de plusieurs applications, office et non Office, Microsoft et non Microsoft. VBA n'a pas, en natif de fonction nompropre. Cette fonction peut être facilement utilisée avec toute autre application qui supporte VBA, sans devoir créer une aautre instance d'Excel, juste pour utiliser nompropre.
Patrick Fredin
Je suis absolument d'accord avec toi. Ne t'inquiète pas, je ne te prenais pas pour un débutant dans Excel.
-- Patrick
"Clément Marcotte" wrote in message news:
Bonjour,
Tu sais que cette fonction existe dans Excel ?
NOMPROPRE ou PROPER.
Mais si, mais si ;-)
Dans une feuille de calcul, cette fonction ne sert pas à grand chose. Pour une macro Excel, on peut sans doute s'en tirer avec application.proper. Mais, comme je disais, c'est pour l'expérimentation des expressions régulières.
D'un autre côté, VBA est devenu le langage de macros de plusieurs applications, office et non Office, Microsoft et non Microsoft. VBA n'a pas, en natif de fonction nompropre. Cette fonction peut être facilement utilisée avec toute autre application qui supporte VBA, sans devoir créer une aautre instance d'Excel, juste pour utiliser nompropre.
Je suis absolument d'accord avec toi. Ne t'inquiète pas, je ne te prenais
pas pour un débutant dans Excel.
--
Patrick
"Clément Marcotte" <clement.marcotte@sympatico.ca> wrote in message
news:uepztvk1EHA.1188@tk2msftngp13.phx.gbl...
Bonjour,
Tu sais que cette fonction existe dans Excel ?
NOMPROPRE ou PROPER.
Mais si, mais si ;-)
Dans une feuille de calcul, cette fonction ne sert pas à grand chose.
Pour une macro Excel, on peut sans doute s'en tirer avec
application.proper. Mais, comme je disais, c'est pour
l'expérimentation des expressions régulières.
D'un autre côté, VBA est devenu le langage de macros de plusieurs
applications, office et non Office, Microsoft et non Microsoft. VBA
n'a pas, en natif de fonction nompropre. Cette fonction peut être
facilement utilisée avec toute autre application qui supporte VBA,
sans devoir créer une aautre instance d'Excel, juste pour utiliser
nompropre.
Je suis absolument d'accord avec toi. Ne t'inquiète pas, je ne te prenais pas pour un débutant dans Excel.
-- Patrick
"Clément Marcotte" wrote in message news:
Bonjour,
Tu sais que cette fonction existe dans Excel ?
NOMPROPRE ou PROPER.
Mais si, mais si ;-)
Dans une feuille de calcul, cette fonction ne sert pas à grand chose. Pour une macro Excel, on peut sans doute s'en tirer avec application.proper. Mais, comme je disais, c'est pour l'expérimentation des expressions régulières.
D'un autre côté, VBA est devenu le langage de macros de plusieurs applications, office et non Office, Microsoft et non Microsoft. VBA n'a pas, en natif de fonction nompropre. Cette fonction peut être facilement utilisée avec toute autre application qui supporte VBA, sans devoir créer une aautre instance d'Excel, juste pour utiliser nompropre.
jps
même que chez moi, je ne parviens pas à la faire marcher la Function de clément....que doit-on mettre dans paramètre? la référence de la cellule qui contient le texte à modifier? dans ce cas, j'ai erreur de compilation et dans VBE, le mot NewRegExp qui se drape d'un joli bleu.....but whyyyyyyyy???? jps
"Patrick Fredin" a écrit dans le message de news:
Bonjour,
Tu sais que cette fonction existe dans Excel ?
NOMPROPRE ou PROPER.
Mais c'est toujours bon de chercher à inventer de nouvelles fonctions.
-- Patrick
"Clément Marcotte" wrote in message news:
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions régulières, et devant la question qui revient quand même assez souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en supposant que c'est bien Antoine), la fonction va retourner, toujours ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant Dim letexte As String, RE As Object, Matches As Object, match letexte = CStr(parametre) Set RE = New RegExp 'Recherche toutes les correspondances RE.Global = True 'Ignore les différences majuscules/minuscules RE.IgnoreCase = False 'Recherche le second prénom d'un prénom composé RE.Pattern = "(-w+)" Set Matches = RE.Execute(letexte) For Each match In Matches 'Met en majuscule l'initiale du second prénom 'd'un prénom composé Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'Recherche les espaces et met en majuscules 'l'initiale du mot qui suit; même pour "de la" 'dans de la Rochefoucauld RE.Pattern = "(sw+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'met en majuscule, l'initiale du 'premier mot de la cellule RE.Pattern = "(w+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1)) Next PremiereLettreEnMajuscule = letexte End Function
même que chez moi, je ne parviens pas à la faire marcher la Function de
clément....que doit-on mettre dans paramètre? la référence de la cellule qui
contient le texte à modifier? dans ce cas, j'ai erreur de compilation et
dans VBE, le mot NewRegExp qui se drape d'un joli bleu.....but
whyyyyyyyy????
jps
"Patrick Fredin" <nospams_patrick.fredin@iquebec.com> a écrit dans le
message de news:uK8IIgk1EHA.3500@TK2MSFTNGP09.phx.gbl...
Bonjour,
Tu sais que cette fonction existe dans Excel ?
NOMPROPRE ou PROPER.
Mais c'est toujours bon de chercher à inventer de nouvelles fonctions.
--
Patrick
"Clément Marcotte" <clement.marcotte@sympatico.ca> wrote in message
news:Oz53qXk1EHA.2804@TK2MSFTNGP15.phx.gbl...
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions
régulières, et devant la question qui revient quand même assez
souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des
transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la
fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va
retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va
retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction
va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en
supposant que c'est bien Antoine), la fonction va retourner, toujours
ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant
Dim letexte As String, RE As Object, Matches As Object, match
letexte = CStr(parametre)
Set RE = New RegExp
'Recherche toutes les correspondances
RE.Global = True
'Ignore les différences majuscules/minuscules
RE.IgnoreCase = False
'Recherche le second prénom d'un prénom composé
RE.Pattern = "(-w+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
'Met en majuscule l'initiale du second prénom
'd'un prénom composé
Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte,
match.FirstIndex + 2, 1))
Next
'Recherche les espaces et met en majuscules
'l'initiale du mot qui suit; même pour "de la"
'dans de la Rochefoucauld
RE.Pattern = "(sw+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte,
match.FirstIndex + 2, 1))
Next
'met en majuscule, l'initiale du
'premier mot de la cellule
RE.Pattern = "(w+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1))
Next
PremiereLettreEnMajuscule = letexte
End Function
même que chez moi, je ne parviens pas à la faire marcher la Function de clément....que doit-on mettre dans paramètre? la référence de la cellule qui contient le texte à modifier? dans ce cas, j'ai erreur de compilation et dans VBE, le mot NewRegExp qui se drape d'un joli bleu.....but whyyyyyyyy???? jps
"Patrick Fredin" a écrit dans le message de news:
Bonjour,
Tu sais que cette fonction existe dans Excel ?
NOMPROPRE ou PROPER.
Mais c'est toujours bon de chercher à inventer de nouvelles fonctions.
-- Patrick
"Clément Marcotte" wrote in message news:
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions régulières, et devant la question qui revient quand même assez souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en supposant que c'est bien Antoine), la fonction va retourner, toujours ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant Dim letexte As String, RE As Object, Matches As Object, match letexte = CStr(parametre) Set RE = New RegExp 'Recherche toutes les correspondances RE.Global = True 'Ignore les différences majuscules/minuscules RE.IgnoreCase = False 'Recherche le second prénom d'un prénom composé RE.Pattern = "(-w+)" Set Matches = RE.Execute(letexte) For Each match In Matches 'Met en majuscule l'initiale du second prénom 'd'un prénom composé Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'Recherche les espaces et met en majuscules 'l'initiale du mot qui suit; même pour "de la" 'dans de la Rochefoucauld RE.Pattern = "(sw+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'met en majuscule, l'initiale du 'premier mot de la cellule RE.Pattern = "(w+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1)) Next PremiereLettreEnMajuscule = letexte End Function
Daniel.M
Salut Clément,
Depuis Excel 2000 (je crois), il y a StrConv(LeTexte, vbProperCase) qui permet de mettre la première lettre en majuscule mais ce n'est pas un traitement qui traite adéquatement les O'Connor de ce monde.
Ton exercice est d'autant plus apprécié qu'il permet de mettre en lumière deux philosophies dans l'application des expressions régulières : 1.Il y a les tenants de l'approche qui consiste à 'tout mettre dans les patterns' de façon à minimiser les appels à plusieurs RE.Execute. Ainsi, un seul appel à RE.Execute permet de compartimenter le texte de la façon désirée. 2.D'autre part, il y a ceux qui prétendent que plusieurs boucles n'ont jamais tué personne et qu'on y gagner en lisibilité
J'appartiens à la première école ;-)
Si tu es intéressé, fais-moi signe et je copierai une version qui fait un seul appel à RE.Execute (le pattern est à l'avenant, mais j'ai annoncé mes couleurs...) et qui traite les O'Connor et McDonald avec respect :-) Elle utilise aussi un peu les SubMatches; un aspect intéressant dans le traitement des expressions régulières.
Salutations,
Daniel M.
"Clément Marcotte" wrote in message news:
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions régulières, et devant la question qui revient quand même assez souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en supposant que c'est bien Antoine), la fonction va retourner, toujours ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant Dim letexte As String, RE As Object, Matches As Object, match letexte = CStr(parametre) Set RE = New RegExp 'Recherche toutes les correspondances RE.Global = True 'Ignore les différences majuscules/minuscules RE.IgnoreCase = False 'Recherche le second prénom d'un prénom composé RE.Pattern = "(-w+)" Set Matches = RE.Execute(letexte) For Each match In Matches 'Met en majuscule l'initiale du second prénom 'd'un prénom composé Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'Recherche les espaces et met en majuscules 'l'initiale du mot qui suit; même pour "de la" 'dans de la Rochefoucauld RE.Pattern = "(sw+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'met en majuscule, l'initiale du 'premier mot de la cellule RE.Pattern = "(w+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1)) Next PremiereLettreEnMajuscule = letexte End Function
Salut Clément,
Depuis Excel 2000 (je crois), il y a StrConv(LeTexte, vbProperCase) qui permet
de mettre la première lettre en majuscule mais ce n'est pas un traitement qui
traite adéquatement les O'Connor de ce monde.
Ton exercice est d'autant plus apprécié qu'il permet de mettre en lumière deux
philosophies dans l'application des expressions régulières :
1.Il y a les tenants de l'approche qui consiste à 'tout mettre dans les
patterns' de façon à minimiser les appels à plusieurs RE.Execute. Ainsi, un seul
appel à RE.Execute permet de compartimenter le texte de la façon désirée.
2.D'autre part, il y a ceux qui prétendent que plusieurs boucles n'ont jamais
tué personne et qu'on y gagner en lisibilité
J'appartiens à la première école ;-)
Si tu es intéressé, fais-moi signe et je copierai une version qui fait un seul
appel à RE.Execute (le pattern est à l'avenant, mais j'ai annoncé mes
couleurs...) et qui traite les O'Connor et McDonald avec respect :-)
Elle utilise aussi un peu les SubMatches; un aspect intéressant dans le
traitement des expressions régulières.
Salutations,
Daniel M.
"Clément Marcotte" <clement.marcotte@sympatico.ca> wrote in message
news:Oz53qXk1EHA.2804@TK2MSFTNGP15.phx.gbl...
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions
régulières, et devant la question qui revient quand même assez
souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des
transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la
fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va
retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va
retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction
va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en
supposant que c'est bien Antoine), la fonction va retourner, toujours
ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant
Dim letexte As String, RE As Object, Matches As Object, match
letexte = CStr(parametre)
Set RE = New RegExp
'Recherche toutes les correspondances
RE.Global = True
'Ignore les différences majuscules/minuscules
RE.IgnoreCase = False
'Recherche le second prénom d'un prénom composé
RE.Pattern = "(-w+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
'Met en majuscule l'initiale du second prénom
'd'un prénom composé
Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte,
match.FirstIndex + 2, 1))
Next
'Recherche les espaces et met en majuscules
'l'initiale du mot qui suit; même pour "de la"
'dans de la Rochefoucauld
RE.Pattern = "(sw+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte,
match.FirstIndex + 2, 1))
Next
'met en majuscule, l'initiale du
'premier mot de la cellule
RE.Pattern = "(w+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1))
Next
PremiereLettreEnMajuscule = letexte
End Function
Depuis Excel 2000 (je crois), il y a StrConv(LeTexte, vbProperCase) qui permet de mettre la première lettre en majuscule mais ce n'est pas un traitement qui traite adéquatement les O'Connor de ce monde.
Ton exercice est d'autant plus apprécié qu'il permet de mettre en lumière deux philosophies dans l'application des expressions régulières : 1.Il y a les tenants de l'approche qui consiste à 'tout mettre dans les patterns' de façon à minimiser les appels à plusieurs RE.Execute. Ainsi, un seul appel à RE.Execute permet de compartimenter le texte de la façon désirée. 2.D'autre part, il y a ceux qui prétendent que plusieurs boucles n'ont jamais tué personne et qu'on y gagner en lisibilité
J'appartiens à la première école ;-)
Si tu es intéressé, fais-moi signe et je copierai une version qui fait un seul appel à RE.Execute (le pattern est à l'avenant, mais j'ai annoncé mes couleurs...) et qui traite les O'Connor et McDonald avec respect :-) Elle utilise aussi un peu les SubMatches; un aspect intéressant dans le traitement des expressions régulières.
Salutations,
Daniel M.
"Clément Marcotte" wrote in message news:
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions régulières, et devant la question qui revient quand même assez souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en supposant que c'est bien Antoine), la fonction va retourner, toujours ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant Dim letexte As String, RE As Object, Matches As Object, match letexte = CStr(parametre) Set RE = New RegExp 'Recherche toutes les correspondances RE.Global = True 'Ignore les différences majuscules/minuscules RE.IgnoreCase = False 'Recherche le second prénom d'un prénom composé RE.Pattern = "(-w+)" Set Matches = RE.Execute(letexte) For Each match In Matches 'Met en majuscule l'initiale du second prénom 'd'un prénom composé Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'Recherche les espaces et met en majuscules 'l'initiale du mot qui suit; même pour "de la" 'dans de la Rochefoucauld RE.Pattern = "(sw+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'met en majuscule, l'initiale du 'premier mot de la cellule RE.Pattern = "(w+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1)) Next PremiereLettreEnMajuscule = letexte End Function
Daniel.M
Bonjour JPS,
"jps" wrote in message news:
même que chez moi, je ne parviens pas à la faire marcher la Function de clément....que doit-on mettre dans paramètre? la référence de la cellule qui contient le texte à modifier?
Oui. Exemple, en B1 =PremiereLettreEnMajuscule(A1)
dans ce cas, j'ai erreur de compilation et dans VBE, le mot NewRegExp qui se drape d'un joli bleu.....but
VBE. Menu Outils/Références, coche la libraire Microsoft VBScript Regular Expressions 5.x
Salutations,
Daniel M.
Bonjour JPS,
"jps" <biscotteUnScudJpsabatdelaile@wanadoo.fr> wrote in message
news:uqkok5k1EHA.3576@TK2MSFTNGP12.phx.gbl...
même que chez moi, je ne parviens pas à la faire marcher la Function de
clément....que doit-on mettre dans paramètre? la référence de la cellule qui
contient le texte à modifier?
Oui. Exemple, en B1
=PremiereLettreEnMajuscule(A1)
dans ce cas, j'ai erreur de compilation et
dans VBE, le mot NewRegExp qui se drape d'un joli bleu.....but
VBE. Menu Outils/Références, coche la libraire Microsoft VBScript Regular
Expressions 5.x
même que chez moi, je ne parviens pas à la faire marcher la Function de clément....que doit-on mettre dans paramètre? la référence de la cellule qui contient le texte à modifier?
Oui. Exemple, en B1 =PremiereLettreEnMajuscule(A1)
dans ce cas, j'ai erreur de compilation et dans VBE, le mot NewRegExp qui se drape d'un joli bleu.....but
VBE. Menu Outils/Références, coche la libraire Microsoft VBScript Regular Expressions 5.x
Salutations,
Daniel M.
jps
waouh!!! merci daniel pourrait quand même le dire ce joalvert de clément..... en tous cas, une fois cette références cochée (mais que j'aurais bien été incapable d'aller chercher tout seul), c'est une affaire qui tourne... et quand notre québécois saura qu'en mettant seulement "jps" en A1, sa Function m'a retourné "Jean Paul Sabatier Des Granges Basses De Chatillon D'Azergues En Beaujolais MVP HS"... ça correspond très exactement au tatouage que j'ai sur le torse : en position de repos, c'est "jps" et quand je gonfle mes pectoraux, c'est ce que la Function m'a retourné.... jps
"Daniel.M" a écrit dans le message de news:%
Bonjour JPS,
"jps" wrote in message news:
même que chez moi, je ne parviens pas à la faire marcher la Function de clément....que doit-on mettre dans paramètre? la référence de la cellule qui
contient le texte à modifier?
Oui. Exemple, en B1 =PremiereLettreEnMajuscule(A1)
dans ce cas, j'ai erreur de compilation et dans VBE, le mot NewRegExp qui se drape d'un joli bleu.....but
VBE. Menu Outils/Références, coche la libraire Microsoft VBScript Regular Expressions 5.x
Salutations,
Daniel M.
waouh!!! merci daniel
pourrait quand même le dire ce joalvert de clément.....
en tous cas, une fois cette références cochée (mais que j'aurais bien été
incapable d'aller chercher tout seul), c'est une affaire qui tourne...
et quand notre québécois saura qu'en mettant seulement "jps" en A1, sa
Function m'a retourné "Jean Paul Sabatier Des Granges Basses De Chatillon
D'Azergues En Beaujolais MVP HS"...
ça correspond très exactement au tatouage que j'ai sur le torse : en
position de repos, c'est "jps" et quand je gonfle mes pectoraux, c'est ce
que la Function m'a retourné....
jps
"Daniel.M" <prenom.maher@bigfoot.inutil.com> a écrit dans le message de
news:%23I2Cm8k1EHA.2612@TK2MSFTNGP14.phx.gbl...
Bonjour JPS,
"jps" <biscotteUnScudJpsabatdelaile@wanadoo.fr> wrote in message
news:uqkok5k1EHA.3576@TK2MSFTNGP12.phx.gbl...
même que chez moi, je ne parviens pas à la faire marcher la Function de
clément....que doit-on mettre dans paramètre? la référence de la cellule
qui
contient le texte à modifier?
Oui. Exemple, en B1
=PremiereLettreEnMajuscule(A1)
dans ce cas, j'ai erreur de compilation et
dans VBE, le mot NewRegExp qui se drape d'un joli bleu.....but
VBE. Menu Outils/Références, coche la libraire Microsoft VBScript Regular
Expressions 5.x
waouh!!! merci daniel pourrait quand même le dire ce joalvert de clément..... en tous cas, une fois cette références cochée (mais que j'aurais bien été incapable d'aller chercher tout seul), c'est une affaire qui tourne... et quand notre québécois saura qu'en mettant seulement "jps" en A1, sa Function m'a retourné "Jean Paul Sabatier Des Granges Basses De Chatillon D'Azergues En Beaujolais MVP HS"... ça correspond très exactement au tatouage que j'ai sur le torse : en position de repos, c'est "jps" et quand je gonfle mes pectoraux, c'est ce que la Function m'a retourné.... jps
"Daniel.M" a écrit dans le message de news:%
Bonjour JPS,
"jps" wrote in message news:
même que chez moi, je ne parviens pas à la faire marcher la Function de clément....que doit-on mettre dans paramètre? la référence de la cellule qui
contient le texte à modifier?
Oui. Exemple, en B1 =PremiereLettreEnMajuscule(A1)
dans ce cas, j'ai erreur de compilation et dans VBE, le mot NewRegExp qui se drape d'un joli bleu.....but
VBE. Menu Outils/Références, coche la libraire Microsoft VBScript Regular Expressions 5.x
Salutations,
Daniel M.
jps
juste un mot, clément je pense qu'il est inexact de mettre une majuscule à la particule "de"... jps
"Clément Marcotte" a écrit dans le message de news:
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions régulières, et devant la question qui revient quand même assez souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en supposant que c'est bien Antoine), la fonction va retourner, toujours ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant Dim letexte As String, RE As Object, Matches As Object, match letexte = CStr(parametre) Set RE = New RegExp 'Recherche toutes les correspondances RE.Global = True 'Ignore les différences majuscules/minuscules RE.IgnoreCase = False 'Recherche le second prénom d'un prénom composé RE.Pattern = "(-w+)" Set Matches = RE.Execute(letexte) For Each match In Matches 'Met en majuscule l'initiale du second prénom 'd'un prénom composé Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'Recherche les espaces et met en majuscules 'l'initiale du mot qui suit; même pour "de la" 'dans de la Rochefoucauld RE.Pattern = "(sw+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'met en majuscule, l'initiale du 'premier mot de la cellule RE.Pattern = "(w+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1)) Next PremiereLettreEnMajuscule = letexte End Function
juste un mot, clément
je pense qu'il est inexact de mettre une majuscule à la particule "de"...
jps
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le message
de news:Oz53qXk1EHA.2804@TK2MSFTNGP15.phx.gbl...
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions
régulières, et devant la question qui revient quand même assez
souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des
transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la
fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va
retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va
retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction
va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en
supposant que c'est bien Antoine), la fonction va retourner, toujours
ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant
Dim letexte As String, RE As Object, Matches As Object, match
letexte = CStr(parametre)
Set RE = New RegExp
'Recherche toutes les correspondances
RE.Global = True
'Ignore les différences majuscules/minuscules
RE.IgnoreCase = False
'Recherche le second prénom d'un prénom composé
RE.Pattern = "(-w+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
'Met en majuscule l'initiale du second prénom
'd'un prénom composé
Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte,
match.FirstIndex + 2, 1))
Next
'Recherche les espaces et met en majuscules
'l'initiale du mot qui suit; même pour "de la"
'dans de la Rochefoucauld
RE.Pattern = "(sw+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte,
match.FirstIndex + 2, 1))
Next
'met en majuscule, l'initiale du
'premier mot de la cellule
RE.Pattern = "(w+)"
Set Matches = RE.Execute(letexte)
For Each match In Matches
Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1))
Next
PremiereLettreEnMajuscule = letexte
End Function
juste un mot, clément je pense qu'il est inexact de mettre une majuscule à la particule "de"... jps
"Clément Marcotte" a écrit dans le message de news:
Bonjour,
Dans ma volonté d'expérimenter le plus possible les expressions régulières, et devant la question qui revient quand même assez souvent, j'ai bricolé la fonction suivante, laquelle va vous faire des transformations selon les modèles suivants:
si vous avez un nom du genre "clément marcotte" dans une cellule, la fonction va retourner "Clément Marcotte"
Si vous avec un nom du genre "jean-robert gauthier", la fonction va retourner "Jean-Robert Gauthier"
Si vous avez un nom du genre "clément robert marcotte", la fonction va retourner "Clément Robert Marcotte"
Si vous avez un nom du genre "clément robert de marcotte" la fonction va retourner, ma paresse aidant, "Clément Robert De Marcotte"
Si vous avez un nom du genre "antoine de la rochefoucauld" (en supposant que c'est bien Antoine), la fonction va retourner, toujours ma paresse aidant, "Antoine De La Rochefoucauld"
Function PremiereLettreEnMajuscule(parametre As Variant) As Variant Dim letexte As String, RE As Object, Matches As Object, match letexte = CStr(parametre) Set RE = New RegExp 'Recherche toutes les correspondances RE.Global = True 'Ignore les différences majuscules/minuscules RE.IgnoreCase = False 'Recherche le second prénom d'un prénom composé RE.Pattern = "(-w+)" Set Matches = RE.Execute(letexte) For Each match In Matches 'Met en majuscule l'initiale du second prénom 'd'un prénom composé Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'Recherche les espaces et met en majuscules 'l'initiale du mot qui suit; même pour "de la" 'dans de la Rochefoucauld RE.Pattern = "(sw+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, match.FirstIndex + 2, 1) = UCase(Mid(letexte, match.FirstIndex + 2, 1)) Next 'met en majuscule, l'initiale du 'premier mot de la cellule RE.Pattern = "(w+)" Set Matches = RE.Execute(letexte) For Each match In Matches Mid(letexte, 1, 1) = UCase(Mid(letexte, 1, 1)) Next PremiereLettreEnMajuscule = letexte End Function
Eric
"jps" écrivait
et quand notre québécois saura qu'en mettant seulement "jps" en A1, sa Function m'a retourné "Jean Paul Sabatier Des Granges Basses De Chatillon D'Azergues En Beaujolais MVP HS"... ça correspond très exactement au tatouage que j'ai sur le torse : en position de repos, c'est "jps" et quand je gonfle mes pectoraux, c'est ce que la Function m'a retourné....
Ah grand Age, quand tu nous tiens !!! Suis pas sûr que les pectoraux gonflent encore ... mais la voix rocailleuse, apparemment à lire le NG ;-))
et quand notre québécois saura qu'en mettant seulement "jps"
en A1, sa Function m'a retourné "Jean Paul Sabatier Des Granges Basses
De Chatillon D'Azergues En Beaujolais MVP HS"...
ça correspond très exactement au tatouage que j'ai sur le torse : en
position de repos, c'est "jps" et quand je gonfle mes pectoraux, c'est
ce que la Function m'a retourné....
Ah grand Age, quand tu nous tiens !!!
Suis pas sûr que les pectoraux gonflent encore ... mais la voix
rocailleuse, apparemment à lire le NG ;-))
et quand notre québécois saura qu'en mettant seulement "jps" en A1, sa Function m'a retourné "Jean Paul Sabatier Des Granges Basses De Chatillon D'Azergues En Beaujolais MVP HS"... ça correspond très exactement au tatouage que j'ai sur le torse : en position de repos, c'est "jps" et quand je gonfle mes pectoraux, c'est ce que la Function m'a retourné....
Ah grand Age, quand tu nous tiens !!! Suis pas sûr que les pectoraux gonflent encore ... mais la voix rocailleuse, apparemment à lire le NG ;-))
Amicalement
Un autre papy
Eric
Clément Marcotte
Bonjour,
waouh!!! merci daniel pourrait quand même le dire ce joalvert de clément..... en tous cas, une fois cette références cochée (mais que j'aurais bien été
incapable d'aller chercher tout seul), c'est une affaire qui tourne...
Mille excuses, j'ai oublié.
Bonjour,
waouh!!! merci daniel
pourrait quand même le dire ce joalvert de clément.....
en tous cas, une fois cette références cochée (mais que j'aurais
bien été
incapable d'aller chercher tout seul), c'est une affaire qui
tourne...
waouh!!! merci daniel pourrait quand même le dire ce joalvert de clément..... en tous cas, une fois cette références cochée (mais que j'aurais bien été
incapable d'aller chercher tout seul), c'est une affaire qui tourne...