XL 2013 Les Fonctions personnalisé avec Aide à la saisie et Aide boite de dialogue

laurent950

XLDnaute Barbatruc
Bonjour le Forum,
J'ai une question comment ont créé des étiquettes d'aide à la saisie avec des fonctions personnalisées .

J'ai faits un code teste : Le code et l'idée sont de @Magic_Doctor

J'aimerais pouvoir compiler la fin de ce code avec les éléments qui manquent à la saisie comme en exemple sur l'image joint en fin de message :
Pour Remplacer :
1611237426576.png

Par Cela
La Boite de Dialogue personnalisé : Que j'ai placé dans ThisWokbooks
1611237530246.png


Le but est aussi de consigner l'aide de cette fonction à travers une Boîte de dialogue dynamique avec descriptif de cette fonction et suivie en complément d'une aide à la saisie (Pour en connaitre les arguments Obligatoires et de ceux Facultatifs [ ] ) dans la chaine de saisie de cette fonction. c'est une bonne aide. Mais je ne me souviens plus pour cette dernière et j'ai donc créé un Poste via un exemple demandé par @Magic_Doctor complet (un bon exemple)

Lien du poste pour aide sur cette fonction en complément :
XL 2010 - Une fonction personnalisée au comportement étonnant | Excel-Downloads (excel-downloads.com)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

VB:
Private Sub Workbook_Open()
'Sub DescribeFunction()
' Nota site aide :
' https://excel.quebec/excel-formules-et-fonctions/excel-fonction-personnalisee/
' https://silkyroad.developpez.com/vba/fonctions/#LIII
' Créé un fichier d'aide CHM
'        * https://pub.phyks.me/sdz/sdz/creer-un-fichier-chm.html
'
' Permet d'ajouter une fonction personnalisée dans l'assistant de fonction
' et dans la catégrorie de son choix
' Catégorie 0 ici

Dim FuncName As String          ' Nom de la fonction
    FuncName = "ConvertirDecimal"
Dim FuncDesc As String          ' Description de la fonction
    FuncDesc = "Retranscrit une valeur décimale en format TEXTE Avec 2 décimales après la virgule Max (En degrés & minutes ou grades)"
Dim Category As String          ' Categorie de la fonction ici personnalisé
    Category = 11
Dim ArgDecr(1 To 4) As String   ' Tableau des descriptions des arguments de la fonction
    ArgDecr(1) = "Obligatoire : " & vbCrLf & "      * Entrer valeur en Cellule E4" & vbCrLf & "      * On rentre la valeur décimale ici"
    ArgDecr(2) = "Obligatoire Degrés/Grade: " & vbCrLf & "      * Entrer Valeur 0 pour Degrés (compteur omis : 42,25 --> 42° 25')" & vbCrLf & "      * Entrer Valeur 1 pour Grades (compteur omis : 42,25 --> 42,25 gr)"
    ArgDecr(3) = "Optional Val Max: " & vbCrLf & "      * Si valeur à ne pas dépasser pour condition en Cellule E2" & vbCrLf & "      * Valeur indépassable"
    ArgDecr(4) = "Optional compteur stipulé : " & vbCrLf & "      * Entrer valeur 0 pour le signe - (compteur stipulé :  - 42° 25' | - 42,25 gr)" & vbCrLf & "      * Entrer valeur 1 pour le signe + (compteur stipulé :  + 42° 25' | + 42,25 gr)"
Application.MacroOptions _
Macro:=FuncName, _
Description:=FuncDesc, _
Category:=Category, _
argumentdescriptions:=ArgDecr
End Sub
ci dessous l'image de la Boite
1611237623692.png

1611237668253.png

1611237694856.png

1611237720883.png



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Puis le Code (Factice Pour test) que j'ai placé dans un Module : standard
avec fichier Excel joins au message.

