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

hoquei44 7523 Messages postés dimanche 19 janvier 2014Date d'inscription 20 janvier 2018 Dernière intervention - 18 mars 2017 à 11:28 - Dernière réponse : hoquei44 7523 Messages postés dimanche 19 janvier 2014Date d'inscription 20 janvier 2018 Dernière intervention
- 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
Afficher la suite 

10 réponses

Répondre au sujet
ucfoutu 18028 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 20 janvier 2018 Dernière intervention - 18 mars 2017 à 12:42
0
Utile
1
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 7523 Messages postés dimanche 19 janvier 2014Date d'inscription 20 janvier 2018 Dernière intervention - 18 mars 2017 à 13:28
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
hoquei44 7523 Messages postés dimanche 19 janvier 2014Date d'inscription 20 janvier 2018 Dernière intervention - Modifié par hoquei44 le 18/03/2017 à 14:03
0
Utile
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
ucfoutu 18028 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 20 janvier 2018 Dernière intervention - 18 mars 2017 à 15:26
0
Utile
2
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 7523 Messages postés dimanche 19 janvier 2014Date d'inscription 20 janvier 2018 Dernière intervention - 18 mars 2017 à 15:33
Merci pour cet indice et des conseils.

Si je trouve la solution, je viendrai la poster.

CB
hoquei44 7523 Messages postés dimanche 19 janvier 2014Date d'inscription 20 janvier 2018 Dernière intervention - 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
Commenter la réponse de ucfoutu
Whismeril 10835 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 janvier 2018 Dernière intervention - 19 mars 2017 à 22:55
0
Utile
3
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 7523 Messages postés dimanche 19 janvier 2014Date d'inscription 20 janvier 2018 Dernière intervention - 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
Whismeril 10835 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 janvier 2018 Dernière intervention - 21 mars 2017 à 07:29
Ça doit exister, mais VBA n'est pas mon langage de prédilection...
hoquei44 7523 Messages postés dimanche 19 janvier 2014Date d'inscription 20 janvier 2018 Dernière intervention - 28 mars 2017 à 00:37
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.