La casse est un terme utilisé dans les domaines de la typographie et de l'informatique pour distinguer une alternative entre les lettres écrites en capitales (MAJUSCULE) et les lettres écrites en minuscule. En l’absence d'utilisation des fonctions de traitement de chaînes de caractères :
- =MAJUSCULE( chaîne de caractères )
- =MINUSCULE( chaîne de caractères )
- =NOMPROPRE( chaîne de caractères) - 1er lettre de chaque mot de la chaîne de caractères en majuscule
Première étape : Modifier le menu contextuel des cellules.
Les procédures sont évidement stockées dans le module ThisWorkbook du projet VBA, j'ai ici choisi d'utiliser mon classeur (.xlsb) de macros personnelles.
Sub resetmenu()
Application.CommandBars("cell").Reset
End Sub
'**********************************************************
Private Sub Workbook_Open()
resetmenu
'appel la macro qui effacera la commande du menu contextuel
'crée lors de la session précédente
Dim Cpop1 As CommandBarPopup
Dim Cbut As CommandBarButton
Dim MaBarre As CommandBar
Set MaBarre = Application.CommandBars("cell")
Set Cpop1 = MaBarre.Controls.Add(msoControlPopup)
'on ajoute le popup qui va comporté tout les boutons
With Cpop1
.Caption = "Modifier la casse" 'label du sous-menu
End With
'on ajoute un bouton au sous-menu contextuel
Set Cbut = Cpop1.Controls.Add(Type:=msoControlButton)
With Cbut
.FaceId = 403 ' bouton avec icône (référence à une table)
.Caption = "MAJUSCLE" ' label du bouton
.OnAction = "majuscule" 'appel de la macro associée
End With
'on répéte l'opération pour les deux autres boutons
Set Cbut = Cpop1.Controls.Add(Type:=msoControlButton)
With Cbut
.FaceId = 404
.Caption = "minuscule"
.OnAction = "minuscule"
End With
Set Cbut = Cpop1.Controls.Add(Type:=msoControlButton)
With Cbut
.FaceId = 306
.Caption = "Nom Propre"
.OnAction = "nompropre"
End With
End Sub
Etape 2 : Écrire les trois macros pour la gestion de la casse
Les procédures sont stockées dans une feuille de module de code du projet VBA, du même classeur (.xlsb) de macros personnelles.
Dim Ch As Range
Sub majuscule()
For Each Ch In Selection
'Pour chaque cellule Ch de ma sélection Selection
'Selection permet de renvoyer l'objet sélectionné dans la fenêtre active
If Not Ch.HasFormula Then
'la propriété HasFormula de l'objet range permet de tester qu'aucune
' cellules de la plage ne contiennent de formule, dans ce cas la conversion est ignorée
Ch.Value = UCase(Ch.Value) 'Upper Case = MAJUSCULE
End If
Next Ch
End Sub
'*************************************************************
Sub minuscule()
For Each Ch In Selection
If Not Ch.HasFormula Then
Ch.Value = LCase(Ch.Value) 'Lower Case = minuscule
End If
Next Ch
End Sub
'*************************************************************
Sub nompropre()
For Each Ch In Selection
If Not Ch.HasFormula Then
Ch.Value = Application.Proper(Ch.Value)
'si une fonction Excel n'a pas d'équivalent en VBA
'utiliser le la fonction Excel (anglais) comme une méthode de l'objet application
End If
Next Ch
End Sub
Merci de votre attention...
0 commentaires:
Enregistrer un commentaire