Majuscule en minuscule sauf 1ere lettre

K

kali

Guest
Bonjour

je voudrais utiliser la fonction suivante avec une variante qui est que je souhaiterais transformer les majuscules en minuscules sauf la 1ere lettre. Quelle est donc le code ?

Sub MajusculePlageA1A10()
Dim cell As Range
For Each cell In Range("A1:A10")
cell = UCase(cell)
Next cell
End Sub



Merci
 
J

Jean-Marie

Guest
Bonjour Kali

Si je te comprends bien, tu veux faire la même chose que la fonction NOMPROPRE, mais en VBA.

Voici le code.

Sub MajusculePlageA1A10()

Dim cell As Range
For Each cell In Range("A1:A10")
cell = Evaluate("PROPER(""" + cell + """)")
Next cell
End Sub

@+Jean-Marie
 
J

Jean-Marie

Guest
Re... Salut Moa

Pas facile d'expliquer, la méthode Evaluate, à comme Name une chaîne texte, tout comme la fonction NOMPROPRE (PROPER en anglais) demande comme argument une chaîne texte.

Etant le dernier des ignares en VBA. j'utilise l'enregistreur de macro et rentre dans une cellule la fonction que je veux utiliser (la fonction en français, VBA la convertira automatiquement).

Voilà ce que me donne l'enregistreur
Range("A1").FormulaR1C1 = "=PROPER(""Mettre le texte sous forme de nom propre"")"
après lancement de ce code, la cellule A1, contiendra une formule.

Mais je ne veux pas une formule, mais la valeur résultante de la fonction, il faut écrire ceci
Range("A1")= Evaluate("PROPER(""Mettre le texte sous forme de nom propre"")")
C'est l'instruction Evaluate qui ce charge de calculer le résultat

Mais dans ce code la donnée data de NOMPROPRE n'est pas variable. Pour remplacer la partie "Mettre le texte sous forme de nom propre", par la référence de la cellule, tout bêtement :
Range("A1") = Evaluate("PROPER(" + Range("A1") + ")")
Apr!s exécution du code, tu obtiens un #NOM? comme résultat, pour comprendre ce qui ce passe, supprime dans la ligne Evaluate(, et la ) à la fin. Range("A1") = "PROPER(" + Range("A1") + ")" , le code retourne PROPER(Mettre le texte sous forme de nom propre), et Mettre le texte sous forme de nom propre n'est pas défini, c'est ce qui donne l'erreur.

Pour faire comprendre à la fonction que c'est du texte il faut ajouter les ""
Range("A1") = Evaluate("PROPER(""" + Range("A1") + """)")

J'espère avoir répondu à ta question.

@+Jean-Marie
 
C

C@thy

Guest
Bonjour Kali, Schmail, Jean-Marie, Moa et les z'ot du forum.

Eh ben moi, je fais comme ça :

Sub MajusculePlageA1A10()
Dim cell As Range
For Each cell In Range("A1:A10")
cell = Application.Proper(cell)
Next cell
End Sub

(evaluate, j'aime pô!)

@+

C@thy
BipBip.gif
 
S

schmail

Guest
Bonsoir à tous

StrConv : Une fonction qui permet d'avoir des minuscules ou majuscule ou nom propre en changeant juste un "argument"
1=majuscule
2=minuscule
3=nom propre

Dim cell As Range
For Each cell In Range("A1:A10")
cell = StrConv(cell, 3)
Next cell

@+ et bonne soirée
 
M

Moa

Guest
Re à tous !

Jean-Marie :

En fait, j'avais fait exactement comme toi, avec l'enregistreur de macro puis des tests avec Evaluate, mais j'avais toujours des erreurs....héhé....!

Et en revenant sur le forum, j'ai vu ta solution !

Cathy :

J'ai essayé aussi comme toi, en supprimant "Evaluate" et en faisant Application.Proper, mais cela ne marchait pas, j'avais du faire une gaffe quelquepart.

J'ai essayé aussi avec Mid et Len.

Et aussi avec :

With ActiveCell.Characters(Start:=2, Length:=0).Font.Blablabla

Finalement, j'aurai encore appris des nouvelles choses aujourd'hui, d'ailleurs à ce sujet, l'aide Excel précise que l'on peut remplacer "Evaluate" par des crochets : [ ]

En tout cas, plein de Mercis à vous trois, pour ces solutions qui fonctionne toutes...et bien....

@ +

Moa
 
C

C@thy

Guest
Moa, j'ai un vieux truc qui traîne, je te le joins

ah ben non, 53k, tout zippé,
je l'écris ci-dessous :

Sub Majus()
Dim MotsCellule As String
Range("a1").Select
MotsCellule = Selection.Value
MotsCellule = UCase(MotsCellule)
Selection.Value = MotsCellule
End Sub
Sub Minus()
Dim MotsCellule As String
Range("a1").Select
Selection = Evaluate("transpose(lower(transpose(" & Selection.Address & ")))")
End Sub
Sub NomPropre()
Range("A1").Value = Application.WorksheetFunction.Proper(Range("A1"))
End Sub

C@thy
BipBip.gif
 

Discussions similaires

Réponses
0
Affichages
147

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16