VBA : Modifier la casse à l'aide du clic droit



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 :
  1. =MAJUSCULE( chaîne de caractères )
  2. =MINUSCULE( chaîne de caractères )
  3. =NOMPROPRE( chaîne de caractères) - 1er lettre de chaque mot de la chaîne de caractères en majuscule
Actuellement, votre logiciel Excel ne permet pas de modifier la casse des mots contenus dans les cellules d'une feuille de calcul (ni commande, ni touche de raccourci clavier). Aussi je vous propose ce code VBA permettant la bascule entre les trois positions. La difficulté ici ne réside pas dans la modification de la casse d'un contenu sélectionné mais plutôt dans le choix de l'affectation de ce code en vue de son exécution. Afin de rendre son utilisation la plus aisée possible, j'ai choisi ici d'utiliser le menu contextuel, c'est à dire de reprogrammer le menu surgissant du bouton droit de la  souris. Pour que cette application puisse être utilisable quelque soit le classeur que vous manipulez, vous avez le choix d'incorporer votre code soit dans un classeur de macros personnelles, soit dans un classeur de macros complémentaires.

 

 

 

 

 

 

 

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

top