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
-----Message d'origine----- GD,=== Je ne vois pas le problème avec O'Connors (que par ailleurs NOMPROPRE traitait correctement ;o))))
il n'y a pas de problême !!! ;o)) c'était juste pour faire mousser le pestou !!! ;o)))
Modeste
Bonsour ®, Jean-Paul
-----Message d'origine----- :-))))) sacré daniel je me charge de la vendre dans le monde entier ; rassure- toi, je me contenterai, en guise de rémunération,de
conserver le fruit des dix premières ventes (ce chiffre n'est pas un hasard : c'est le barême applicable pour ce genre d'action commerciale,n'est-ce pas FS?)...
"Monde Entier" ??? méfie-toi quand même de ne pas refaire le coût? (Coup) du "recordatorio", soigne tes acquintances Vietnamiennes ou Laotiennes !!!!
as-tu vérifié le fonctionnement pour les : n'Guyen et Min t'Hueng etc... ???? ;o)))
Bonsour ®, Jean-Paul
-----Message d'origine-----
:-)))))
sacré daniel
je me charge de la vendre dans le monde entier ; rassure-
toi, je me contenterai, en guise de rémunération,de
conserver le fruit des dix premières ventes (ce chiffre
n'est pas un hasard : c'est le barême applicable pour ce
genre d'action commerciale,n'est-ce pas FS?)...
"Monde Entier" ???
méfie-toi quand même de ne pas refaire le coût? (Coup)
du "recordatorio",
soigne tes acquintances Vietnamiennes ou Laotiennes !!!!
as-tu vérifié le fonctionnement pour les :
n'Guyen et Min t'Hueng etc... ????
;o)))
-----Message d'origine----- :-))))) sacré daniel je me charge de la vendre dans le monde entier ; rassure- toi, je me contenterai, en guise de rémunération,de
conserver le fruit des dix premières ventes (ce chiffre n'est pas un hasard : c'est le barême applicable pour ce genre d'action commerciale,n'est-ce pas FS?)...
"Monde Entier" ??? méfie-toi quand même de ne pas refaire le coût? (Coup) du "recordatorio", soigne tes acquintances Vietnamiennes ou Laotiennes !!!!
as-tu vérifié le fonctionnement pour les : n'Guyen et Min t'Hueng etc... ???? ;o)))
twinley
Bonjour
Bravo Clément, bravo à tous, c'est impressionnant quand le MPFE phosphore...j'avais jamais vécu cela en direct.
D'ailleurs à propos de phosphore, il faudra prévoir une légère adaptation dès que la Turquie entrera en Europe !
à+twinley
jps wrote:
je me lève en effet, clément, et c'est toi qui à ton réveil, trouveras ces nouveaux remerciements pour ces commentaires... merci encore jps
"Clément Marcotte" a écrit dans le message de news:
Bonjour,
Au moment où tu te lèves, je suis sur le point d'aller me coucher à mon tour. Finalement, tu as le choix entre deux approches.
1) La procédure finale de Daniel est plus "compacte" et peut-être plus efficace, mais, l'utilisation de la formule de feuille de calcul "match" la rend difficilement utilisable en dehors d'Excel.
2) D'autre part, la procédure initiale de Daniel que j'ai modifiée est plus longue et peut-être un peu moins performante. Mais elle reste plus facilement exportable à l'extérieur d'Excel.
Donc conclusion, le choix final dépend un peu des besoins de l'utilisateur. Mais si tu restes dans Excel, la procédure finale de Daniel est joliment astucieuse.
Bonjour
Bravo Clément, bravo à tous, c'est impressionnant quand le MPFE
phosphore...j'avais jamais vécu cela en direct.
D'ailleurs à propos de phosphore, il faudra prévoir une légère
adaptation dès que la Turquie entrera en Europe !
à+twinley
jps wrote:
je me lève en effet, clément, et c'est toi qui à ton réveil, trouveras ces
nouveaux remerciements pour ces commentaires...
merci encore
jps
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit dans le message
de news:eyMuJLp1EHA.4028@TK2MSFTNGP15.phx.gbl...
Bonjour,
Au moment où tu te lèves, je suis sur le point d'aller me coucher à
mon tour. Finalement, tu as le choix entre deux approches.
1) La procédure finale de Daniel est plus "compacte" et peut-être plus
efficace, mais, l'utilisation de la formule de feuille de calcul
"match" la rend difficilement utilisable en dehors d'Excel.
2) D'autre part, la procédure initiale de Daniel que j'ai modifiée est
plus longue et peut-être un peu moins performante. Mais elle reste
plus facilement exportable à l'extérieur d'Excel.
Donc conclusion, le choix final dépend un peu des besoins de
l'utilisateur. Mais si tu restes dans Excel, la procédure finale de
Daniel est joliment astucieuse.
Bravo Clément, bravo à tous, c'est impressionnant quand le MPFE phosphore...j'avais jamais vécu cela en direct.
D'ailleurs à propos de phosphore, il faudra prévoir une légère adaptation dès que la Turquie entrera en Europe !
à+twinley
jps wrote:
je me lève en effet, clément, et c'est toi qui à ton réveil, trouveras ces nouveaux remerciements pour ces commentaires... merci encore jps
"Clément Marcotte" a écrit dans le message de news:
Bonjour,
Au moment où tu te lèves, je suis sur le point d'aller me coucher à mon tour. Finalement, tu as le choix entre deux approches.
1) La procédure finale de Daniel est plus "compacte" et peut-être plus efficace, mais, l'utilisation de la formule de feuille de calcul "match" la rend difficilement utilisable en dehors d'Excel.
2) D'autre part, la procédure initiale de Daniel que j'ai modifiée est plus longue et peut-être un peu moins performante. Mais elle reste plus facilement exportable à l'extérieur d'Excel.
Donc conclusion, le choix final dépend un peu des besoins de l'utilisateur. Mais si tu restes dans Excel, la procédure finale de Daniel est joliment astucieuse.
jps
:-)))))) jps
"Modeste" a écrit dans le message de news:a9ef01c4d6bc$84f6f7b0$ Bonsour ®, Jean-Paul
-----Message d'origine----- :-))))) sacré daniel je me charge de la vendre dans le monde entier ; rassure- toi, je me contenterai, en guise de rémunération,de
conserver le fruit des dix premières ventes (ce chiffre n'est pas un hasard : c'est le barême applicable pour ce genre d'action commerciale,n'est-ce pas FS?)...
"Monde Entier" ??? méfie-toi quand même de ne pas refaire le coût? (Coup) du "recordatorio", soigne tes acquintances Vietnamiennes ou Laotiennes !!!!
as-tu vérifié le fonctionnement pour les : n'Guyen et Min t'Hueng etc... ???? ;o)))
:-))))))
jps
"Modeste" <Gee-dee-@discussions.microsoft.com> a écrit dans le message de
news:a9ef01c4d6bc$84f6f7b0$a601280a@phx.gbl...
Bonsour ®, Jean-Paul
-----Message d'origine-----
:-)))))
sacré daniel
je me charge de la vendre dans le monde entier ; rassure-
toi, je me contenterai, en guise de rémunération,de
conserver le fruit des dix premières ventes (ce chiffre
n'est pas un hasard : c'est le barême applicable pour ce
genre d'action commerciale,n'est-ce pas FS?)...
"Monde Entier" ???
méfie-toi quand même de ne pas refaire le coût? (Coup)
du "recordatorio",
soigne tes acquintances Vietnamiennes ou Laotiennes !!!!
as-tu vérifié le fonctionnement pour les :
n'Guyen et Min t'Hueng etc... ????
;o)))
"Modeste" a écrit dans le message de news:a9ef01c4d6bc$84f6f7b0$ Bonsour ®, Jean-Paul
-----Message d'origine----- :-))))) sacré daniel je me charge de la vendre dans le monde entier ; rassure- toi, je me contenterai, en guise de rémunération,de
conserver le fruit des dix premières ventes (ce chiffre n'est pas un hasard : c'est le barême applicable pour ce genre d'action commerciale,n'est-ce pas FS?)...
"Monde Entier" ??? méfie-toi quand même de ne pas refaire le coût? (Coup) du "recordatorio", soigne tes acquintances Vietnamiennes ou Laotiennes !!!!
as-tu vérifié le fonctionnement pour les : n'Guyen et Min t'Hueng etc... ???? ;o)))
jps
et dès que le mpfe ne sera plus qu'un vulgaire champ de patates aussi... jps
"twinley" a écrit dans le message de news:
D'ailleurs à propos de phosphore, il faudra prévoir une légère adaptation dès que la Turquie entrera en Europe !
et dès que le mpfe ne sera plus qu'un vulgaire champ de patates aussi...
jps
"twinley" <twinleym@hotmail.com> a écrit dans le message de
news:e0W8u2r1EHA.1860@TK2MSFTNGP15.phx.gbl...
D'ailleurs à propos de phosphore, il faudra prévoir une légère
adaptation dès que la Turquie entrera en Europe !
et dès que le mpfe ne sera plus qu'un vulgaire champ de patates aussi... jps
"twinley" a écrit dans le message de news:
D'ailleurs à propos de phosphore, il faudra prévoir une légère adaptation dès que la Turquie entrera en Europe !
Jacquouille
Salut la foule J'admire, une fois de plus le nombrilisme des Français lorsqu'ils s'écrient "au diable les Van, les Von et autres..." Avez-vous seulement pensé à moi? jacques-eugène de la rue des bruyères de beaufays ???? Egoïstes, va ! -)))) Ceci dit, lusage du tableau me parait plus simple et plus exportable dans les autres pays européens NON français. Encore un grand bravo pour ce travail en commun.
-- Bien amicalmement, Vivement conseillé >> http://www.excelabo.net Jacquouille.
"jps" a écrit dans le message de news:
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
Salut la foule
J'admire, une fois de plus le nombrilisme des Français lorsqu'ils s'écrient
"au diable les Van, les Von et autres..."
Avez-vous seulement pensé à moi?
jacques-eugène de la rue des bruyères de beaufays ????
Egoïstes, va ! -))))
Ceci dit, lusage du tableau me parait plus simple et plus exportable dans
les autres pays européens NON français.
Encore un grand bravo pour ce travail en commun.
--
Bien amicalmement,
Vivement conseillé >> http://www.excelabo.net
Jacquouille.
j.thiernesseNOSPAM@skynet.be
"jps" <biscotteUnScudJpsabatdelaile@wanadoo.fr> a écrit dans le message de
news: Oo5yGJl1EHA.2316@TK2MSFTNGP15.phx.gbl...
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
Salut la foule J'admire, une fois de plus le nombrilisme des Français lorsqu'ils s'écrient "au diable les Van, les Von et autres..." Avez-vous seulement pensé à moi? jacques-eugène de la rue des bruyères de beaufays ???? Egoïstes, va ! -)))) Ceci dit, lusage du tableau me parait plus simple et plus exportable dans les autres pays européens NON français. Encore un grand bravo pour ce travail en commun.
-- Bien amicalmement, Vivement conseillé >> http://www.excelabo.net Jacquouille.
"jps" a écrit dans le message de news:
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
twinley
:-D
jps wrote:
et dès que le mpfe ne sera plus qu'un vulgaire champ de patates aussi... jps
"twinley" a écrit dans le message de news:
D'ailleurs à propos de phosphore, il faudra prévoir une légère adaptation dès que la Turquie entrera en Europe !
:-D
jps wrote:
et dès que le mpfe ne sera plus qu'un vulgaire champ de patates aussi...
jps
"twinley" <twinleym@hotmail.com> a écrit dans le message de
news:e0W8u2r1EHA.1860@TK2MSFTNGP15.phx.gbl...
D'ailleurs à propos de phosphore, il faudra prévoir une légère
adaptation dès que la Turquie entrera en Europe !
et dès que le mpfe ne sera plus qu'un vulgaire champ de patates aussi... jps
"twinley" a écrit dans le message de news:
D'ailleurs à propos de phosphore, il faudra prévoir une légère adaptation dès que la Turquie entrera en Europe !
jps wrote:
et dès que le mpfe ne sera plus qu'un vulgaire champ de patates aussi...
;o))) Des mauvaises langues oseraient même : "chant de patate" mais ce serait de mauvaises langues... JPS, tes exhibitions vocales ne sont jamais vulgaires !
D'ailleurs à propos de phosphore, il faudra prévoir une légère
adaptation dès que la Turquie entrera en Europe !
.
jps wrote:
et dès que le mpfe ne sera plus qu'un vulgaire champ
de patates aussi...
;o)))
Des mauvaises langues oseraient même : "chant de patate"
mais ce serait de mauvaises langues...
JPS, tes exhibitions vocales ne sont jamais vulgaires !
et dès que le mpfe ne sera plus qu'un vulgaire champ de patates aussi...
;o))) Des mauvaises langues oseraient même : "chant de patate" mais ce serait de mauvaises langues... JPS, tes exhibitions vocales ne sont jamais vulgaires !
D'ailleurs à propos de phosphore, il faudra prévoir une légère
adaptation dès que la Turquie entrera en Europe !
.
Daniel.M
Salut Clément, JPS, GD
1. J'ai fait une erreur dans l'indice du SubMatches (doit être 0 au lieu de 1). Il calculera mal le 'decale' s'il y a plusieurs espaces avant un mot. La nouvelle (et dernière) routine PremLettre avec les corrections est copiée ci-dessous.
2. Je crois qu'on s'est compliqué la vie un peu trop pour identifier les mots à exclure. J'ai simplifié le code et j'en ai également copié une version (sans Application.Match()) Je l'ai nommée PremLettre_v2 ici pour la différencier.
Bon, ça devrait être suffisant et rendre l'ajout d'autres mots particuliers (SansMaj) assez aisée.
Salutations,
Daniel M.
'Met en majuscule la première lettre des mots de la cellule 'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-) ' Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, UnMatch As Object Dim s As String, decale As Integer Dim SansMaj()
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) ' le mot SANS les espaces/tirets/apostr situés avant If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2 Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If
'met 1 lettre en maj sauf pour quelques mots SansMaj If IsError(Application.Match(s, SansMaj, 0)) Then ' le mot s n'est pas dans la liste SansMaj ' donc, on met sa première lettre en maj decale = .FirstIndex + 1 + Len(.SubMatches(0)) Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If End With Next UnMatch
PremLettre = LeTexte End Function
'Met en majuscule la première lettre des mots de la cellule 'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-) ' Function PremLettre_v2(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) ' le mot SANS les espaces/tirets/apostr situés avant If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2 Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If
'met 1 lettre en maj sauf pour quelques mots particuliers If Not (s = "du" Or s = "de" Or s = "d" Or s = "des" Or _ s = "van" Or s = "di" Or s = "del") Then ' le mot s n'est pas un mot spécial ' donc, on met sa première lettre en maj decale = .FirstIndex + 1 + Len(.SubMatches(0)) Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If End With Next UnMatch
PremLettre_v2 = LeTexte End Function
Salut Clément, JPS, GD
1. J'ai fait une erreur dans l'indice du SubMatches (doit être 0 au lieu de 1).
Il calculera mal le 'decale' s'il y a plusieurs espaces avant un mot.
La nouvelle (et dernière) routine PremLettre avec les corrections est copiée
ci-dessous.
2. Je crois qu'on s'est compliqué la vie un peu trop pour identifier les mots à
exclure.
J'ai simplifié le code et j'en ai également copié une version (sans
Application.Match())
Je l'ai nommée PremLettre_v2 ici pour la différencier.
Bon, ça devrait être suffisant et rendre l'ajout d'autres mots particuliers
(SansMaj) assez aisée.
Salutations,
Daniel M.
'Met en majuscule la première lettre des mots de la cellule
'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-)
'
Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, UnMatch As Object
Dim s As String, decale As Integer
Dim SansMaj()
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) ' le mot SANS les espaces/tirets/apostr situés avant
If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald
decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
'met 1 lettre en maj sauf pour quelques mots SansMaj
If IsError(Application.Match(s, SansMaj, 0)) Then
' le mot s n'est pas dans la liste SansMaj
' donc, on met sa première lettre en maj
decale = .FirstIndex + 1 + Len(.SubMatches(0))
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
End With
Next UnMatch
PremLettre = LeTexte
End Function
'Met en majuscule la première lettre des mots de la cellule
'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-)
'
Function PremLettre_v2(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) ' le mot SANS les espaces/tirets/apostr situés avant
If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald
decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
'met 1 lettre en maj sauf pour quelques mots particuliers
If Not (s = "du" Or s = "de" Or s = "d" Or s = "des" Or _
s = "van" Or s = "di" Or s = "del") Then
' le mot s n'est pas un mot spécial
' donc, on met sa première lettre en maj
decale = .FirstIndex + 1 + Len(.SubMatches(0))
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
End With
Next UnMatch
1. J'ai fait une erreur dans l'indice du SubMatches (doit être 0 au lieu de 1). Il calculera mal le 'decale' s'il y a plusieurs espaces avant un mot. La nouvelle (et dernière) routine PremLettre avec les corrections est copiée ci-dessous.
2. Je crois qu'on s'est compliqué la vie un peu trop pour identifier les mots à exclure. J'ai simplifié le code et j'en ai également copié une version (sans Application.Match()) Je l'ai nommée PremLettre_v2 ici pour la différencier.
Bon, ça devrait être suffisant et rendre l'ajout d'autres mots particuliers (SansMaj) assez aisée.
Salutations,
Daniel M.
'Met en majuscule la première lettre des mots de la cellule 'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-) ' Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, UnMatch As Object Dim s As String, decale As Integer Dim SansMaj()
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) ' le mot SANS les espaces/tirets/apostr situés avant If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2 Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If
'met 1 lettre en maj sauf pour quelques mots SansMaj If IsError(Application.Match(s, SansMaj, 0)) Then ' le mot s n'est pas dans la liste SansMaj ' donc, on met sa première lettre en maj decale = .FirstIndex + 1 + Len(.SubMatches(0)) Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If End With Next UnMatch
PremLettre = LeTexte End Function
'Met en majuscule la première lettre des mots de la cellule 'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-) ' Function PremLettre_v2(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) ' le mot SANS les espaces/tirets/apostr situés avant If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2 Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If
'met 1 lettre en maj sauf pour quelques mots particuliers If Not (s = "du" Or s = "de" Or s = "d" Or s = "des" Or _ s = "van" Or s = "di" Or s = "del") Then ' le mot s n'est pas un mot spécial ' donc, on met sa première lettre en maj decale = .FirstIndex + 1 + Len(.SubMatches(0)) Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If End With Next UnMatch
PremLettre_v2 = LeTexte End Function
jps
salut daniel puis-je faire remarquer à Votre Seigneurie que pour que ça marche chez moi (XL 97 pour l'heure), il a fallu que je supprime les () dans Dim SansMaj... j'avoue que ma puce à l'oreille s'est manifestée car -elle me l'a avoué par la suite- c'était la première fois qu'elle voyait des parenthèses en bout de Dim (ce qui ne veut pas dire à la pointe de la chaussette) ; les puces québécoises n'auraient-elles pas la même perception ? mais une fois de plus, merci, daniel, pour cet immense travail dont il ne fait aucun doute qu'il va trôner au panthéon de misangeville... jps
"Daniel.M" a écrit dans le message de news:uDK%
Salut Clément, JPS, GD
1. J'ai fait une erreur dans l'indice du SubMatches (doit être 0 au lieu de 1).
Il calculera mal le 'decale' s'il y a plusieurs espaces avant un mot. La nouvelle (et dernière) routine PremLettre avec les corrections est copiée
ci-dessous.
2. Je crois qu'on s'est compliqué la vie un peu trop pour identifier les mots à
exclure. J'ai simplifié le code et j'en ai également copié une version (sans Application.Match()) Je l'ai nommée PremLettre_v2 ici pour la différencier.
Bon, ça devrait être suffisant et rendre l'ajout d'autres mots particuliers
(SansMaj) assez aisée.
Salutations,
Daniel M.
'Met en majuscule la première lettre des mots de la cellule 'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-) ' Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, UnMatch As Object Dim s As String, decale As Integer Dim SansMaj()
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) ' le mot SANS les espaces/tirets/apostr situés avant
If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2 Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If
'met 1 lettre en maj sauf pour quelques mots SansMaj If IsError(Application.Match(s, SansMaj, 0)) Then ' le mot s n'est pas dans la liste SansMaj ' donc, on met sa première lettre en maj decale = .FirstIndex + 1 + Len(.SubMatches(0)) Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If End With Next UnMatch
PremLettre = LeTexte End Function
'Met en majuscule la première lettre des mots de la cellule 'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-) ' Function PremLettre_v2(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) ' le mot SANS les espaces/tirets/apostr situés avant
If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2 Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If
'met 1 lettre en maj sauf pour quelques mots particuliers If Not (s = "du" Or s = "de" Or s = "d" Or s = "des" Or _ s = "van" Or s = "di" Or s = "del") Then ' le mot s n'est pas un mot spécial ' donc, on met sa première lettre en maj decale = .FirstIndex + 1 + Len(.SubMatches(0)) Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If End With Next UnMatch
PremLettre_v2 = LeTexte End Function
salut daniel
puis-je faire remarquer à Votre Seigneurie que pour que ça marche chez moi
(XL 97 pour l'heure), il a fallu que je supprime les () dans Dim SansMaj...
j'avoue que ma puce à l'oreille s'est manifestée car -elle me l'a avoué par
la suite- c'était la première fois qu'elle voyait des parenthèses en bout de
Dim (ce qui ne veut pas dire à la pointe de la chaussette) ; les puces
québécoises n'auraient-elles pas la même perception ?
mais une fois de plus, merci, daniel, pour cet immense travail dont il ne
fait aucun doute qu'il va trôner au panthéon de misangeville...
jps
"Daniel.M" <prenom.maher@bigfoot.inutil.com> a écrit dans le message de
news:uDK%23zhu1EHA.3368@TK2MSFTNGP10.phx.gbl...
Salut Clément, JPS, GD
1. J'ai fait une erreur dans l'indice du SubMatches (doit être 0 au lieu
de 1).
Il calculera mal le 'decale' s'il y a plusieurs espaces avant un mot.
La nouvelle (et dernière) routine PremLettre avec les corrections est
copiée
ci-dessous.
2. Je crois qu'on s'est compliqué la vie un peu trop pour identifier les
mots à
exclure.
J'ai simplifié le code et j'en ai également copié une version (sans
Application.Match())
Je l'ai nommée PremLettre_v2 ici pour la différencier.
Bon, ça devrait être suffisant et rendre l'ajout d'autres mots
particuliers
(SansMaj) assez aisée.
Salutations,
Daniel M.
'Met en majuscule la première lettre des mots de la cellule
'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-)
'
Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, UnMatch As Object
Dim s As String, decale As Integer
Dim SansMaj()
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) ' le mot SANS les espaces/tirets/apostr situés
avant
If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald
decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
'met 1 lettre en maj sauf pour quelques mots SansMaj
If IsError(Application.Match(s, SansMaj, 0)) Then
' le mot s n'est pas dans la liste SansMaj
' donc, on met sa première lettre en maj
decale = .FirstIndex + 1 + Len(.SubMatches(0))
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
End With
Next UnMatch
PremLettre = LeTexte
End Function
'Met en majuscule la première lettre des mots de la cellule
'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-)
'
Function PremLettre_v2(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) ' le mot SANS les espaces/tirets/apostr situés
avant
If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald
decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
'met 1 lettre en maj sauf pour quelques mots particuliers
If Not (s = "du" Or s = "de" Or s = "d" Or s = "des" Or _
s = "van" Or s = "di" Or s = "del") Then
' le mot s n'est pas un mot spécial
' donc, on met sa première lettre en maj
decale = .FirstIndex + 1 + Len(.SubMatches(0))
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
End With
Next UnMatch
salut daniel puis-je faire remarquer à Votre Seigneurie que pour que ça marche chez moi (XL 97 pour l'heure), il a fallu que je supprime les () dans Dim SansMaj... j'avoue que ma puce à l'oreille s'est manifestée car -elle me l'a avoué par la suite- c'était la première fois qu'elle voyait des parenthèses en bout de Dim (ce qui ne veut pas dire à la pointe de la chaussette) ; les puces québécoises n'auraient-elles pas la même perception ? mais une fois de plus, merci, daniel, pour cet immense travail dont il ne fait aucun doute qu'il va trôner au panthéon de misangeville... jps
"Daniel.M" a écrit dans le message de news:uDK%
Salut Clément, JPS, GD
1. J'ai fait une erreur dans l'indice du SubMatches (doit être 0 au lieu de 1).
Il calculera mal le 'decale' s'il y a plusieurs espaces avant un mot. La nouvelle (et dernière) routine PremLettre avec les corrections est copiée
ci-dessous.
2. Je crois qu'on s'est compliqué la vie un peu trop pour identifier les mots à
exclure. J'ai simplifié le code et j'en ai également copié une version (sans Application.Match()) Je l'ai nommée PremLettre_v2 ici pour la différencier.
Bon, ça devrait être suffisant et rendre l'ajout d'autres mots particuliers
(SansMaj) assez aisée.
Salutations,
Daniel M.
'Met en majuscule la première lettre des mots de la cellule 'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-) ' Function PremLettre(LeTexte As String) As String
Dim RE As Object, Matches As Object, UnMatch As Object Dim s As String, decale As Integer Dim SansMaj()
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) ' le mot SANS les espaces/tirets/apostr situés avant
If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2 Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If
'met 1 lettre en maj sauf pour quelques mots SansMaj If IsError(Application.Match(s, SansMaj, 0)) Then ' le mot s n'est pas dans la liste SansMaj ' donc, on met sa première lettre en maj decale = .FirstIndex + 1 + Len(.SubMatches(0)) Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If End With Next UnMatch
PremLettre = LeTexte End Function
'Met en majuscule la première lettre des mots de la cellule 'sauf quelques mots (SansMaj), un caprice de JPS et sa cour :-) ' Function PremLettre_v2(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) ' le mot SANS les espaces/tirets/apostr situés avant
If Left(s, 2) = "mc" Then ' De mcdonald vers mcDonald decale = .FirstIndex + 1 + Len(.SubMatches(0)) + 2 Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If
'met 1 lettre en maj sauf pour quelques mots particuliers If Not (s = "du" Or s = "de" Or s = "d" Or s = "des" Or _ s = "van" Or s = "di" Or s = "del") Then ' le mot s n'est pas un mot spécial ' donc, on met sa première lettre en maj decale = .FirstIndex + 1 + Len(.SubMatches(0)) Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1)) End If End With Next UnMatch