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
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Allez voir le lien ci-dessous, vous verrez ce qu'il est possible de faire à partir de l'éditeur VBE.
Il fut un temps où l'on éditait manuellement les modules .bas correspondants pour y ajouter des propriétés mais... ma mémoire étant ce qu'elle est... Je vais voir s'il ne me reste pas un exemple.

Profitez-en pour lire l'ensemble du document, vous y apprendrez certainement beaucoup de choses.
 

p'tit vieux

XLDnaute Occasionnel
Bonjour Hasco,
Aprés lecture de l'article (merci) je viens de faire un 1er test très simple dont voici le code.
VB:
Public Function MesAdd(ParamArray Nb1()) As Variant
  Dim i As Integer
  Dim Total As Long
 
    'Boucle sur les éléments du tableau
    For i = 0 To UBound(Nb1())
        Total = Total + Nb1(i)
    Next i
    MesAdd = Total
End Function
Dans la boite de dialogue Fx ça marche nickel..
Mon problème est lorsqu'il y a un certain nombre de paramètres.
Non que ce soit plus compliqué mais ce n'est pas trés ergonomique pour l'utilisateur.
C'est le moins que l'on puisse dire.
Exemple de variable d'une fonction:
1) Ce que j'aurai écrit
Code:
Function MonTest(SelectArea As Variant, Optional CalcWhat As Variant = 1, Optional ShowHow As Variant = 1, Optional ErrLabel As Variant, Optional DoComments As Boolean = True) As Variant
 ' Traitement SelectAera
 ' .... blabla
 ' Traitement CalcWhat
 ' ... blablabla
 ' Traitement Néme variables etc'
 ' et re re blabla
 end function
Ici, pour l'utilisateur, seule "SelecArea" est obligatoire. Pour le reste la fonction se débrouille.
Saisie facile !

2) A priori, si j'ai tout bien compris😕, il faudrait écrire les paramètres ainsi
VB:
Function Test(CalcWhat As Variant,ShowHow As Variant, ErrLabel As Variant, DoComments As Boolean, Paramarray SelectArea1() As Variant) As Variant

End Function
1664954831505.png

Ca marche!
Mais niveau utilisateur c'est ... très moyen. Non?
Et si les champs ne sont pas remplis, puisqu'ils sont obligatoires, ont a une belle erreur #Valeur.
Et impossible d'intercepter l'erreur lorsque l'utilisateur click sur le [OK] de la boite.

Une idée de solution pour contourner cela pour garder l'aspect ergonomique?

Encore merci et bonne journée
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Il y a un élément important que vous semblez oublier dans l'IHM (Interface Homme Machine), c'est le H.
Bien que très imparfait et à l'origine de bien des c.....ies (euh bugs) il est aussi capable d'apprentissage. On peut le former à une interface :)

Vba est un langage dépassé. Ses outils et interfaces ne sont pas actualisées, ses bibliothèques ne sont mises à jours que pour intégrer les nouveaux objets des nouvelles versions d'office. Microsoft ne le conserve que pour compatibilité avec les versions précédentes, il y aura un moment où il faudra passer à autre chose.

Vous pouvez si vous voulez vous mettre au C++, C# ou VB pur. Avec Visual Studio community, VSTO.
Mais directement à partir de vba....

Je fais du vba (entre autres) depuis qu'il est apparu avec office 97 et depuis la plupart des solutions stables et viables (professionnellement) que j'ai vues ont été peu nombreuses. Vraiment peu nombreuses.

Néanmoins il reste un bon outil pour apprendre les bases de la programmation et accomplir des tâches répétitives (ce pour quoi il a été créé ).

Et vous avez raison de vouloir l'apprendre, pas à pas, sans aller trop vite.

Cordialement
 
Dernière édition:

p'tit vieux