VB:
Option Explicit
Public Function ConvertirDecimal(ByVal Entrée As Range, ByVal DegGrad As Boolean, Optional ByVal Max As Range, Optional ByVal Compteur As Byte = 2) As Variant
'Retranscrit une valeur décimale en format TEXTE (qui ne doit pas dépasser 2 décimales après la virgule) en degrés & minutes ou grades
'- NbDec : un nombre entier ou décimal qui n'excède alors pas 2 chiffres après la virgule
'- ChxDegGr : si 1 --> degrés sous forme, par exemple : 42,75 <=> 42° 75'
'             si 2 --> grades
'- compteur : un numéro de compteur (1, 2, 3...)
'             si omis --> pas de signe +/- avant la chaîne de caractères
'             si stipulé --> un signe +/- (suivant la valeur du compteur) avant la chaîne de caractères
'             Ex : pour degrés --> compteur omis : 42,25 --> 42° 25'
'                                  compteur stipulé (suivant la valeur de celui-ci) : + 42° 25' | - 42° 25'
'                  pour grades --> compteur omis : 55,75 --> 55,75 gr
'                                  compteur stipulé (suivant la valeur de celui-ci) : + 55,75 gr | - 55,75 gr
'- max : une valeur que ne peut dépasser la variable "NbDec"
'Magic_Doctor
'
' Conversion condition si dessous : 'vérifie si NbDec est entier ou pas
' Choix : ChxDegGr
'
'
'
Dim ValTemp As String
' teste si Max est initialisé
If Max Is Nothing Then Set Max = Range(Cells(2, 5), Cells(2, 5))
' Test Valeur Compteur Optional
If IsMissing(Compteur) = False Then Compteur = Compteur
' Copteur 0 = false / Compteur 1 = True / Compteur 2 = pas remplis Optional
'
'
    If DegGrad = False Then
    '
        If Entrée.Value Like "*" & "," & "*" Then
        '
            If Entrée.Value > Max.Value And Max.Value <> "" Then
                ValTemp = Replace(Max.Value, ",", "° ")
                    If Compteur = 0 And Compteur <> 2 Then
                        ValTemp = "-" & ValTemp
                    ElseIf Compteur = 1 And Compteur <> 2 Then
                        ValTemp = "+" & ValTemp
                    End If
            Else
                ValTemp = Replace(Entrée.Value, ",", "° ")
                    If Compteur = 0 And Compteur <> 2 Then
                        ValTemp = "-" & ValTemp
                    ElseIf Compteur = 1 And Compteur <> 2 Then
                        ValTemp = "+" & ValTemp
                    End If
            End If
        '
            ValTemp = ValTemp & "'"
        Else
            If Entrée.Value > Max.Value And Max.Value <> "" Then
                ValTemp = Max.Value
                    If Compteur = 0 And Compteur <> 2 Then
                        ValTemp = "-" & ValTemp
                    ElseIf Compteur = 1 And Compteur <> 2 Then
                        ValTemp = "+" & ValTemp
                    End If
            Else
                ValTemp = Entrée.Value
                    If Compteur = 0 And Compteur <> 2 Then
                        ValTemp = "-" & ValTemp
                    ElseIf Compteur = 1 And Compteur <> 2 Then
                        ValTemp = "+" & ValTemp
                    End If
            End If
        '
            ValTemp = ValTemp & "'"
        '
        End If
    '
    ElseIf DegGrad = True Then
        '
            If Entrée.Value > Max.Value And Max.Value <> "" Then
                ValTemp = Max.Value & " Gr"
                    If Compteur = 0 And Compteur <> 2 Then
                        ValTemp = "-" & ValTemp
                    ElseIf Compteur = 1 And Compteur <> 2 Then
                        ValTemp = "+" & ValTemp
                    End If
            Else
                ValTemp = Entrée.Value & " Gr"
                    If Compteur = 0 And Compteur <> 2 Then
                        ValTemp = "-" & ValTemp
                    ElseIf Compteur = 1 And Compteur <> 2 Then
                        ValTemp = "+" & ValTemp
                    End If
            End If
    End If
'
ConvertirDecimal = ValTemp
End Function

L'idée est d'avoir le complément sous cette même forme et donc a Ajouter des lignes de commande en en-tête de function en complément dont je ne me rappelle plus !

Complément à ajouter sur cette ligne de commande les étiquettes des arguments de cette fonction ? Public Function ConvertirDecimal(ByVal Entrée As Range, ByVal DegGrad As Boolean, Optional ByVal Max As Range, Optional ByVal Compteur As Byte = 2) As Variant

1611237069903.png



Lien :
Aide sur l'info bulle des fonctions personalisées - Macros et VBA Excel (developpez.net)

Solution ici : (info bubble function "VBA")
excel - How to put a tooltip on a user-defined function - Stack Overflow
Il suffit de taper au clavier : =MyUDF( + CTRL + Shift + A
C'est expliqué dans le lien
Il faut juste recréé un SenKey (Au clavier et hop c'est partie pas mal)
ET
=MyUDF( + CTRL + Verr.Maj + A (Affiche la boite de dialogue)
' En Détail
VBA MacroOptions to Add UDF Description - wellsr.com
' mais pas encore l'info-bull (Semble ne pas être possible !)
a suivre

Exemple en Poste #5 ci-dessous

Complément donné par @patricktoulon
sans compter aussi qu'il est possible d'ajouter des comentaires a l'interieur meme d'une formule utilisant ta fonction perso
un exemple ici : Merci @patricktoulon
Cdt
 

Pièces jointes

  • Fonction personnalisé VBA aide saisie et Boite de Dialogue.xlsm
    79 KB · Affichages: 19
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
313 328
Messages
2 097 224
Membres
106 880
dernier inscrit
Michel2024