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
je pense qu'il est inexact de mettre une majuscule à la particule "de"...
Je le pense aussi. C'est pour cela que je parle de paresse. :-))
Clément Marcotte
Bonjour,
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.
Je ne dis pas non. J'aimerais justement pouvoir passer à "la première école", mais je me retrouve toujours en chicane avec les Patterns, et je perds patience. Je me dis alors que vaut mieux un programme "qui marche" que rien du tout.
P.S. Tu pourrais même le déposer sur http://www.cjoint.com
Bonjour,
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.
Je ne dis pas non. J'aimerais justement pouvoir passer à "la première
école", mais je me retrouve toujours en chicane avec les Patterns, et
je perds patience. Je me dis alors que vaut mieux un programme "qui
marche" que rien du tout.
P.S. Tu pourrais même le déposer sur http://www.cjoint.com
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.
Je ne dis pas non. J'aimerais justement pouvoir passer à "la première école", mais je me retrouve toujours en chicane avec les Patterns, et je perds patience. Je me dis alors que vaut mieux un programme "qui marche" que rien du tout.
P.S. Tu pourrais même le déposer sur http://www.cjoint.com
Daniel.M
On est chanceux Éric: il nous a épargné la version plus ... hard (mais je pense qu'il n'en pensait pas moins).
Salutations,
Daniel M.
"Eric" wrote in message news:
"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 ;-))
Amicalement
Un autre papy
Eric
On est chanceux Éric: il nous a épargné la version plus ... hard (mais je pense
qu'il n'en pensait pas moins).
Salutations,
Daniel M.
"Eric" <f_framZZ@hotmail.com> wrote in message
news:XnF95B0DBFAC561FfframZZhotmailcom@207.46.248.16...
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 ;-))
On est chanceux Éric: il nous a épargné la version plus ... hard (mais je pense qu'il n'en pensait pas moins).
Salutations,
Daniel M.
"Eric" wrote in message news:
"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 ;-))
Amicalement
Un autre papy
Eric
Clément Marcotte
Bonjour,
Ne t'inquiète pas, je ne te prenais pas pour un débutant dans Excel.
Je ne pensais pas cela. C'était plus pour l'amusement qu'autre chose. Et Daniel a pensé à des noms auxquels je n'avais pas pensé.
Bonjour,
Ne t'inquiète pas, je ne te prenais
pas pour un débutant dans Excel.
Je ne pensais pas cela. C'était plus pour l'amusement qu'autre chose.
Et Daniel a pensé à des noms auxquels je n'avais pas pensé.
Ne t'inquiète pas, je ne te prenais pas pour un débutant dans Excel.
Je ne pensais pas cela. C'était plus pour l'amusement qu'autre chose. Et Daniel a pensé à des noms auxquels je n'avais pas pensé.
Daniel.M
Salut,
La fonction étant relativement courte, je la copie ici. Ça donnerait quelque chose comme ce qui suit. Les instructions à l'intérieur de la boucle auraient pu se limiter à une seule copie mais je voulais traiter McDonald (qui introduisait l'utilisation des SubMatches). De plus, j'ai intégré (mais pas beaucoup testé) une modif pour empêcher "de" d'être changé en "De".
'Met en majuscule la première lettre des mots de la cellule 'sauf le "de" : un caprice de JPS ' Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, Match As Object Dim s As String
Set RE = New RegExp RE.Global = True 'Recherche toutes les correspondances RE.IgnoreCase = True 'Ignore les différences maj/min
' Le pattern: ' un espace, un apostrophe, un tiret ou rien ' PUIS ' une suite de lettres reconnues RE.Pattern = "(s|'|-|)" & _ "([A-ZßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ]+)"
Set Matches = RE.Execute(LeTexte) ' le seul appel
For Each Match In Matches s = Match.SubMatches(1) If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)) + 2, 1) = _ UCase(Mid(LeTexte, Match.FirstIndex + 1 + _ Len(Match.SubMatches(0)) + 2, 1)) End If If Left(s, 2) <> "de" Or Len(s) <> 2 Then ' met 1 lettre en maj sauf si "de" Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)), 1) = _ UCase(Mid(LeTexte, Match.FirstIndex + 1 + _ Len(Match.SubMatches(0)), 1)) End If Next Match
PremLettre = LeTexte End Function
Je ne dis pas non. J'aimerais justement pouvoir passer à "la première école", mais je me retrouve toujours en chicane avec les Patterns, et je perds patience. Je me dis alors que vaut mieux un programme "qui marche" que rien du tout.
Salut,
La fonction étant relativement courte, je la copie ici.
Ça donnerait quelque chose comme ce qui suit. Les instructions à l'intérieur de
la boucle auraient pu se limiter à une seule copie mais je voulais traiter
McDonald (qui introduisait l'utilisation des SubMatches). De plus, j'ai intégré
(mais pas beaucoup testé) une modif pour empêcher "de" d'être changé en "De".
'Met en majuscule la première lettre des mots de la cellule
'sauf le "de" : un caprice de JPS
'
Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, Match As Object
Dim s As String
Set RE = New RegExp
RE.Global = True 'Recherche toutes les correspondances
RE.IgnoreCase = True 'Ignore les différences maj/min
' Le pattern:
' un espace, un apostrophe, un tiret ou rien
' PUIS
' une suite de lettres reconnues
RE.Pattern = "(s|'|-|)" & _
"([A-ZßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ]+)"
Set Matches = RE.Execute(LeTexte) ' le seul appel
For Each Match In Matches
s = Match.SubMatches(1)
If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald
Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)) + 2, 1) = _
UCase(Mid(LeTexte, Match.FirstIndex + 1 + _
Len(Match.SubMatches(0)) + 2, 1))
End If
If Left(s, 2) <> "de" Or Len(s) <> 2 Then ' met 1 lettre en maj sauf si "de"
Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)), 1) = _
UCase(Mid(LeTexte, Match.FirstIndex + 1 + _
Len(Match.SubMatches(0)), 1))
End If
Next Match
PremLettre = LeTexte
End Function
Je ne dis pas non. J'aimerais justement pouvoir passer à "la première
école", mais je me retrouve toujours en chicane avec les Patterns, et
je perds patience. Je me dis alors que vaut mieux un programme "qui
marche" que rien du tout.
La fonction étant relativement courte, je la copie ici. Ça donnerait quelque chose comme ce qui suit. Les instructions à l'intérieur de la boucle auraient pu se limiter à une seule copie mais je voulais traiter McDonald (qui introduisait l'utilisation des SubMatches). De plus, j'ai intégré (mais pas beaucoup testé) une modif pour empêcher "de" d'être changé en "De".
'Met en majuscule la première lettre des mots de la cellule 'sauf le "de" : un caprice de JPS ' Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, Match As Object Dim s As String
Set RE = New RegExp RE.Global = True 'Recherche toutes les correspondances RE.IgnoreCase = True 'Ignore les différences maj/min
' Le pattern: ' un espace, un apostrophe, un tiret ou rien ' PUIS ' une suite de lettres reconnues RE.Pattern = "(s|'|-|)" & _ "([A-ZßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ]+)"
Set Matches = RE.Execute(LeTexte) ' le seul appel
For Each Match In Matches s = Match.SubMatches(1) If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)) + 2, 1) = _ UCase(Mid(LeTexte, Match.FirstIndex + 1 + _ Len(Match.SubMatches(0)) + 2, 1)) End If If Left(s, 2) <> "de" Or Len(s) <> 2 Then ' met 1 lettre en maj sauf si "de" Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)), 1) = _ UCase(Mid(LeTexte, Match.FirstIndex + 1 + _ Len(Match.SubMatches(0)), 1)) End If Next Match
PremLettre = LeTexte End Function
Je ne dis pas non. J'aimerais justement pouvoir passer à "la première école", mais je me retrouve toujours en chicane avec les Patterns, et je perds patience. Je me dis alors que vaut mieux un programme "qui marche" que rien du tout.
jps
:-)))))) jps
"Eric" a écrit dans le message de news:
"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 ;-))
Amicalement
Un autre papy
Eric
:-))))))
jps
"Eric" <f_framZZ@hotmail.com> a écrit dans le message de
news:XnF95B0DBFAC561FfframZZhotmailcom@207.46.248.16...
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
jps
te absolvo, clémentus rex quebecorum jps
"Clément Marcotte" a écrit dans le message de news:
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é.
te absolvo, clémentus rex quebecorum
jps
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le message
de news:ua5VBOl1EHA.3500@TK2MSFTNGP09.phx.gbl...
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...
"Clément Marcotte" a écrit dans le message de news:
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é.
Clément Marcotte
Bonjour,
Merci.
'Met en majuscule la première lettre des mots de la cellule 'sauf le "de" : un caprice de JPS
Là, cela lui donne un avantage sur nompropre ;-)
Bonjour,
Merci.
'Met en majuscule la première lettre des mots de la cellule
'sauf le "de" : un caprice de JPS
'Met en majuscule la première lettre des mots de la cellule 'sauf le "de" : un caprice de JPS
Là, cela lui donne un avantage sur nompropre ;-)
jps
dès que tu tends une perche (et le mot n'est pas utilisé au hasard) tu peux être sûr qu'il y aura toujours un lubrique pour s'en saisir.... sacré daniel, tu les connais toutes, de la version "première communion 1.0" à celle "corps de garde 6.9" jps
"Daniel.M" a écrit dans le message de news:
On est chanceux Éric: il nous a épargné la version plus ... hard (mais je pense
qu'il n'en pensait pas moins).
Salutations,
Daniel M.
"Eric" wrote in message news:
"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 ;-))
Amicalement
Un autre papy
Eric
dès que tu tends une perche (et le mot n'est pas utilisé au hasard) tu peux
être sûr qu'il y aura toujours un lubrique pour s'en saisir....
sacré daniel, tu les connais toutes, de la version "première communion 1.0"
à celle "corps de garde 6.9"
jps
"Daniel.M" <prenom.maher@bigfoot.inutil.com> a écrit dans le message de
news:Ov3OQQl1EHA.1124@tk2msftngp13.phx.gbl...
On est chanceux Éric: il nous a épargné la version plus ... hard (mais je
pense
qu'il n'en pensait pas moins).
Salutations,
Daniel M.
"Eric" <f_framZZ@hotmail.com> wrote in message
news:XnF95B0DBFAC561FfframZZhotmailcom@207.46.248.16...
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 ;-))
dès que tu tends une perche (et le mot n'est pas utilisé au hasard) tu peux être sûr qu'il y aura toujours un lubrique pour s'en saisir.... sacré daniel, tu les connais toutes, de la version "première communion 1.0" à celle "corps de garde 6.9" jps
"Daniel.M" a écrit dans le message de news:
On est chanceux Éric: il nous a épargné la version plus ... hard (mais je pense
qu'il n'en pensait pas moins).
Salutations,
Daniel M.
"Eric" wrote in message news:
"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 ;-))
Amicalement
Un autre papy
Eric
jps
chapeau, daniel et je suis content d'avoir fait mon caprice, même si je ne suis pas allé jusqu'à faire pipi dans le VBE et me rouler dans le module... jps
"Daniel.M" a écrit dans le message de news:
Salut,
La fonction étant relativement courte, je la copie ici. Ça donnerait quelque chose comme ce qui suit. Les instructions à l'intérieur de
la boucle auraient pu se limiter à une seule copie mais je voulais traiter McDonald (qui introduisait l'utilisation des SubMatches). De plus, j'ai intégré
(mais pas beaucoup testé) une modif pour empêcher "de" d'être changé en "De".
'Met en majuscule la première lettre des mots de la cellule 'sauf le "de" : un caprice de JPS ' Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, Match As Object Dim s As String
Set RE = New RegExp RE.Global = True 'Recherche toutes les correspondances RE.IgnoreCase = True 'Ignore les différences maj/min
' Le pattern: ' un espace, un apostrophe, un tiret ou rien ' PUIS ' une suite de lettres reconnues RE.Pattern = "(s|'|-|)" & _ "([A-ZßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ]+)"
Set Matches = RE.Execute(LeTexte) ' le seul appel
For Each Match In Matches s = Match.SubMatches(1) If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)) + 2, 1) = _
UCase(Mid(LeTexte, Match.FirstIndex + 1 + _ Len(Match.SubMatches(0)) + 2, 1)) End If If Left(s, 2) <> "de" Or Len(s) <> 2 Then ' met 1 lettre en maj sauf si "de"
Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)), 1) _ UCase(Mid(LeTexte, Match.FirstIndex + 1 + _ Len(Match.SubMatches(0)), 1)) End If Next Match
PremLettre = LeTexte End Function
Je ne dis pas non. J'aimerais justement pouvoir passer à "la première école", mais je me retrouve toujours en chicane avec les Patterns, et je perds patience. Je me dis alors que vaut mieux un programme "qui marche" que rien du tout.
chapeau, daniel
et je suis content d'avoir fait mon caprice, même si je ne suis pas allé
jusqu'à faire pipi dans le VBE et me rouler dans le module...
jps
"Daniel.M" <prenom.maher@bigfoot.inutil.com> a écrit dans le message de
news:eaWZecl1EHA.3324@tk2msftngp13.phx.gbl...
Salut,
La fonction étant relativement courte, je la copie ici.
Ça donnerait quelque chose comme ce qui suit. Les instructions à
l'intérieur de
la boucle auraient pu se limiter à une seule copie mais je voulais traiter
McDonald (qui introduisait l'utilisation des SubMatches). De plus, j'ai
intégré
(mais pas beaucoup testé) une modif pour empêcher "de" d'être changé en
"De".
'Met en majuscule la première lettre des mots de la cellule
'sauf le "de" : un caprice de JPS
'
Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, Match As Object
Dim s As String
Set RE = New RegExp
RE.Global = True 'Recherche toutes les correspondances
RE.IgnoreCase = True 'Ignore les différences maj/min
' Le pattern:
' un espace, un apostrophe, un tiret ou rien
' PUIS
' une suite de lettres reconnues
RE.Pattern = "(s|'|-|)" & _
"([A-ZßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ]+)"
Set Matches = RE.Execute(LeTexte) ' le seul appel
For Each Match In Matches
s = Match.SubMatches(1)
If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald
Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)) + 2,
1) = _
UCase(Mid(LeTexte, Match.FirstIndex + 1 + _
Len(Match.SubMatches(0)) + 2, 1))
End If
If Left(s, 2) <> "de" Or Len(s) <> 2 Then ' met 1 lettre en maj sauf
si "de"
Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)), 1) _
UCase(Mid(LeTexte, Match.FirstIndex + 1 + _
Len(Match.SubMatches(0)), 1))
End If
Next Match
PremLettre = LeTexte
End Function
Je ne dis pas non. J'aimerais justement pouvoir passer à "la première
école", mais je me retrouve toujours en chicane avec les Patterns, et
je perds patience. Je me dis alors que vaut mieux un programme "qui
marche" que rien du tout.
chapeau, daniel et je suis content d'avoir fait mon caprice, même si je ne suis pas allé jusqu'à faire pipi dans le VBE et me rouler dans le module... jps
"Daniel.M" a écrit dans le message de news:
Salut,
La fonction étant relativement courte, je la copie ici. Ça donnerait quelque chose comme ce qui suit. Les instructions à l'intérieur de
la boucle auraient pu se limiter à une seule copie mais je voulais traiter McDonald (qui introduisait l'utilisation des SubMatches). De plus, j'ai intégré
(mais pas beaucoup testé) une modif pour empêcher "de" d'être changé en "De".
'Met en majuscule la première lettre des mots de la cellule 'sauf le "de" : un caprice de JPS ' Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, Match As Object Dim s As String
Set RE = New RegExp RE.Global = True 'Recherche toutes les correspondances RE.IgnoreCase = True 'Ignore les différences maj/min
' Le pattern: ' un espace, un apostrophe, un tiret ou rien ' PUIS ' une suite de lettres reconnues RE.Pattern = "(s|'|-|)" & _ "([A-ZßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ]+)"
Set Matches = RE.Execute(LeTexte) ' le seul appel
For Each Match In Matches s = Match.SubMatches(1) If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)) + 2, 1) = _
UCase(Mid(LeTexte, Match.FirstIndex + 1 + _ Len(Match.SubMatches(0)) + 2, 1)) End If If Left(s, 2) <> "de" Or Len(s) <> 2 Then ' met 1 lettre en maj sauf si "de"
Mid(LeTexte, Match.FirstIndex + 1 + Len(Match.SubMatches(0)), 1) _ UCase(Mid(LeTexte, Match.FirstIndex + 1 + _ Len(Match.SubMatches(0)), 1)) End If Next Match
PremLettre = LeTexte End Function
Je ne dis pas non. J'aimerais justement pouvoir passer à "la première école", mais je me retrouve toujours en chicane avec les Patterns, et je perds patience. Je me dis alors que vaut mieux un programme "qui marche" que rien du tout.