J'ai besoin d'intimité. Non pas parce que mes actions sont douteuses, mais parce que votre jugement et vos intentions le sont.
5138 links
Macros de tiddlywiki pour générer l’emplacement des images/liens vers des documents externes.
Parce que je ne le retiens jamais...
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
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