OVH Cloud OVH Cloud

Fonction Nompropre ?

7 réponses
Avatar
Florian
Bonjour à tous,
je cherche une fonction équivalente à la fonction "Nompropre" (d'Excel) pour
Access 97.
J'ai plus de 5 000 noms écrits tout en majuscule et je ne me vois pas les
réécrire à la main...
Jouer avec les fonction Ucase et Lcase n'est pas approprié car cela devient
un vrai casse tête avec les noms composés (ex : Martin-Lamotte ou De la
Marjelle du Puit du Fond du Jardin).

Quelqu'un a une solution ?
Merci pour vos réponses.

7 réponses

Avatar
Raymond [mvp]
Bonjour.

La fonction nompropre est une fonction spécifique Excel et n'existe pas sous
access.
soit tu passes par la fonction excel par automation soit tu utilises une
fonction que j'ai placé sur mon site:
http://access.seneque.free.fr/mot_majuscule.htm ( et pages précédentes)
cette fonction modifie tous les mots, c'est-à-dire y compris les particules.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Florian" a écrit dans le message de
news:3fc31fbc$0$17105$
Bonjour à tous,
je cherche une fonction équivalente à la fonction "Nompropre" (d'Excel)
pour

Access 97.
J'ai plus de 5 000 noms écrits tout en majuscule et je ne me vois pas les
réécrire à la main...
Jouer avec les fonction Ucase et Lcase n'est pas approprié car cela
devient

un vrai casse tête avec les noms composés (ex : Martin-Lamotte ou De la
Marjelle du Puit du Fond du Jardin).

Quelqu'un a une solution ?
Merci pour vos réponses.




Avatar
Florian
Merci pour ta diligente réponse.

Je ne connais pas cette procédure d'automation (Excel in Access ? c possible
ça ?), alors je tente autre chose.
J'essaie de reconstituer une fonction proche de la fonction Nompropre
d'excel.
Les fonctions que tu as écrites vont m'aider mais certains trucs ne
fonctionne pas en Access 97 (Replace, Split...).
Je posterai ma solution si ça interresse du monde.

à +


"Raymond [mvp]" a écrit dans le message de
news:
Bonjour.

La fonction nompropre est une fonction spécifique Excel et n'existe pas
sous

access.
soit tu passes par la fonction excel par automation soit tu utilises une
fonction que j'ai placé sur mon site:
http://access.seneque.free.fr/mot_majuscule.htm ( et pages précédentes)
cette fonction modifie tous les mots, c'est-à-dire y compris les
particules.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Florian" a écrit dans le message de
news:3fc31fbc$0$17105$
Bonjour à tous,
je cherche une fonction équivalente à la fonction "Nompropre" (d'Excel)
pour Access 97...




Avatar
3stone
Salut,

"Florian"
Les fonctions que tu as écrites vont m'aider mais certains trucs ne
fonctionne pas en Access 97 (Replace, Split...).
Je posterai ma solution si ça interresse du monde.



Regarde ceci...

http://mypage.bluewin.ch/w.stucki/ManipulationCaracteres.htm#CapitaliserPrenom


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
Florian
Merci 3stone, j'avais oeuvré dans cette direction.
Merci Raymond, ta réponse à orienté mes recherches.
En voici le résultat (que tout le monde en profite...).
C'est bourrin mais ça à l'air de fonctionner. Notez que les particules ne
doivent pas être mises en majuscules.
J'espère ne rien avoir oublié car je ne vais pas contrôler mes 5000
lignes...

Sub test()
'pour tester la fonction
MsgBox NomPropre("marie-pierre-agathe des jonquilles de la marjelle du
château d'albertas "), vbOKOnly, "Test du bidule"
End Sub

*************************************
Function NomPropre(letexte As String) As String
Dim posit As Variant
Dim debutrecherche As Integer
'note : les particules restent en minuscule (ça reste une histoire de ule)

If IsNull(letexte) Or IsEmpty(letexte) Then Exit Function

letexte = Trim(letexte) 'élimine les espaces avant et après le
texte
letexte = LCase(letexte) 'passe tout le texte en minuscule

'Traitement de la première lettre
If Left(letexte, 3) <> "de " Or Left(letexte, 3) <> "du " Or Left(letexte,
2) <> "d'" Or Left(letexte, 4) <> "des " Then
letexte = UCase(Left(letexte, 1)) & LCase(Right(letexte, Len(letexte) -
1))
End If

'Traitement des espaces
debutrecherche = 1
posit = InStr(debutrecherche, letexte, " ", 1)
's'il existe un espace :
While posit > 1
If Mid(letexte, posit + 1, 1) <> " " And _
Mid(letexte, posit + 1, 3) <> "de " And _
Mid(letexte, posit + 1, 3) <> "la " And _
Mid(letexte, posit + 1, 3) <> "du " And _
Mid(letexte, posit + 1, 2) <> "d'" And _
Mid(letexte, posit + 1, 4) <> "des " Then
letexte = Left(letexte, posit) & UCase(Mid(letexte, posit + 1,
1)) & Right(letexte, Len(letexte) - (posit + 1))
End If
debutrecherche = posit + 1
posit = InStr(debutrecherche, letexte, " ", 1)
Wend
'****************************************************
'Traitement des tirets
debutrecherche = 1
posit = InStr(debutrecherche, letexte, "-", 1)
'il existe un tiret donc un nom composé :
While posit > 1
If Mid(letexte, posit + 1, 1) <> " " Then
letexte = Left(letexte, posit) & UCase(Mid(letexte, posit + 1, 1))
& Right(letexte, Len(letexte) - (posit + 1))
End If
debutrecherche = posit + 1
posit = InStr(debutrecherche, letexte, "-", 1)
Wend
'****************************************************
'Traitement des "d'"
debutrecherche = 1
posit = InStr(debutrecherche, letexte, "d'", 2)
'il existe un "d'" :
While posit > 1
If Mid(letexte, posit + 2, 1) <> " " Then
letexte = Left(letexte, posit + 1) & UCase(Mid(letexte, posit + 2,
1)) & Right(letexte, Len(letexte) - (posit + 2))
End If
debutrecherche = posit + 1
posit = InStr(debutrecherche, letexte, "-", 1)
Wend
'****************************************************
NomPropre = letexte
End Function
Avatar
deschamp
c'est simple il suffit de convertir tout en minuscule avec
lcase et ensuite de les convertir avec strconv
ainsi nom=strconv(lcase(nom),vbpropercase)



-----Message d'origine-----
Bonjour à tous,
je cherche une fonction équivalente à la
fonction "Nompropre" (d'Excel) pour

Access 97.
J'ai plus de 5 000 noms écrits tout en majuscule et je ne
me vois pas les

réécrire à la main...
Jouer avec les fonction Ucase et Lcase n'est pas
approprié car cela devient

un vrai casse tête avec les noms composés (ex : Martin-
Lamotte ou De la

Marjelle du Puit du Fond du Jardin).

Quelqu'un a une solution ?
Merci pour vos réponses.


.



Avatar
Raymond [mvp]
Bonjour.

juste une remarque, cette fonction a de grosses lacunes et c'est pour ça
qu'on utilise une fonction spécifique qu'on modifie selon ses besoins.
strconv donne ceci:
Jean-pierre De La Fontaine, ce qui est franchement horrible.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"deschamp" a écrit dans le message de
news:0b9901c3b4e1$d1062cf0$

c'est simple il suffit de convertir tout en minuscule avec
lcase et ensuite de les convertir avec strconv
ainsi nom=strconv(lcase(nom),vbpropercase)
Avatar
lrabiet
Le mardi 25 Novembre 2003 à 13:45 par Florian :
Merci 3stone, j'avais oeuvré dans cette direction.
Merci Raymond, ta réponse à orienté mes recherches.
En voici le résultat (que tout le monde en profite...).
C'est bourrin mais ça à l'air de fonctionner. Notez que les
particules ne
doivent pas être mises en majuscules.
J'espère ne rien avoir oublié car je ne vais pas contrôler
mes 5000
lignes...

Sub test()
'pour tester la fonction
MsgBox NomPropre("marie-pierre-agathe des jonquilles de la marjelle du
château d'albertas "), vbOKOnly, "Test du bidule"
End Sub

*************************************
Function NomPropre(letexte As String) As String
Dim posit As Variant
Dim debutrecherche As Integer
'note : les particules restent en minuscule (ça reste une histoire de
ule)

If IsNull(letexte) Or IsEmpty(letexte) Then Exit Function

letexte = Trim(letexte) 'élimine les espaces avant et
après le
texte
letexte = LCase(letexte) 'passe tout le texte en minuscule

'Traitement de la première lettre
If Left(letexte, 3) <> "de " Or Left(letexte, 3) <>
"du " Or Left(letexte,
2) <> "d'" Or Left(letexte, 4) <> "des " Then
letexte = UCase(Left(letexte, 1)) & LCase(Right(letexte, Len(letexte) -
1))
End If

'Traitement des espaces
debutrecherche = 1
posit = InStr(debutrecherche, letexte, " ", 1)
's'il existe un espace :
While posit > 1
If Mid(letexte, posit + 1, 1) <> " " And _
Mid(letexte, posit + 1, 3) <> "de " And _
Mid(letexte, posit + 1, 3) <> "la " And _
Mid(letexte, posit + 1, 3) <> "du " And _
Mid(letexte, posit + 1, 2) <> "d'" And _
Mid(letexte, posit + 1, 4) <> "des " Then
letexte = Left(letexte, posit) & UCase(Mid(letexte, posit + 1,
1)) & Right(letexte, Len(letexte) - (posit + 1))
End If
debutrecherche = posit + 1
posit = InStr(debutrecherche, letexte, " ", 1)
Wend
'****************************************************
'Traitement des tirets
debutrecherche = 1
posit = InStr(debutrecherche, letexte, "-", 1)
'il existe un tiret donc un nom composé :
While posit > 1
If Mid(letexte, posit + 1, 1) <> " " Then
letexte = Left(letexte, posit) & UCase(Mid(letexte, posit + 1, 1))
& Right(letexte, Len(letexte) - (posit + 1))
End If
debutrecherche = posit + 1
posit = InStr(debutrecherche, letexte, "-", 1)
Wend
'****************************************************
'Traitement des "d'"
debutrecherche = 1
posit = InStr(debutrecherche, letexte, "d'", 2)
'il existe un "d'" :
While posit > 1
If Mid(letexte, posit + 2, 1) <> " " Then
letexte = Left(letexte, posit + 1) & UCase(Mid(letexte, posit + 2,
1)) & Right(letexte, Len(letexte) - (posit + 2))
End If
debutrecherche = posit + 1
posit = InStr(debutrecherche, letexte, "-", 1)
Wend
'****************************************************
NomPropre = letexte
End Function


Bonjour
Je suis un peu novice dans Access. Est ce que quelqu'un peux m'expliquer comment intégrer cette fonction dans Access ?
Merci !!
Lionel