Peut-on écrire ce code autremetn

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


2 réponses

  1. Contributeur
    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
    1. Merci eriiic
      Sympa. A +
      0