1ère lettre en Majuscule

  • Initiateur de la discussion Initiateur de la discussion domeli
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

domeli

XLDnaute Junior
Bonjour

Dans une feuille j'ai ce code que force les Majuscules dans une plage dans une plage de B3 à B29 :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B3:B29")) Is Nothing Then Target = UCase(Target)
End Sub

Je souhaiterai la même chose dans la plage de C3 à C29 mais seulement la 1ère lettre en Majuscule en prenant en compte les noms composés.
J'ai essayé d'ajouter :
If Not Intersect(Target, Range("C3:C29")) Is Nothing Then Target = Proper(Target)

Mais évidemment ça ne fonctionne pas.

Un petit coup de main ne serait pas de refus.
Merci
 
Bon autant pour moi, j'ai trouvé mon bonheur dans une autre discussion.
Merci à thebenoit59 qui m'a apporté la solution. J'ai adapté son code en changeant juste le n° de colonne et c'est bon :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B3😀29")) Is Nothing Then
If Target.Column = 2 Then
Target.Value = UCase(Target.Value)
Else: Target.Value = Application.Proper(Target.Value)
End If
End If
End Sub
 
Bonjour domeli, Bruno,
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo, i&
With [C3:C29] 'modifiable
    tablo = .Value 'matrice, plus rapide
    For i = 1 To UBound(tablo)
        tablo(i, 1) = Application.Proper(tablo(i, 1))
    Next
    Application.EnableEvents = False
    .Value = tablo
    Application.EnableEvents = True
End With
End Sub
A+
 
Bien sûr sur 2 colonnes :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo, i&
With [B3:C29] 'modifiable
    tablo = .Value 'matrice, plus rapide
    For i = 1 To UBound(tablo)
        tablo(i, 1) = UCase(tablo(i, 1))
        tablo(i, 2) = Application.Proper(tablo(i, 2))
    Next
    Application.EnableEvents = False
    .Value = tablo
    Application.EnableEvents = True
End With
End Sub
 
Bonsoir Job75

Effectivement c'est bien plus rapide et de plus je n'ai plus le bug quand j'efface 2 cellules en même temps. Merci bien !
J'ai un petit challenge toutefois. Dans ma colonne C (donc avec la 1ère lettre en Majuscule), il se peut que j'ai des sigles comme DT4 ou DT5.
Pour le moment, je n'ai que de DT1 à DT5, mais il se peut que d'autres viennent par la suite.
Un moyen pour qu'ils soient en Majuscules et non seulement la première lettre ?
 
Dans ma macro précédente vous pouvez par exemple modifier ainsi :
VB:
    For i = 1 To UBound(tablo)
        tablo(i, 1) = UCase(tablo(i, 1))
        If Not tablo(i, 2) Like "DT*" Then tablo(i, 2) = Application.Proper(tablo(i, 2))
    Next
 
mais si je rentre dt5 on a Dt5.
Tout à fait, il faut donc entrer DT5 pour éviter Application.Proper...

Mais si l'on a à faire à des utilisateurs stupides ou distraits on utilisera :
VB:
    For i = 1 To UBound(tablo)
        tablo(i, 1) = UCase(tablo(i, 1))
        tablo(i, 2) = UCase(tablo(i, 2))
        If Not tablo(i, 2) Like "DT*" Then tablo(i, 2) = Application.Proper(tablo(i, 2))
    Next
 

Pièces jointes

Non, il faudra utiliser :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo, i&, x$
With [B3:C29] 'modifiable
    tablo = .Value 'matrice, plus rapide
    For i = 1 To UBound(tablo)
        tablo(i, 1) = UCase(tablo(i, 1))
        tablo(i, 2) = UCase(tablo(i, 2))
        x = tablo(i, 2)
        If Not (x Like "DT*" Or x Like "DADA" Or x Like "DODO") Then tablo(i, 2) = Application.Proper(x)
    Next
    Application.EnableEvents = False
    .Value = tablo
    Application.EnableEvents = True
End With
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
242
Réponses
4
Affichages
232
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
328
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
519
Retour