Formule à condition SI ne voit pas les variables

Fermé
KelvinZer0 Messages postés 13 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 19 juillet 2016 - 15 juil. 2016 à 12:32
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 - 15 juil. 2016 à 14:16
Bonjour,

Je suis novice sur Excel (2013)
J'essaie de programmer une formule simple utilisant des variables constantes (VBA). Seulement, la formule ne semble pas reconnaître le contenu de mes variables. Voici ce que j'essaie de faire :

D'abord, je déclare mes variables contantes comme suit dans un module:
Public Const SZ1 As Integer = 0
Public Const SZ2 As Integer = 1 "Je veux utiliser des variables,"
Public Const SZ3 As Integer = 2 "car j'aimerais pouvoir à tout"
Public Const SZ4 As Integer = 3 "moment changer leurs valeurs."
Public Const SZ5 As Integer = 4
Public Const SZ6 As Integer = 5

Puis dans une cellule, j'inscris le code suivant dans sa barre de formule :
=SI(D9="-";"";SI(OU(D9=SZ$1;D9=SZ$2;D9=SZ$3;D9=SZ$4;D9=SZ$5;D9=SZ$6);"WINS!";1))

Mon but :
1- Tant que la cellule D9 (et les suivantes copiées) contiennent "-", la formule ne renvoit rien et la cellule contenant cette formule reste vide.
2- Si la cellule D9* contient un chiffre (ici soit 0,1,2,3,4 ou 5), renvoit "WINS!".
3- Si la cellule ne contient pas l'un de ces chiffres, renvoit le chiffre "1".

Et bien, il semble qu'il y ait problème, car lorsque j'inscris des valeurs dans la ligne D9 (et les suivantes), j'ai toujours un retour de "1", SAUF lorsque j'inscris "0". À ce moment, j'ai un retour de "WINS!"... mais dans les autres cas, toujours "1". J'ai tenté d'inscrire les chiffres directement dans la formule (sans utiliser de variables), et celà fonctionne ; ça retourne "WINS!". Donc je suppose que ce sont les variables qui causent problème. J'ai aussi tenté d'utiliser les variables sans "$", mais celà ne fonctionne pas non plus.

Comme je le disais, j'ai choisi d'utiliser des variables car j'aimerais pouvoir changer leurs valeurs en cours de route (que ce ne soit pas forcément 0,1,2,3,4,5). J'ai l'impression qu'utiliser des variables constantes posera peut-être problème, mais c'est la seule option que j'ai trouvé pour définir une variable dès sa création. Je ne voulais pas les redéfinir en invoquant une routine à tous les coups...

Donc voilà!...
Quelqu'un peut-il m'aider à résoudre cette énigme?
Comment se fait-il que mes variables ne soient pas reconnues dans ma formule?

Merci à vous
Cordialement
Kelvin
A voir également:

1 réponse

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 398
15 juil. 2016 à 12:54
Bonjour
curieux, on ne voit pas pourquoi la formule serait liée à VBA?
copeir coller chez moi, elle fonctionne très bien?

Reste quand même à vérifier si entre D9 et Z1:Z6 il n'y a pas un problème de format (Z en texte et D en num problème auquel après teste semble bien être sensible la condition SI, mais pas cette variante de la formule:

=SI(NB.SI(Z1:Z6;D9);"Wins!";1)

crdlmnt
0
KelvinZer0 Messages postés 13 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 19 juillet 2016
15 juil. 2016 à 13:24
Bonjour Vaucluse,
Merci de cette réponse très rapide.

C'est que les "SZ" de mes conditions sont des variables, et non des cellules.
À voir votre code ici-bas, celà me fait comprendre bien des choses :
Votre code :
=SI(NB.SI(Z1:Z6;D9);"Wins!";1) 

Si je comprends bien, la fonction "NB.SI" regarde les valeurs de chaque cellule d'une plage (ici de Z1 à Z6), et les compare à D9. Si c'est le cas, celà réduirait la formule de beaucoup!

Étant novice d'Excel, je viens de comprendre votre curiosité, puisqu'il est inutile de déclarer des variables alors que les cellules peuvent (en quelques sortes) être appelées dans une formule telles des variables.

Voyant cette bourde, j'ai abandonné les variables et refait mon code de cette façon en utilisant une rangée de 6 cellules en collone "BR", tel que voici :
=SI(D9="-";"";SI(OU(D9=BR$9;D9=BR$10;D9=BR$11;D9=BR$12;D9=BR$13;D9=BR$14);"WINS!";1))

Celà fonctionne bien, et s'avèrera moins compliqué à changer les valeurs de cellule que de variables.

Si j'ai bien compris votre logique avec "NB.SI", est-ce que le code ci-dessous fonctionnerait aussi ?
=SI(D9="-";"";SI(NB.SI(BR$9:BR$14;D9);"WINS!";1))

Cette idée me plaît ; ça réduirait la formule de façon considérable!

Cordialement,
Kelvin
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 398 > KelvinZer0 Messages postés 13 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 19 juillet 2016
15 juil. 2016 à 14:16
Essayez et vous saurez :-))

NB.SI(BR$9:BR$14;D9) va déterminer si la valeur de D9 est présente dans la liste de valeur de BR9 à BR14 et renvoie WINS! si oui, 1 si non

En fait NB.SI seule compte le nombre de valeurs de D9 présentes dans BR9:BR14 et renvoie 0 ou la valeur trouvée
ensuite la condition SI applique selon que le résultat soit 0 ou >0

ce qui reviendrait à écrire au pied de la lettre:

=SI(NB.SI(BR9:BR14;D9)>0;"WINS!";1)

mais le >0 est superflu ici

crdlmnt
0