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

Messages postés
9077
Date d'inscription
dimanche 19 janvier 2014
Dernière intervention
14 décembre 2018
-
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
Afficher la suite 

Votre réponse

4 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
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 ...
hoquei44
Messages postés
9077
Date d'inscription
dimanche 19 janvier 2014
Dernière intervention
14 décembre 2018
-
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
Commenter la réponse de ucfoutu
Messages postés
9077
Date d'inscription
dimanche 19 janvier 2014
Dernière intervention
14 décembre 2018
0
Merci
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
Commenter la réponse de hoquei44
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
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
hoquei44
Messages postés
9077
Date d'inscription
dimanche 19 janvier 2014
Dernière intervention
14 décembre 2018
-
Merci pour cet indice et des conseils.

Si je trouve la solution, je viendrai la poster.

CB
hoquei44
Messages postés
9077
Date d'inscription
dimanche 19 janvier 2014
Dernière intervention
14 décembre 2018
-
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
Commenter la réponse de ucfoutu
Messages postés
12396
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
0
Merci
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.
hoquei44
Messages postés
9077
Date d'inscription
dimanche 19 janvier 2014
Dernière intervention
14 décembre 2018
-
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
Whismeril
Messages postés
12396
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
-
Ça doit exister, mais VBA n'est pas mon langage de prédilection...
hoquei44
Messages postés
9077
Date d'inscription
dimanche 19 janvier 2014
Dernière intervention
14 décembre 2018
-
Bonjour,

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

CB
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.