VBA excel : écrire un choix d'argument dans formule personalisée

hoquei44 Messages postés 16027 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 21 avril 2024 - Modifié par hoquei44 le 18/03/2017 à 11:51
hoquei44 Messages postés 16027 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 21 avril 2024 - 28 mars 2017 à 00:37
Bonjour,

Je tente depuis ce matin d'apprendre les bases du VBA sur excel.
J'essaye de faire une formule personnalisée qui renverrai un résultat en fonction de deux paramètres.

En l’occurrence le montant de la décote des impôts en fonction du montant de l'impôt brut mais aussi de la nature du foyer (seul, couple).
J'ai découvert qu'il existe la possibilité d'avoir un résultat par "as boolean" en renseignant true/false au lieu de seul/couple. Mais je n'aime pas cette méthode et je préférerai écrire textuellement la nature directement dans la formule.
Ex : =DECOTE(2000;couple)
L'inconvénient du "boolean" est que c'est limité à deux options et que je me retrouverai coincé si je voulais avoir le choix entre trois options ou plus.


Vous trouverez ci-dessous la formule à laquelle je suis parvenu.

Function DECOTE(montant, nature)

If nature = seul Then

    If montant > 1553 Then
    DECOTE = montant
    ElseIf montant < 1513 Then
    DECOTE = montant - (1165 - montant * 3 / 4)
    End If
    
ElseIf nature = couple Then

    If montant > 2560 Then
    DECOTE = montant
    ElseIf montant < 2560 Then
    DECOTE = montant - (1920 - montant * 3 / 4)
    End If

End If

End Function


Je vous remercie par avance pour l'aide que vous m'apporterez.

CB

4 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2017 à 12:42
Bonjour,
Pourquoi aimerais-je tant que l'on sache AU MOINS faire la différence entre ce qu'est une FORMULE, qui utilise des FONCTIONS qui peuvent être natives ou personnalisées, et ce qu'est une FONCTION ?
Lorsque je constate que cette notion DE BASE échappe, je n'ai vraiment pas envie (mais alors : pas du tout) d'être de près ou de loin un encouragement à la continuité dans l'incompréhension des choses basiques ...
0
hoquei44 Messages postés 16027 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 21 avril 2024
Modifié par hoquei44 le 18/03/2017 à 13:29
Bonjour,

En gros, vous ne dites de dégager car j'ai fait une confusion sur une sémantique que je ne connaissais même pas hier.

Je ne demande qu'à apprendre. Si on refuse de me transmettre un savoir, car je manque de savoir, alors c'est un peu le serpent qui se mord la queue. Surtout que vous ne m'indiquez même pas comment acquérir les pré-requis nécessaire.

Si personne ne souhaite me répondre, je voudrais bien que l'on m'indique un autre forum ou un guide explicatif, j'en serai reconnaissant.

CB
0
hoquei44 Messages postés 16027 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 21 avril 2024
Modifié par hoquei44 le 18/03/2017 à 14:03
En fait, il ne manquait que des guillemets de l'argument nature, ainsi que lors de la saisie de la formule pour que la fonction soit correcte (du moins en apparence).

If nature = "seul" Then
[...]
ElseIf nature = "couple" Then

=DECOTE(2000;"couple")

Par contre, je ne sais pas s'il existe la possibilité que la liste des choix apparait lorsque l'on saisie la formule.
Pour les formules recherches, il est proposé de répondre vrai ou faux. Mais existe-il une façon de "personnaliser" cette liste ?

CB
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2017 à 15:26
1)
vous ne m'indiquez même pas comment acquérir les pré-requis nécessaire.

cela s'appelle l'aide de VBA (sur ta machine). Elle est quasiment le mode d'emploi.
2) une fonction retourne une valeur et est typée (ce n'est pas de celle montrée). Ses paramètres sont également à typer
Si tu avais travaillé en option Explicit, plusieurs de ces aspects auraient été dénoncés d'emblée.
(pour ce qui est de ce que j'ai mis en gras : tu sais maintenant où -je te l'ai dit- en chercher la signification et l'utilisation).
La consultation de l'aide VBA est indispensable pour un débutant. Elle est d'ailleurs également faite très fréquemment par les plus avancés. Développer sans passer par là est similaire à vouloir faire de la bicyclette sans selle ni guidon.
Bonne étude
0
hoquei44 Messages postés 16027 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 21 avril 2024
18 mars 2017 à 15:33
Merci pour cet indice et des conseils.

Si je trouve la solution, je viendrai la poster.

CB
0
hoquei44 Messages postés 16027 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 21 avril 2024
19 mars 2017 à 22:26
Bonsoir,

J'ai compris que l'utilisation d'option Explicit oblige à déclarer l'ensemble des variables utilisées dans la fonction.
Cela m'aurait permis de repérer immédiatement l'erreur dû à l'absence de guillemet.

Par contre, je n'ai pas réussi à aller plus loin dans mon problème.

Pour l'aide VBA sur ma machine, il me faudrait déjà une aide pour la lancer puisqu'elle ne répond pas (ni par la barre, ni par F1). Mais bon, le site msdn est là pour compenser.

CB
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
19 mars 2017 à 22:55
Bonsoir,

si tu veux appeler cette fonction depuis une autre macro, un enum répondrait à ton besoin.
Par contre, si comme je le comprends, tu veux appeler cette fonction depuis une cellule, il faut mettre la valeur entière correspondante et il n'y pas la liste déroulante (ou en tout cas je ne sais pas faire), et là on perd de son intérêt.
0
hoquei44 Messages postés 16027 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 21 avril 2024
20 mars 2017 à 23:22
Bonsoir Whismeril,

C'est bien directement depuis une cellule que je vous appeler la "liste déroulante". J'arrête donc de chercher si c'est si complexe que ça à faire.

Merci à vous deux.

CB
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
21 mars 2017 à 07:29
Ça doit exister, mais VBA n'est pas mon langage de prédilection...
0
hoquei44 Messages postés 16027 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 21 avril 2024
28 mars 2017 à 00:37
Bonjour,

Il existe bien des trucs du genre "placeholder" dans les input en html,
mais pour le VBA...

CB
0
Rejoignez-nous