Peut-on écrire ce code autremetn

jean300 Messages postés 374 Date d'inscription   Statut Membre Dernière intervention   -  
jean300 Messages postés 374 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je voudrais savoir s'il est possible d'écrire ce code de façon plus fonctionnel
Çà concerne des cellules variables sous excel 2003
En vous remerciant

'1ère lettre en Majuscule
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, C As Range
Set Rg = Intersect(Range("A29, A34, A37, K4,S10, S18, S21"), Target)
If Not Rg Is Nothing Then
    Application.EnableEvents = False
    For Each C In Rg
        If C <> "" Then
            C.Value = UCase(Left(C, 1)) & LCase(Right(C, Len(C) - 1))
        End If
    Next
    Application.EnableEvents = True
End If

'Nom en MAJUSCULE
Dim Plage As Range
Dim Cellule As Range
Set Plage = Intersect(Target, Range("A4, K7, G24"))
    If Plage Is Nothing Then Exit Sub     'Intersection vide on quitte
        For Each Cellule In Plage     ' sinon on parcours toutes les cellules de la plage d'intersection
           Cellule = UCase(Cellule)    ' et on passe en majuscule
        Next
End Sub




A voir également:

2 réponses

eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

c'est quoi plus fonctionnel qu'un truc qui fonctionne ? :-)
Si tu as des cas en anomalie préciser lesquels.
Pas grand chose à modifier.
Eventuellement remplacer :
c.Value = UCase(Left(c, 1)) & LCase(Right(c, Len(c) - 1))

par :
c.Value = Application.Proper(c.Value)


Et ajouter Application.EnableEvents = False/True dans la 2nde.
eric

Edit : pourquoi déclarer Dim Plage As Range et Dim Cellule As Range alors que tu peux te resservir de rg et c ?
Et en règle générale on met toutes les déclarations en début du module, pas en plein milieu. C'est plus clair.

0
jean300 Messages postés 374 Date d'inscription   Statut Membre Dernière intervention   14
 
Merci eriiic
Sympa. A +
0