OVH Cloud OVH Cloud

Info - Un autre petit exercice avec des expressions régulières

53 réponses
Avatar
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

10 réponses

1 2 3 4 5
Avatar
Daniel.M
:-)
:-)))
:-)))))

Daniel M.

"jps" wrote in message
news:e%
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



Avatar
Daniel.M
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


De rien.
Voici la dernière version qui est un peu plus lisible: utilisation d'une
variable 'decale' pour indiquer quelle lettre du texte on doit mettre en
majuscule.
Aussi, on peut maintenant avoir plusieurs espaces (ou tiret, ou apostrophes)
entre les mots.
Finalement, j'ai utilisé le late-binding pour éviter qu'on ait l'obligation de
Référencer la librairie VBScript.

'Met en majuscule la première lettre des mots dans LeTexte
'sauf le "de", un caprice de JPS
'
Function PremLettre(LeTexte As String) As String

Dim RE As Object, Matches As Object, UnMatch As Object
Dim s As String, decale As Integer

Set RE = CreateObject("VBScript.RegExp")
RE.Global = True 'Recherche toutes les correspondances
RE.IgnoreCase = True 'Ignore les différences maj/min

' Le pattern:
' De 0 à plusieurs caractères suivants: espace ou apostrophe ou tiret
' PUIS
' une suite de 1 à plusieurs lettres reconnues
RE.Pattern = "((s|'|-)*)" & _
"([A-ZßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ]+)"

Set Matches = RE.Execute(LeTexte)

For Each UnMatch In Matches
With UnMatch
s = .SubMatches(2)
If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald
decale = .FirstIndex + 1 + Len(.SubMatches(1)) + 2
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If

If Left(s, 2) <> "de" Or Len(s) <> 2 Then ' met 1 lettre en maj sauf si "de"
decale = .FirstIndex + 1 + Len(.SubMatches(1))
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
End With
Next UnMatch

PremLettre = LeTexte
End Function

Salutations,

Daniel M.

Avatar
jps
oups petit bémol, daniel
tu as oublié de traiter le "du" de la comtesse du barry, par ex.
j'ai essayé de modifier ta proc en ajoutant :

If Left(s, 2) <> "du" 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

eh ben merdum de merdum, ça ne prend pas en charge le "pas de majuscule" à
"du"...
comment faut-il faire alors pour avoir et "de" et "du"???? moi pas y
arriver...
jps

"jps" a écrit dans le message de
news:ukMJ$
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.










Avatar
Daniel.M
JPS,
oups petit bémol, daniel
tu as oublié de traiter le "du" de la comtesse du barry, par ex.


Dans le code original
remplace :

If Left(s, 2) <> "de" Or Len(s) <> 2 Then ' met 1 lettre en maj sauf si "de"

par :

' met 1 lettre en maj sauf si "de" ou "du".
' changement au devis : JPS de + en + cap.......
If (Left(s, 2) <> "de" And Left(s, 2) <> "du") Or Len(s) <> 2 Then


Salutations,

Daniel M.

Avatar
GD
Bonsour® Daniel, Clément ,
Joli travail qui va en satisfaire quelques uns ....

Bonsour® JPS......
simple question de logique (booléenne)
;o)))
If (Left(s, 2) <> "de" And Left(s, 2) <> "du") Or Len(s) <> 2 Then
godefoy gras comtesse du berry>>>>>Godefoy Gras Comtesse du Berry

mais encore pour faire le pestou ... ;o)))
reste ce probleme qui est incompatible avec la règle des O'Connors ;o)))

jean-paul sabotier d'azergue >>>> Jean-Paul Sabotier D'Azergue
ou bien
anémone gisquette d'estaing>>>>>Anémone Gisquette D'Estaing

;o)))



wrote:
oups petit bémol, daniel
tu as oublié de traiter le "du" de la comtesse du barry, par ex.
j'ai essayé de modifier ta proc en ajoutant :

If Left(s, 2) <> "du" 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

eh ben merdum de merdum, ça ne prend pas en charge le "pas de
majuscule" à "du"...
comment faut-il faire alors pour avoir et "de" et "du"???? moi pas y
arriver...
jps

"jps" a écrit dans le
message de news:ukMJ$
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.








Avatar
Clément Marcotte
Et puis, cela permet de ne pas laisser trop de faux espoirs aux AMIS.
;-)
Avatar
jps
"GD" a écrit dans le message de
news:
Bonsour® Daniel, Clément ,
Joli travail qui va en satisfaire quelques uns ....

Bonsour® JPS......
simple question de logique (booléenne)
;o)))
If (Left(s, 2) <> "de" And Left(s, 2) <> "du") Or Len(s) <> 2 Then
godefoy gras comtesse du berry>>>>>Godefoy Gras Comtesse du Berry

