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"....
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"....
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"....
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,
lechatelain 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.
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" <biscotteUnScudJpsabatdelaile@wanadoo.fr> a écrit dans le
message de
news:uRnVTUn1EHA.304@TK2MSFTNGP11.phx.gbl...
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" <nomail@nomail.net> a écrit dans le message de
news:eHKgWam1EHA.1452@TK2MSFTNGP11.phx.gbl...
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" <biscotteUnScudJpsabatdelaile@wanadoo.fr> a écrit dans
le
message de news:ukMJ$wl1EHA.2012@TK2MSFTNGP15.phx.gbl...
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.
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,
lechatelain 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.
GD,
== >
Je ne vois pas le problème avec O'Connors
GD,
== >
Je ne vois pas le problème avec O'Connors
GD,
== >
Je ne vois pas le problème avec O'Connors
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"....
Le 'And Left(s,3)<> "des" ' à l'INTÉRIEUR de la parenthèse devrait marcher,
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"....
Le 'And Left(s,3)<> "des" ' à l'INTÉRIEUR de la parenthèse devrait marcher,
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"....
Le 'And Left(s,3)<> "des" ' à l'INTÉRIEUR de la parenthèse devrait marcher,
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"....
Le 'And Left(s,3)<> "des" ' à l'INTÉRIEUR de la parenthèse devrait
marcher,
comme GD l'a indiqué.
Ceci étant dit, comme vos demandes de changement n'ont semble-t-il pas de
fin
;-), pourquoi ne pas mettre les mots clés dans une liste et faire un appel
à la
fonction .Match()
Si on veut éviter l'appel à une fonction de l'Application Excel, on
pourrait
faire une boucle pour savoir si le mot 's' est présent dans les SansMaj.
GD,
== >
Je ne vois pas le problème avec O'Connors
Code:
==== > Ça donne (et Thierry Garnier des Garets d'Ars devrait être content) :
'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()
SansMaj = Array("du", "de", "d", "des", "van", "di", "del")
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(1)) + 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(1))
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
End With
Next UnMatch
PremLettre = LeTexte
End Function
Salutations,
Daniel M.
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"....
Le 'And Left(s,3)<> "des" ' à l'INTÉRIEUR de la parenthèse devrait
marcher,
comme GD l'a indiqué.
Ceci étant dit, comme vos demandes de changement n'ont semble-t-il pas de
fin
;-), pourquoi ne pas mettre les mots clés dans une liste et faire un appel
à la
fonction .Match()
Si on veut éviter l'appel à une fonction de l'Application Excel, on
pourrait
faire une boucle pour savoir si le mot 's' est présent dans les SansMaj.
GD,
== >
Je ne vois pas le problème avec O'Connors
Code:
==== > Ça donne (et Thierry Garnier des Garets d'Ars devrait être content) :
'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()
SansMaj = Array("du", "de", "d", "des", "van", "di", "del")
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(1)) + 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(1))
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
End With
Next UnMatch
PremLettre = LeTexte
End Function
Salutations,
Daniel M.
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"....
Le 'And Left(s,3)<> "des" ' à l'INTÉRIEUR de la parenthèse devrait
marcher,
comme GD l'a indiqué.
Ceci étant dit, comme vos demandes de changement n'ont semble-t-il pas de
fin
;-), pourquoi ne pas mettre les mots clés dans une liste et faire un appel
à la
fonction .Match()
Si on veut éviter l'appel à une fonction de l'Application Excel, on
pourrait
faire une boucle pour savoir si le mot 's' est présent dans les SansMaj.
GD,
== >
Je ne vois pas le problème avec O'Connors
Code:
==== > Ça donne (et Thierry Garnier des Garets d'Ars devrait être content) :
'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()
SansMaj = Array("du", "de", "d", "des", "van", "di", "del")
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(1)) + 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(1))
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
End With
Next UnMatch
PremLettre = LeTexte
End Function
Salutations,
Daniel M.
Bonjour,
Comme j'ai vu que "d'ars" devenait "D'Ars" et que j'ai crains que tu
demandes une nouvelle modification pour "d'", j'ai don pris les
devants. Voici don où je suis rendu. (Et au diable les van, les di et
les del.)
Function PremLettre(LeTexte As String) As String
' met 1 lettre en maj sauf si "de","du","des", "d".
' changement au devis : JPS de + en + cap.......
'Daniel Maher mpfe
'modifiée par Clément Marcotte pour "des" et "d"
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" And Left(s, 2) <> "du" And Left(s, 1) <> "d")
Or (Len(s) > 3) Then ' met 1 lettre en maj sauf si "de" ou "du"
decale = .FirstIndex + 1 + Len(.SubMatches(1))
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
If Left(s, 3) <> "des" And Left(s, 1) <> "d" Then ' met 1 lettre en
maj sauf si "des"
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
P.S. Oublie mon autre réponse à ton "au secours"
Bonjour,
Comme j'ai vu que "d'ars" devenait "D'Ars" et que j'ai crains que tu
demandes une nouvelle modification pour "d'", j'ai don pris les
devants. Voici don où je suis rendu. (Et au diable les van, les di et
les del.)
Function PremLettre(LeTexte As String) As String
' met 1 lettre en maj sauf si "de","du","des", "d".
' changement au devis : JPS de + en + cap.......
'Daniel Maher mpfe
'modifiée par Clément Marcotte pour "des" et "d"
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" And Left(s, 2) <> "du" And Left(s, 1) <> "d")
Or (Len(s) > 3) Then ' met 1 lettre en maj sauf si "de" ou "du"
decale = .FirstIndex + 1 + Len(.SubMatches(1))
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
If Left(s, 3) <> "des" And Left(s, 1) <> "d" Then ' met 1 lettre en
maj sauf si "des"
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
P.S. Oublie mon autre réponse à ton "au secours"
Bonjour,
Comme j'ai vu que "d'ars" devenait "D'Ars" et que j'ai crains que tu
demandes une nouvelle modification pour "d'", j'ai don pris les
devants. Voici don où je suis rendu. (Et au diable les van, les di et
les del.)
Function PremLettre(LeTexte As String) As String
' met 1 lettre en maj sauf si "de","du","des", "d".
' changement au devis : JPS de + en + cap.......
'Daniel Maher mpfe
'modifiée par Clément Marcotte pour "des" et "d"
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" And Left(s, 2) <> "du" And Left(s, 1) <> "d")
Or (Len(s) > 3) Then ' met 1 lettre en maj sauf si "de" ou "du"
decale = .FirstIndex + 1 + Len(.SubMatches(1))
Mid(LeTexte, decale, 1) = UCase(Mid(LeTexte, decale, 1))
End If
If Left(s, 3) <> "des" And Left(s, 1) <> "d" Then ' met 1 lettre en
maj sauf si "des"
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
P.S. Oublie mon autre réponse à ton "au secours"
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,
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,
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,
=== > >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"....
Le 'And Left(s,3)<> "des" ' à l'INTÉRIEUR de la parenthèse devrait
marcher,
Pas vrai car les chaînes n'ont pas la même longueur.
Voir la réponse de Clément là-dessus (un peu plus loin de le fil).
Salutations,
Daniel M.
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"....
Le 'And Left(s,3)<> "des" ' à l'INTÉRIEUR de la parenthèse devrait
marcher,
Pas vrai car les chaînes n'ont pas la même longueur.
Voir la réponse de Clément là-dessus (un peu plus loin de le fil).
Salutations,
Daniel M.
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"....
Le 'And Left(s,3)<> "des" ' à l'INTÉRIEUR de la parenthèse devrait
marcher,
Pas vrai car les chaînes n'ont pas la même longueur.
Voir la réponse de Clément là-dessus (un peu plus loin de le fil).
Salutations,
Daniel M.