XL 2010 nompropre vba

matoupitou

XLDnaute Occasionnel
bonjour

peut-être que qq1 peut m'aider
j'aimerai créer un bouton dans ma barre d'outils qui me permettrait de passer au format 1ère lettre en maj de chaque mot et sinon minuscule ; écrasant les anciens texte et figeant les nouvelles valeurs
je sais que la fonction nompropre permet cela ; en enregistrant une macro je n'arrive pas à écrire que cela fonctionne pour n'importe quelle cellule. parfois ça efface

en pj un exemple avec mon texte VBA

par avance merci pour votre aide
 

Pièces jointes

  • nompropre.xlsm
    14.3 KB · Affichages: 12

job75

XLDnaute Barbatruc
Juste pour info : en VBA Application.Upper et Application.Lower n'existent pas puisqu'il y a UCase et LCase .

Maintenant avec fioriture :
VB:
Sub Majuscules2()
Dim a As Range
ActiveCell.Activate 'au cas où la sélection n'est pas un Range
For Each a In Selection.Areas
    a = Evaluate("UPPER(" & a.Address & ")")
Next
End Sub

Sub Minuscules2()
Dim a As Range
ActiveCell.Activate 'au cas où la sélection n'est pas un Range
For Each a In Selection.Areas
    a = Evaluate("LOWER(" & a.Address & ")")
Next
End Sub
 

Emile63

XLDnaute Junior
Bonjour Emile63, le forum,

Sans fioriture :
VB:
Sub Majuscules()
Dim a As Range
ActiveCell.Activate 'au cas où la sélection n'est pas un Range
For Each a In Selection.Areas
    a = UCase(a)
Next
End Sub

Sub Minuscules()
Dim a As Range
ActiveCell.Activate 'au cas où la sélection n'est pas un Range
For Each a In Selection.Areas
    a = LCase(a)
Next
End Sub
Bonne journée.

Bonjour Job75,
Je te remercie pour ton aide, j'ai utilisé ton code tel quel (copié/collé) et il ne fonctionne pas chez moi (?!)
Erreur d'exécution N°13 - Incompatibilité de type
:(
 

Eric C

XLDnaute Barbatruc
Bonjour le fil
Bonjour Emile

Essaie avec ce code qui traite la feuille :
VB:
Sub MajusculeFeuille()
Dim cell As Range
For Each cell In ActiveSheet.UsedRange
cell = UCase(cell)
Next
End Sub


Sub MinusculeFeuille()
Dim cell As Range
For Each cell In ActiveSheet.UsedRange
cell = LCase(cell)
Next
End Sub
@+ Eric c
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil,

Alors puisque on repasse par une boucle
(mon code dans le post#17 c'était pour éviter la boucle ;))
Une version avec macro paramétrée .
VB:
Private Sub Change_Casse(Casse As VbStrConv)
Dim a As Range
ActiveCell.Activate 'au cas où la sélection n'est pas un Range
For Each a In Selection.Areas
a = StrConv(a.Text, Casse)
Next
End Sub

Sub testMinuscule()
Application.ScreenUpdating = False
Change_Casse vbLowerCase
End Sub
Sub testMajuscule()
Application.ScreenUpdating = False
Change_Casse vbUpperCase
End Sub
Sub testNomPropre()
Application.ScreenUpdating = False
Change_Casse vbProperCase
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir job75

Je ne fais que proposer une énième façon de convertir des strings.
Sans préjuger de quelle est la meilleure façon de le faire.
Le demandeur a depuis longtemps de quoi mettre sa sélection en nom propre
(avec la méthode de son choix)
 

Staple1600

XLDnaute Barbatruc
Bonsoir Hervé

Une dernière pour la route ;)
VB:
Private Declare Function CharLower Lib "user32.dll" Alias "CharLowerA" (ByVal lpsz As String) As String
Private Declare Function CharUpper Lib "user32.dll" Alias "CharUpperA" (ByVal lpsz As String) As String
Sub Aquatique()
Dim Phrase As String
Phrase = "37 messages pour changer la casse d'un string" & Chr(13) & "(j'aime écrire cette phrase)"
MsgBox CharUpper(Phrase), vbInformation, "Lol"
End Sub
 

Staple1600

XLDnaute Barbatruc
Re,

Avec UsedRange pas de message d'erreur.
VB:
Sub Majuscules_B()
Dim a As Range
ActiveCell.Activate 'au cas où la sélection n'est pas un Range
For Each a In ActiveSheet.UsedRange
If Not IsEmpty(a) And Not a.HasFormula Then
a = UCase(a)
End If
Next
End Sub
 

job75

XLDnaute Barbatruc
Bon maintenant chez moi ça c'est remis à marcher en ajoutant .Value :
VB:
Sub Majuscules()
Dim a As Range
ActiveCell.Activate 'au cas où la sélection n'est pas un Range
For Each a In Selection
    a = UCase(a.Value)
Next
End Sub

Sub Minuscules()
Dim a As Range
ActiveCell.Activate 'au cas où la sélection n'est pas un Range
For Each a In Selection
    a = LCase(a.Value)
Next
End Sub
Ensuite j'ai enlevé les .Value et… ça marche aussi !!! A ne rien y comprendre, je laisse tomber.

PS : au post #42 JM tu traites les cellules une par une, normal que ça marche toujours.
 

Discussions similaires

Statistiques des forums

Discussions
312 158
Messages
2 085 832
Membres
102 997
dernier inscrit
sedpo