XL 2019 Boite de dialogue "Insérer une fonction": Avec une UDF, comment créer des champs incrémentés comme avec la Fonction Somme()?

p'tit vieux

XLDnaute Occasionnel
Bonjour à tous,
J'ai vu que dans la boite "Insérer une fonction" lorsque l'on choisi la fonction Somme les champs de saisie permettant de saisir plusieurs cellules/zones s'incrémentent automatiquement.
Lorsque l'on crée une UDF peut-on (et si oui comment) obtenir la même chose?

Merci à tous
 

p'tit vieux

XLDnaute Occasionnel
(re) Bonjour à tous,
J'ai appliqué et testé les conseils d'Hasco.
Ici le code:
VB:
Function MyTest(ByVal SelectArea As Range, Optional ByVal CalcWhat As Integer = 1, Optional ByVal ShowHow As Integer = 1, Optional ByVal ErrLabel As String, Optional ByVal DoComments As Boolean = True) As Variant
' Application.Calculation = xlCalculationManual
' Application.ScreenUpdating = False etc, etc ...
'  SpeedOn True

  Debug.Print "Areas.Count: ", SelectArea.Areas.Count, "Cells.Count: ", SelectArea.Cells.Count
  Debug.Print "Val de Cells(1,1): ", SelectArea.Cells(1, 1).Value
  Debug.Print "CalcWhat: ", CalcWhat
  Debug.Print "ShowHow: ", ShowHow

'  SpeedOn False
End Function

Voici les résultats obtenus.
1665058454920.png

A NOTER:
Je vous livre mes résultats et remarques "brut de béton".
enfin … brut de coffrage puisque vous m'avez momifié 😊 .
Pour la sélection de plusieurs zones il faut tout mettre entre parenthèses. Sinon la cellule a une erreur #Valeur!. Si on ne met pas de pas parenthèses la boite transforme la saisie en chaine de caractères d'où le #Valeur! dans la cellule puisque le type de SelectArea est Range.
J'ai testé la différence entre Byval et Byref et, apparemment, au niveau de la boite cela ne change rien.
Bonne chose depuis ces changements, à priori, pour l'instant, cela ne fait plus planter Excel et je n'ai plus de dépassement de pile.

Je continue les tests et vous tiendrai au courant
Merci
Cordialement à tous
 

patricktoulon

XLDnaute Barbatruc
bonjour
VB:
Public Function MyTest(ByRef SelectArea As Range, Optional ByVal CalcWhat As Integer = 1, Optional ByVal ShowHow As Integer = 1, Optional ByVal ErrLabel As String, Optional ByVal DoComments As Boolean = True) As String
' Application.Calculation = xlCalculationManual
' Application.ScreenUpdating = False etc, etc ...
'  SpeedOn True
  'Debug.Print "Areas.Count: ", SelectArea.Areas.Count, "Cells.Count: ", SelectArea.Cells.Count
  'Debug.Print "Val de Cells(1,1): ", SelectArea.Cells(1, 1).Value
  'Debug.Print "CalcWhat: ", CalcWhat
  'Debug.Print "ShowHow: ", ShowHow

MyTest = "0 plus 0 egal la tete a toto "

End Function
'macro description
Sub UnregisterOptions()
    On Error Resume Next
    Application.MacroOptions Macro:="MyTest", Description:=Empty, ArgumentDescriptions:=Empty, Category:=Empty
    On Error GoTo 0
End Sub

Sub registerOptions()
    Dim Funct_description As String, argumtsArray

    '(max 255 caracteres)
    Funct_description = "Fonction test Fx " & vbCrLf & _
                        "cette fonction ne sert a rien c'est juste un test" & vbCrLf & _
                        "Créated By p'tit vieux on Exceldownloads"

    'Description des arguments de la fonction
    argumtsArray = Array("SelectArea :range ou multi area selectionnées", _
                         "CalcWhat  :  ben quoi", _
                         "ShowHow :  ouais!! si tu veux ", _
                         "ErrLabel : ben ouais ca peut arriver", _
                         "DoComments : do rien du tout ouais!!")


    'appel  la sub pour enregistrer
    Application.MacroOptions Macro:="MyTest", _
                             Description:=Mid(Funct_description, 1, 255), _
                             ArgumentDescriptions:=argumtsArray, _
                             Category:="personnalisée"
End Sub


'***************************************
'a mettre dans l'open si on veut la description  et le formulaire de fonction
Sub auto_open(): registerOptions: End Sub
Sub auto_close(): UnregisterOptions: End Sub
'***************************************
demo.gif


;)
 

p'tit vieux

XLDnaute Occasionnel
Merci Patrick,
J'aime bien tes gifs animés ... explicites!
J'utilise ExcelDNA. Voici des captures de l'UDF "final".
C'est de cela dont tu parles?
1665073847796.png

Le #Valeur! est du à la sélection de zones multiples. la boite "Fx" ne comprend pas malgré les parenthèses.🙄
Moi non plus … qu'il ne comprenne pas car quand c'est tapé dans la zone de saisie tout va bien. 😄

1665072736836.png

1665072810246.png

ShowHow: Laisse l'UDF définir l'affichage des résultats (Auto) ou on peut imposer son choix.
1665072984337.png


DoComment: Ecrit un commentaire ... ou pas 😉
1665073284280.png

Résultats …
1665074611780.png

… de cette sélection:

1665073714880.png
 

Pièces jointes

  • 1665073468360.png
    1665073468360.png
    5.8 KB · Affichages: 8
  • 1665073148905.png
    1665073148905.png
    13 KB · Affichages: 6
  • 1665073062993.png
    1665073062993.png
    11.5 KB · Affichages: 7
Dernière édition:

p'tit vieux

XLDnaute Occasionnel
Oubli
'***************************************
'a mettre dans l'open si on veut la description et le formulaire de fonction
Sub auto_open(): registerOptions: End Sub
Sub auto_close(): UnregisterOptions: End Sub
'***************************************
Pourquoi utilisé Auto_open() au lieu de Workbook_Open() de l'UDF?
Je croyais que Auto_open() et Auto_Close() étaient disons obsolète ?

Mais je m'éloigne de souci de pouvoir contrôler la boite [Fx].
As tu une idée pour intercepter ou invalider le click sur le bouton [Fx].
L'idée serait d'intercepter ce Click pour afficher un UserForm perso de saisie.
Merci encore
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil; @Hasco

[aparté]
Le chipotage était un subterfuge comme indiqué dans le NB, non ?
Ne chipotons pas et allons à l'essentiel
Si le VBA est dépassé, Excel le sera bientôt et si je finis ma phrase un sanglot monotone va sourdre en dedans de moi (même si on n'est pas en automne)
Donc si Excel bientôt hasbeen , alors XLD bientôt fermera boutique !
(Ah y est, c'est malin, je sanglote)
NB: Je vais quand même pas installer Visual Studio Code
ou Visual Studio Community (qui fait une sacrée taille) et devoir tout réapprendre hors de mes cellules tabulatrices ;)
M'en fiche: je ressortirai mon PC W98SE avec Office97 et j'excellerai hors du net.
[aparté]

Je laisse le fil reprendre son cours normal. ;)
 

Discussions similaires