XL 2013 Fonction SI avec plage de données sur Excel2013

Aude G

XLDnaute Nouveau
Bonjour,
Je souhaite trouver le min d'un tableau avec condition.
La fonction :
VB:
=MIN(SI($F$1:$F$2<>"X";$E$1:$E$2))
30
20X
Ici je souhaite afficher 30 cependant la fonction "SI" à l'air de ne pas fonctionner avec les plages de données et prendre uniquement la première valeur et me renvoie 20.
Pourquoi? Quel serait la solution?
Cette fonction me renvoie bien 30 lorsque je suis sur une version supérieur mais pas excel 2013.
 
Solution
Re,

Vous auriez fait comme je vous ai dit et regardé la formule qui en ressortait vous auriez vu déjà que pour excel
les formules de .FormulaArray sont en anglais. "SI" interdit.

Une autre façon de faire, copier la formule qui est apparue dans la fenêtre exécution, remplacer les numéros de lignes à cacluler par un signe (@ ci-dessous) et utiliser Replace après avoir doublé les guillemets à doubler:

VB:
Range("I9").FormulaArray = Replace("=MIN(IF($F$14:$F$@<>""X"",$D$14:$D$@))", "?", 14 + nombreMesures - 1)

Ligne testée et approuvée par moi-même personnellement :)

cordialement

Aude G

XLDnaute Nouveau
Bonjour @Roblochon ,
Le .FormulaArray ne fonctionne pas, peut être à cause de la version d'excel...
Ca met une erreur et le deboggage me pointe la fonction.
VB:
Worksheets(nomOngletGT).Range("I9").Select
Worksheets(nomOngletGT).Range("I9").FormulaArray = "=MIN(IF($F$14:$F$" & (14 + nombreMesures - 1) & "<>""X"";$D$14:$D$" & (14 + nombreMesures - 1) & "))"
Worksheets(nomOngletGT).Range("I9").NumberFormat = "0.00"
Une autre solution?
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Ce n'est sûrement pas à cause de la version excel. .formulaArray existe depuis la création des objets range (vers 1997 si mes souvenirs sont bons)

Et j'ai testé avant de vous donner !!!!

Votre formule est certainement mal rédigée. C'est tout.

1 - Créez votre formule, à la main dans votre cellule
2 - Après vérification des résultats, maintenez la cellule sélectionnée
3 - Dans la fenêtre d'exécution de l'éditeur VBA (CTRL+G pour ouvrir la fenêtre exécution si ce n'est pas déjà fait) tapez en première ligne de la fenêtre la ligne ci-dessous (point d'interrogation inclus) :
?ActiveCell.FormulaArray
Puis validez par ENTREE, vous verrez votre formule apparaître sur la ligne du dessous. Et comparez avec ce que vous avez écrit en VBA.

Cordialement
 

Aude G

XLDnaute Nouveau
Merci pour ton aide et l'information !
J'ai pu testé mais je te joins l'erreur, qui vient de VBA directement :
Erreur d'execution '1004':
Impossible de definir la propriété FormulaArray de la classe Range.
Mon bout de code (je l'ai bien vérifié) :
VB:
Worksheets(nomOngletGT).Range("I9").Select
Worksheets(nomOngletGT).Range("I9").FormulaArray = "=MIN(SI($F$14:$F$" & (14 + nombreMesures - 1) & "<>""X"";$D$14:$D$" & (14 + nombreMesures - 1) & "))"
Worksheets(nomOngletGT).Range("I9").NumberFormat = "0.00"
Pourtant d'après les docs on peut faire un formulaArray sur Range..
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Vous auriez fait comme je vous ai dit et regardé la formule qui en ressortait vous auriez vu déjà que pour excel
les formules de .FormulaArray sont en anglais. "SI" interdit.

Une autre façon de faire, copier la formule qui est apparue dans la fenêtre exécution, remplacer les numéros de lignes à cacluler par un signe (@ ci-dessous) et utiliser Replace après avoir doublé les guillemets à doubler:

VB:
Range("I9").FormulaArray = Replace("=MIN(IF($F$14:$F$@<>""X"",$D$14:$D$@))", "?", 14 + nombreMesures - 1)

Ligne testée et approuvée par moi-même personnellement :)

cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 763
Messages
2 091 826
Membres
105 076
dernier inscrit
simeand