Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction SI( ; ; ) en VBA

3 réponses
Avatar
GL
Bonjour,

Je n'arrive pas à trouver l'équivalent de la fonction
basique SI parmi les WorksheetFunction de VBA.


Typiquement si j'ai une feuille du style :

<A> <B> <C>
1 VRAI {=SI(B1:B5;A1:A5)} (en validation matricielle)
2 FAUX ...
3 FAUX ...
4 VRAI ...
5 VRAI ...

J'aimerais utiliser {=mafonction(B1:B5;A1:A5)} au lieu de SI.
Avec :
Public Function mafonction(A as Range, B as Range) ' déclaration

(c'est le pb sur lequel je bute. En réalité, mafonction fait un peu plus
mais doit inclure un "SI(<...>;<...>)" dans sa définition)

Merci d'avance.

3 réponses

Avatar
MichD
Bonjour,

Il ne faut surtout pas expliquer ce que tu désires faire
et à quoi doit servir ta formule, tout est évident
par l'exemple que tu as donné comme formule : {=SI(B1:B5;A1:A5)}

MichD
---------------------------------------------------------------
.
Avatar
GL
Le 03/12/2013 13:43, MichD a écrit :
Bonjour,

Il ne faut surtout pas expliquer ce que tu désires faire
et à quoi doit servir ta formule, tout est évident
par l'exemple que tu as donné comme formule : {=SI(B1:B5;A1:A5)}



???

Re-bonjour,

En fait je cherche à faire une fonction
LISTOF(<plage-vecteur>)

qui renvoie les index dans la <plage-vecteur> des valeurs VRAI.

Je peux évidemment faire avec une boucle FOR sur les valeurs de <plage>
Mais j'aurais aimé utiliser une formule matricielle puisqu'il est
possible de le faire avec par exemple :
=PETITE.VALEUR(SI(<plage>;{1.2.3.4.5.6.7});{1.2.3.4.5.6.7})

Bref, Excel et les matrices, c'est carrément limité voire largement
boggué !

Merci quand même (pour info, j'ai fait avec une boucle FOR, pour de
petites plages, ça va quand même question temps de calcul).

Cordialement.
Avatar
MichD
Ces 2 syntaxes fonctionnent :

La question est plutôt, si ta formule est bonne,
pour faire ce que tu veux faire?????????

Chacune d'elles retourne la même chose que si tu avais
écrit ces formules dans une cellule...Cela ne signifie pas
que la formule est bonne!

'----------------------------------------
Sub test()
s = [SMALL(IF(A1:A8,{1,2,3,4,5,6,7}),{1,2,3,4,5,6,7})]

Cette présentation te permet d'inclure des variables...
mais elles font la même chose!
x = Evaluate("SMALL(IF(" & Worksheets("Feuil1").Range("A1:A8").Address & _
",{1,2,3,4,5,6,7}),{1,2,3,4,5,6,7})")
End Sub
'----------------------------------------


MichD
---------------------------------------------------------------