Insérer des symboles dans un menu contextuel, Excel VBA

Pour insérer un caractère spécial dans la cellule active dans Excel, sous l’onglet Insertion, dans le groupe Texte, cliquez sur Symbole.

Dans Excel, utilisez la fonction CHAR pour convertir des nombres en caractères. La fonction attend un nombre compris entre 1 et 255, qui spécifie le caractère que vous voulez dans la police choisie. Chaque caractère fait partie du jeu de caractères utilisé sur votre ordinateur. Les nombres de 0 à 32 correspondent aux codes ASCII standards non imprimables. Par exemple, Chr(10) renvoie un caractère de saut de ligne.

Nous réalisons la spécification consécutive de la valeur numérique avec la fonction Row(). Cela donne le numéro de ligne de la ligne dans laquelle se trouve la formule.

Vous pouvez saisir le code de caractère déterminé en maintenant la touche (Alt) enfoncée et en saisissant le code numérique à l’aide du pavé numérique. Pour que le jeu de caractères Unicode soit complété, vous devez faire précéder le numéro de code à trois chiffres d’un 0. Par exemple, vous pouvez créer le signe pour mille ‰ avec la combinaison de touches (Alt) (0137).

La saisie de caractères spéciaux peut être simplifiée grâce à un menu supplémentaire dans le menu contextuel de la cellule. Si vous cliquez sur l’un des boutons, le caractère affiché sur le bouton sera inséré à la position actuelle du curseur.

 

Déterminez d’abord les codes numériques des caractères que vous souhaitez proposer dans le menu contextuel. Ceux-ci sont stockés dans les deux tableaux varSymbol1 et varSymbol2.

Dans cet exemple, nous utilisons la méthode FindControl pour supprimer le contrôle CARACTERES SPECIAUX qui peut déjà exister. La propriété tag du bouton est utilisée pour l’identification. Cela renvoie ou définit des informations sur le contrôle de la barre de commandes. Cela peut par exemple, des données qui peuvent être utilisées comme argument dans des procédures ou des informations qui identifient le contrôle. La propriété Tag du bouton à supprimer a la valeur SpecialTag. Cela identifie de manière unique le contrôle dans la méthode FindControl.

Avant d’ajouter un nouveau menu au menu contextuel de la cellule, créez un nouveau groupe avant le premier élément à l’aide de la propriété BeginGroup. Vous pouvez les reconnaître par une ligne de séparation entre les éléments de la barre de commandes. Le nouveau menu CARACTERES SPECIAUX de type msoControlPopup est alors inséré en première position du menu contextuel de la cellule. Celui-ci est à son tour affecté à deux boutons simples Symbole 2 et Symbole 1 de type msoControlButton. La séquence de création est inversée, puisque le nouvel élément est toujours inséré en haut du menu contextuel et déplace ainsi les autres éléments d’une position vers le bas.

Les codes numériques répertoriés dans les tableaux sont affectés séquentiellement aux boutons CHARACTER2 et CHARACTER1 dans une instruction For…Next. Les boutons sont étiquetés à l’aide de la propriété Caption.

.Caption = Chr(Val(varSymbol2(lngItem)))

Cette syntaxe se compose des parties suivantes :

varSymbol2(lngItem)

Renvoie le code numérique consécutif du deuxième tableau varSymbol2 sous forme de chaîne

Val(varSymbol2(lngItem))

Le code numérique contenu sous forme de chaîne est converti en une valeur numérique via la fonction Val

Chr(Val(varSymbol2(lngItem))))

La fonction Chr convertit la valeur numérique dans le caractère correspondant associé au code de caractère spécifié.

Le code numérique est également attribué aux propriétés de balise des boutons CARACTÈRE SPÉCIAL. Cela permet à la macro InsererSymbole appelée de déterminer de manière unique quel bouton a provoqué l’appel de procédure.

