Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

transformer nom majuscules, noms propres, ou l'inverse ?

5 réponses
Avatar
jipeache
bonjour,
Dans un tableau de 10000 lignes environ, j'ai une colonne qui indexe
les noms d'auteur(s) d'ouvrages.
La saisie s'est faite sous 2 formes, par exemple :
Blondel-Loisel, Annie \ Litalien, Raymonde \ Canada. Ambassade
(France). Services culturels \ Centre havrais de recherche historique
- Les amis du vieux Havre
ou :
DELISLE, L=E9opold \ PASSY, Louis \ LE PREVOST, Auguste \ BORDEAUX,
Raymond \ CHASSANT, Alfred
par exemple.
Comment harmoniser de fa=E7on automatique : transformer soit tous les
noms en majuscule en nom propre, soit l'inverse ?
Sachant que le " \ " est un s=E9parateur de nom d'auteur, qu'il peut y
avoir (ex 1) des noms d'organismes =E9crits sous forme classique donc =E0
ne pas modifier, que le nom et le pr=E9nom (parfois une initiale et un
point seulement) sont toujours s=E9par=E9s par une virgule, qu'il n'y a
parfois qu'un nom d'auteur (mais la majorit=E9 d'ouvrages collectifs).
Merci

5 réponses

Avatar
Brunos
Bonjour jipeache
Je te propose une fonction personnalisée qui te renvoie le texte avec
les noms de famille d'auteurs mis en majuscule.
J'ai considéré que le nom de famille de l'auteur est toujours suivi
d'une virgule,
les noms d'organismes n'ayant jamais de virgule.

Function NomAuteurEnMaj(Texte)
'max 50 auteurs par texte
'séparateur auteur = ""
'nom famille auteur suivi de ","
Dim Position, n, Auteur(50)
Position = InStr(1, Texte, "", vbTextCompare)
n = 1
' découpe par auteur
Do While Position > 0
Auteur(n) = Left(Texte, Position - 1)
Texte = Right(Texte, Len(Texte) - Position)
Position = InStr(1, Texte, "", vbTextCompare)
n = n + 1
Loop
Auteur(n) = Texte
' met le nom de famille en majuscule
For i = 1 To n
Position = InStr(1, Auteur(i), ",", vbTextCompare)
If Position > 0 Then 's'il y a une virgule
Auteur(i) = UCase(Left(Auteur(i), Position - 1)) _
& Right(Auteur(i), Len(Auteur(i)) - Position + 1)
End If
Next
' recompose le texte
For i = 1 To n
NomAuteurEnMaj = NomAuteurEnMaj & Auteur(i)
If i < n Then NomAuteurEnMaj = NomAuteurEnMaj & ""
Next
End Function

http://cjoint.com/?bvltq4VSCV

Brunos


"jipeache" a écrit dans le message de news:
Comment harmoniser de façon automatique : transformer soit tous les
noms en majuscule en nom propre, soit l'inverse ?
Sachant que le " " est un séparateur de nom d'auteur, qu'il peut y
avoir (ex 1) des noms d'organismes écrits sous forme classique donc à
ne pas modifier, que le nom et le prénom (parfois une initiale et un
point seulement) sont toujours séparés par une virgule, qu'il n'y a
parfois qu'un nom d'auteur (mais la majorité d'ouvrages collectifs).
Merci


Avatar
francois.forcet
On 21 jan, 09:14, jipeache wrote:
bonjour,
Dans un tableau de 10000 lignes environ, j'ai une colonne qui indexe
les noms d'auteur(s) d'ouvrages.
La saisie s'est faite sous 2 formes, par exemple :
Blondel-Loisel, Annie Litalien, Raymonde Canada. Ambassade
(France). Services culturels Centre havrais de recherche historique
- Les amis du vieux Havre
ou :
DELISLE, Léopold PASSY, Louis LE PREVOST, Auguste BORDEAUX,
Raymond CHASSANT, Alfred
par exemple.
Comment harmoniser de façon automatique : transformer soit tous les
noms en majuscule en nom propre, soit l'inverse ?
Sachant que le " " est un séparateur de nom d'auteur, qu'il peut y
avoir (ex 1) des noms d'organismes écrits sous forme classique donc à
ne pas modifier, que le nom et le prénom (parfois une initiale et un
point seulement) sont toujours séparés par une virgule, qu'il n'y a
parfois qu'un nom d'auteur (mais la majorité d'ouvrages collectifs).
Merci


Salut à toi

Onglet Feuil1 colonne A à traiter

Ce code :

Sheets("Feuil1").Activate
For Each c In Worksheets("Feuil1").Range("A1", [A65535].End(xlUp))
Départ = 1
Nom = ""
For i = 1 To Len(c)
Car = Mid(c, i, 1)
If Car <> "," Then
Nom = Nom & Car
Else
If Départ = 1 Then
c.Value = UCase(Nom) & Mid(c, i)
Else
c.Value = Left(c, Départ) & UCase(Nom) & Mid(c, i)
End If
Nom = ""
Départ = i
End If
If Car = "" Then
Nom = ""
Départ = i
End If
Next
Next

Tous les noms se terminant par une virgule sont traités

Dans ce code les lignes

c.Value = UCase(Nom) & Mid(c, i)

c.Value = Left(c, Départ) & UCase(Nom) & Mid(c, i)

mettent ces noms en majuscule

Pour les mettre en minuscules modifier ces lignes ainsi :

c.Value = LCase(Nom) & Mid(c, i)

c.Value = Left(c, Départ) & LCase(Nom) & Mid(c, i)

Pour les mettre en nom propre modifier ces lignes ainsi :

c.Value = UCase(Nom) & Mid(c, i)
c.Value = Application.WorksheetFunction.Proper(c.Value)

c.Value = Left(c, Départ) & UCase(Nom) & Mid(c, i)
c.Value = Application.WorksheetFunction.Proper(c.Value)


Celà devrait te convenir

Dis moi !!!!

Avatar
JB
Bonjour,

Function transforme(texte)
a = Split(texte, "")
For i = LBound(a) To UBound(a)
p = InStr(a(i), ",")
If p <> 0 Then
temp = temp & UCase(Left(a(i), p - 1)) & "," & Mid(a(i), p + 1)
& ""
Else
temp = temp & a(i) & ""
End If
Next i
transforme = Left(temp, Len(temp) - 1)
End Function

JB

On 21 jan, 09:14, jipeache wrote:
bonjour,
Dans un tableau de 10000 lignes environ, j'ai une colonne qui indexe
les noms d'auteur(s) d'ouvrages.
La saisie s'est faite sous 2 formes, par exemple :
Blondel-Loisel, Annie Litalien, Raymonde Canada. Ambassade
(France). Services culturels Centre havrais de recherche historique
- Les amis du vieux Havre
ou :
DELISLE, Léopold PASSY, Louis LE PREVOST, Auguste BORDEAUX,
Raymond CHASSANT, Alfred
par exemple.
Comment harmoniser de façon automatique : transformer soit tous les
noms en majuscule en nom propre, soit l'inverse ?
Sachant que le " " est un séparateur de nom d'auteur, qu'il peut y
avoir (ex 1) des noms d'organismes écrits sous forme classique donc à
ne pas modifier, que le nom et le prénom (parfois une initiale et un
point seulement) sont toujours séparés par une virgule, qu'il n'y a
parfois qu'un nom d'auteur (mais la majorité d'ouvrages collectifs).
Merci


Avatar
Brunos
C'est beaucoup plus court avec Split, évidemment ! Merci JB.
Mais on peut faire un peu + court :
temp = temp & UCase(Left(a(i), p - 1)) & Mid(a(i), p) & ""
Brunos
:o)

"JB" a écrit dans le message de news:

Bonjour,

Function transforme(texte)
a = Split(texte, "")
For i = LBound(a) To UBound(a)
p = InStr(a(i), ",")
If p <> 0 Then
temp = temp & UCase(Left(a(i), p - 1)) & "," & Mid(a(i), p + 1)
& ""
Else
temp = temp & a(i) & ""
End If
Next i
transforme = Left(temp, Len(temp) - 1)
End Function

JB

On 21 jan, 09:14, jipeache wrote:
bonjour,
Dans un tableau de 10000 lignes environ, j'ai une colonne qui indexe
les noms d'auteur(s) d'ouvrages.
La saisie s'est faite sous 2 formes, par exemple :
Blondel-Loisel, Annie Litalien, Raymonde Canada. Ambassade
(France). Services culturels Centre havrais de recherche historique
- Les amis du vieux Havre
ou :
DELISLE, Léopold PASSY, Louis LE PREVOST, Auguste BORDEAUX,
Raymond CHASSANT, Alfred
par exemple.
Comment harmoniser de façon automatique : transformer soit tous les
noms en majuscule en nom propre, soit l'inverse ?
Sachant que le " " est un séparateur de nom d'auteur, qu'il peut y
avoir (ex 1) des noms d'organismes écrits sous forme classique donc à
ne pas modifier, que le nom et le prénom (parfois une initiale et un
point seulement) sont toujours séparés par une virgule, qu'il n'y a
parfois qu'un nom d'auteur (mais la majorité d'ouvrages collectifs).
Merci


Avatar
jipeache
On 21 jan, 12:58, "Brunos" wrote:
C'est beaucoup plus court avec Split, évidemment ! Merci JB.
Mais on peut faire un peu + court :
temp = temp & UCase(Left(a(i), p - 1)) & Mid(a(i), p) & ""
Brunos
:o)

"JB" a écrit dans le message de news:

Bonjour,

Function transforme(texte)
a = Split(texte, "")
For i = LBound(a) To UBound(a)
p = InStr(a(i), ",")
If p <> 0 Then
temp = temp & UCase(Left(a(i), p - 1)) & "," & Mid(a(i), p + 1)
& ""
Else
temp = temp & a(i) & ""
End If
Next i
transforme = Left(temp, Len(temp) - 1)
End Function

JB



Merci à tous.
Je n'ai pas encore pu tester, un autre boulot m'est tombé dessus...
Je regarde la semaine prochaine.
Merci encore
JP