mais encore pour faire le pestou ... ;o)))
reste ce probleme qui est incompatible avec la règle des O'Connors ;o)))

jean-paul sabotier d'azergue >>>> Jean-Paul Sabotier D'Azergue
ou bien
anémone gisquette d'estaing>>>>>Anémone Gisquette D'Estaing

;o)))



wrote:
oups petit bémol, daniel
tu as oublié de traiter le "du" de la comtesse du barry, par ex.
j'ai essayé de modifier ta proc en ajoutant :

If Left(s, 2) <> "du" 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

eh ben merdum de merdum, ça ne prend pas en charge le "pas de
majuscule" à "du"...
comment faut-il faire alors pour avoir et "de" et "du"???? moi pas y
arriver...
jps

"jps" a écrit dans le
message de news:ukMJ$
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.












Avatar
jps
bon, ben, boujour la foule
va être fou le daniel M quand je vais lui dire qu'il manque encore un cas :
j'ai un client qui s'appelle Thierry Garnier des Garets d'Ars (oui, oui, le
chatelain du bled de l'Ain où officiait le curé du même nom avant d'être
béatifié)...
alors il va falloir ajouter encore un And.... "des", ok?
en tous cas, merci geedee pour cette explication que je ne distingue pas
mais bon, il est tard...
jps

"GD" a écrit dans le message de
news:
Bonsour® Daniel, Clément ,
Joli travail qui va en satisfaire quelques uns ....

Bonsour® JPS......
simple question de logique (booléenne)
;o)))
If (Left(s, 2) <> "de" And Left(s, 2) <> "du") Or Len(s) <> 2 Then
godefoy gras comtesse du berry>>>>>Godefoy Gras Comtesse du Berry

mais encore pour faire le pestou ... ;o)))
reste ce probleme qui est incompatible avec la règle des O'Connors ;o)))

jean-paul sabotier d'azergue >>>> Jean-Paul Sabotier D'Azergue
ou bien
anémone gisquette d'estaing>>>>>Anémone Gisquette D'Estaing

;o)))



wrote:
oups petit bémol, daniel
tu as oublié de traiter le "du" de la comtesse du barry, par ex.
j'ai essayé de modifier ta proc en ajoutant :

If Left(s, 2) <> "du" 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

eh ben merdum de merdum, ça ne prend pas en charge le "pas de
majuscule" à "du"...
comment faut-il faire alors pour avoir et "de" et "du"???? moi pas y
arriver...
jps

"jps" a écrit dans le
message de news:ukMJ$
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.












Avatar
Clément Marcotte
Faudrait pas que tu demandes pour van Beethoven, di Napoli, del
Patate...
Avatar
jps
je me réponds à moi-même avant d'aller dormir ; ben non, le And "des" ne
marche pas et cela fait une 1/2 heure que je triture le 2, le 3, le "des"
dans tous les sens sans parvenir à l'équivalent du "du" et du "de"....
au secours, daniel, clément, geedee
jps

"jps" a écrit dans le message de
news:
bon, ben, boujour la foule
va être fou le daniel M quand je vais lui dire qu'il manque encore un cas
:

j'ai un client qui s'appelle Thierry Garnier des Garets d'Ars (oui, oui,
le

chatelain du bled de l'Ain où officiait le curé du même nom avant d'être
béatifié)...
alors il va falloir ajouter encore un And.... "des", ok?
en tous cas, merci geedee pour cette explication que je ne distingue pas
mais bon, il est tard...
jps

"GD" a écrit dans le message de
news:
Bonsour® Daniel, Clément ,
Joli travail qui va en satisfaire quelques uns ....

Bonsour® JPS......
simple question de logique (booléenne)
;o)))
If (Left(s, 2) <> "de" And Left(s, 2) <> "du") Or Len(s) <> 2 Then
godefoy gras comtesse du berry>>>>>Godefoy Gras Comtesse du Berry

mais encore pour faire le pestou ... ;o)))
reste ce probleme qui est incompatible avec la règle des O'Connors ;o)))

jean-paul sabotier d'azergue >>>> Jean-Paul Sabotier D'Azergue
ou bien
anémone gisquette d'estaing>>>>>Anémone Gisquette D'Estaing

;o)))



wrote:
oups petit bémol, daniel
tu as oublié de traiter le "du" de la comtesse du barry, par ex.
j'ai essayé de modifier ta proc en ajoutant :

If Left(s, 2) <> "du" 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

eh ben merdum de merdum, ça ne prend pas en charge le "pas de
majuscule" à "du"...
comment faut-il faire alors pour avoir et "de" et "du"???? moi pas y
arriver...
jps

"jps" a écrit dans le
message de news:ukMJ$
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.















1 2 3 4 5