Public Sub InsererSymboleMenuContexte()
Dim cmdBar As CommandBar
Dim cmdBarCtrl As CommandBarControl
Dim ctrlPopUp As CommandBarControl
Dim cmdBarBtn As CommandBarButton
Dim varSymbol1() As Variant
Dim varSymbol2() As Variant
Dim lngItem As Long
' Ajouter les caractères ici
varSymbol1 = Array("137", "177", "178", "179", _
"188", "189", "190", "216")
varSymbol2 = Array("131", "163", "166", "124", _
"139", "155", "171", "187", _
"153", "169", "174")
On Error Resume Next
Application.CommandBars("Cell").FindControl(Tag:="SpecialTag").Delete
On Error GoTo 0
Set cmdBar = Application.CommandBars("Cell")
' Avant le premier contrôle du menu contextuel de la cellule
' démarrer un nouveau groupe
cmdBar.Controls(1).BeginGroup = True
'Créer un menu volatil dans le menu contextuel de la cellule
Set cmdBarCtrl = cmdBar.Controls.Add( _
Type:=msoControlPopup, _
Before:=1, _
Temporary:=True)
With cmdBarCtrl
.Caption = "CARACTERES SPECIAUX"
.Tag = "SpecialTag"
End With
' Créer un deuxième sous-menu
Set ctrlPopUp = cmdBarCtrl.Controls.Add( _
Type:=msoControlPopup, _
Before:=1)
ctrlPopUp.Caption = "Symbole 2"
For lngItem = 0 To UBound(varSymbol2)
Set cmdBarBtn = ctrlPopUp.Controls.Add(msoControlButton)
With cmdBarBtn
.Caption = Chr(Val(varSymbol2(lngItem)))
.Tag = varSymbol2(lngItem)
.OnAction = "InsererSymbole"
End With
Next lngItem
' Créer le premier sous-menu
Set ctrlPopUp = cmdBarCtrl.Controls.Add( _
Type:=msoControlPopup, _
Before:=1)
ctrlPopUp.Caption = "Symbole 1"
For lngItem = 0 To UBound(varSymbol1)
Set cmdBarBtn = ctrlPopUp.Controls.Add(msoControlButton)
With cmdBarBtn
.Caption = Chr(Val(varSymbol1(lngItem)))
.Tag = varSymbol1(lngItem)
.OnAction = "InsererSymbole"
End With
Next lngItem
End Sub

Lorsque vous cliquez sur un bouton CARACTERE SPECIAL, la procédure InsererSymbole est appelée. Il ne reste plus qu’à déterminer quel caractère spécial doit être inséré à la position actuelle du curseur. Pour ce faire, utilisez la propriété Action Control. Il renvoie l’objet CommandBarControl avec sa propriété OnAction définie sur ce gestionnaire. Le code numérique stocké dans la propriété de balise est converti en caractère spécial correspondant à l’aide de la fonction Chr et inséré dans la feuille de calcul.

Public Sub InsererSymbole()
With ActiveCell
.Value = .Value & _
Chr(Val(Application.CommandBars.ActionControl.Tag))
End With
End Sub

Lorsque vous ouvrez l’exemple de fichier, l’événement Workbook_Activate appelle le gestionnaire InsererSymboleMenuContexte. Cela crée le menu CARACTÈRES SPÉCIAUX avec les deux sous-menus Symbole 1 et Symbole 2 dans le menu contextuel de la cellule.

Private Sub Workbook_Activate()
InsererSymboleMenuContexte
End Sub

Lorsque vous passez du classeur d’exemples à un autre classeur Excel ou que vous quittez le classeur d’exemples, l’événement Workbook_Deactivate est appelé. Le menu CARACTÈRES SPÉCIAUX est identifié à l’aide des informations de balise et supprimé via la méthode FindControl.

Private Sub Workbook_Deactivate()
On Error Resume Next
Application.CommandBars("Cell").FindControl(Tag:="SpecialTag").Delete
End Sub

 

 

S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x