XLDnaute Occasionnel
(re) bonjour Hasco
Soyons honnête je (re) programme pour le fun et la curiosité (Sauf quelque fois sur des vieux trucs hors d'âge).
VBA sur Excel est assez nouveau pour moi. Ce qui m'amuse est d'arriver à sortir quelque chose en résolvant des problèmes. Mais repartir de zéro là vous êtes dur avec moi 😂.
En résumé, si je vous comprends bien, à partir de VBA, ce n'est pas possible de contrôler cette fichu boite?
Sauf peut-être en passant par un objet COM qui "hook" le message de la boite?
Ai-je bien compris?
Merci à vous Hasco pour votre intérêt.

Précision:
Si, si mon pseudo n'est pour le monde du Métavers mais correspond bien au monde réel. Les matins sont là pour me le rappeler 😁.
Il y a bien … 10 ans (je dis 10 ans par coquetterie 😊) que ni ne programme ni ne conçoit des Bases de données (entre autre).
Bref!
Je compatis pour ceux pour qui, codé sur Excel/VBA n'est pas un hobby mais le boulot. Obligé de se soumettre à l'article 1 du client/patron: "Tout sur Excel ou rien".
Ce n'est pas drôle tout les jours de faire le poirier (au sens technique) pour créer des fonctions qui demanderaient d'autres technologies 😪. (J'ai donné … merci)
 
Dernière édition:

p'tit vieux

XLDnaute Occasionnel
Bonjour M Toulon,
Merci pour votre réponse mais pourriez-vous être plus précis sur ce que vous voulez dire par "macrodescryption". Merci.
Me serais-je trompé de forum? (à l'insu de mon plein gré)

Si vous pensez aux descriptions des paramètres avec (ou sans ExcelDNA) ou est-ce tout autre chose?
Ca je le fait. Mais je parle de contrôler ce qui se passe lors des saisies/sélections passe dans la boite de dialogue des arguments.
Vous allez trop vite pour moi.😏
Encore merci.
 

patricktoulon

XLDnaute Barbatruc
re
si il doit y avoir contrôle de saisie
alors non il te faut te faire toi même ton interface dans un userform
bien qu'elle gère déjà pas mal de chose normalement
je vois dans ta capture qu'elle n'a pas été bien faite ou pas faite du tout
d'ailleurs car quand on le fait pas on a le même résultat
dans le cercle d'en bas c'est une description des arguments (là c'est absent )
dans celui de droite normalement tu a des gestions diverses (là c'est absent)
si c'est bien fait et que tu tape n'importe quoi alors à la place du"=1"tu a "#erreur"
1664991842192.png
 

patricktoulon

XLDnaute Barbatruc
j'oubliais!!!!!
pour que ca fonctionne il faut que ta fonction ET!! TES ARGUMENTS DE FONCTIONsoient codés beton
j'entend par là byval ,byref long,double sting single etc..etc...
par exemple ça ca ne fonctionnera pas
VB:
Function MonTest(SelectArea As Variant, Optional CalcWhat As Variant = 1, Optional ShowHow As Variant = 1, Optional ErrLabel As Variant, Optional DoComments As Boolean = True) As Variant
la il faut byval partout
apres tout ces variant me gènent car vba peut prendre en compte valide une doné tapée non souhaitée
ma conclusion
avant de vouloir maîtrisez l'interface maîtrisez la fonction tout du moins sa conception
 
Dernière édition:

p'tit vieux

XLDnaute Occasionnel
Re
En attendant demain, une courte réponse car je suis sur mon téléphone.
Tu as raison mes variables ne sont pas typées.
Pour le Byval je n'y avais pas pensé. Merci.
Bon, là ce n'est qu'un bout de code vite fait pour l'exemple. Mais la raison principale des typés Variant est que celà m'offre la possibilité de laisser l'utilisateur final le choix entre plusieurs syntaxes à sa convenance. Donc de la souplesse.
L'ancienne version était typé stricte (intégrer, boolean, Range etc)
Donc demain je vais refaire un bout d'exemple avec "tout comme il faut" et le tester.
VB:
Function MonTest(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
Par contre plus aucune souplesse syntaxique pour l'utilisateur final 😳.

Exemple simpliste de souplesse de saisie pour la variable CalcWhat (quelle est l'opération demandée).
Soit il peut saisir soit un chiffre soit des caractères.
1 ou "+" = addition
6 ou "u" (mu) ou "a" ou "m"= moyenne suivant la langue de l'utilisateur etc.

A demain après les résultats de mes tests.
Bonne soirée et merci
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

[aparté avant enfilage du pyjama en pilou]
Histoire de rappeler à @Hasco qu'avant 97, il y avait... ;)
1993 - Lancement de VBA avec Microsoft Excel (version 5)

NB: En vrai c'était pour le plaisir de le croiser ;)
De plus me rappeler les temps anciens, me fera cette nuit rêver en MACROXL4, qui lui était là avant et causait comme les gens de la TSF en pays de France.
;)
 

patricktoulon

XLDnaute Barbatruc
re
Par contre plus aucune souplesse syntaxique pour l'utilisateur final
à ben ça c'est sur le contrôle c'est justement ça
comment veux tu contrôler une saisie si tu ne peux mettre de limite de type et ou autres a la saisie attendue
c'est le serpent qui se mort la queue ton raisonnement là
une saisie contrôlée par définition n'a pas de souplesse
par contre ce que tu peux faire c'est multiplier les arguments et les mettre en optional
et c'est dans la fonction que tu décide d'utiliser l'un ou l'autre en fonction de la réponse au test ismissing
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,
1993 - Lancement de VBA avec Microsoft Excel (version 5)
Oui j'l'avais oublié suissi :)!
La première version officie intégrant complément VBA était office 97.
Mais c'est vrai qu'il n'a pas fait long feu. Quand à MACROXL4 on peut toujours en faire et si tu veux on peux aussi parler de Multiplan et éventuellement visicalc !
Et que lorsqu'on veut chipoter, on trouve toujours matière.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 973
Membres
103 073
dernier inscrit
MSCHOE16