Formule matricielle "propre" sans #N/A

JNP

XLDnaute Barbatruc
Bonjour à tous :),
Ayant été très intéressé par les possibilités matricielles d'Excel (Tibo nous fait de tellement belles formules ;)), j'ai utilisé et/ou développé des fonctions VBA matricielles.
Mais je n'arrive pas à faire renvoyer aucune valeur lors du dépassement de la dernière valeur du tableau :eek:...
Évidemment, je peux tricher en "gonflant" le tableau avec des valeurs nulles jusqu'à la 20ème ou 30ème valeur, mais c'est pas très pro :rolleyes:...
Je peux aussi faire une colonne intermédiaire et traiter avec ESTNA la première colonne ;).
Mais je n'arrive pas à intégrer la vérification de la valeur dans la formule de la matricielle :eek:.
En pièce jointe, un petit exemple avec la fonction jours fériés de Frédéric Sigorneau, et une matricielle développée pour un autre fil sur le forum.
le résultat souhaité est en jaune, mais sans calcul intermédiaire.
Merci à tous de vos lumières :cool:
 

Pièces jointes

  • Matricielle ESTNA.xls
    48 KB · Affichages: 121

JNP

XLDnaute Barbatruc
Re : Formule matricielle "propre" sans #N/A

Re :),
Pour ma propre information, pourrais-tu me dire ce que tu reproches à la procédure proposée sous le message #11 ?
Je ne reproche rien, j'avais commencé à répondre à Tibo, j'ai été dérangé, et quand j'ai validé mon post, je n'ai pas vu que tu avais posté entre temps :eek:... Toutes mes excuses :( !
Effectivement, vu de l'utilisateur, c'est simple.
Vu du côté gestionnaire de nom, ben, c'est vrai que j'ai toujours du mal à comprendre certaine formules (un peu d'aspro SVP) :p...
Si j'ai bien suivi, tu comptes le nombre de colonnes avant la cellule réceptrice, puis tu compares avec le nombre de crochets ouvrant, afin de renvoyer chaque résultat. C'est effectivement performant ;).
La différence obtenue avec VBA, c'était que le masque vérifiait que c'était bien du numérique séparé par un trait d'union qui se trouvait entre les crochets, mais ce n'était qu'un exemple pour expliquer ce qui me posait problème : l'absence de possibilité d'éliminer les messages d'erreur résultants des valeurs sortant du tableau.
Encore une fois toutes mes excuses pour avoir loupé le #11 :eek:.
Bonne soirée :cool:
PS : Est-il possible d'appliquer ta méthode pour décaler le résultat d'une fonction ?
 

hoerwind

XLDnaute Barbatruc
Re : Formule matricielle "propre" sans #N/A

Salut JNP,

Qu'entends-tu par : décaler le résultat d'une fonction?
Peux-tu donner un petit exemple avec le résultat attendu ?

Quant à : j'ai toujours du mal à comprendre certaine formules
Si c'est le cas pour celle proposée, je me ferai un plaisir de te la décortiquer (demain).
 

JNP

XLDnaute Barbatruc
Re : Formule matricielle "propre" sans #N/A

Re :),
Qu'entends-tu par : décaler le résultat d'une fonction?
Peux-tu donner un petit exemple avec le résultat attendu ?
Quant à : j'ai toujours du mal à comprendre certaine formules
Si c'est le cas pour celle proposée, je me ferai un plaisir de te la décortiquer (demain).
Heureux que tu ai compris mon loupé suite à des perturbations ;).
Décaler le résultat d'une fonction : oui, mon explication n'est pas très claire :eek:.
Pour repartir, par exemple, de la fonction JourFérié de FS :
La fonction renvoie un tableau contenant tous les jours fériés (hors Alsace-Moselle, mais bon :p...).
Si je rentre la formule dans une plage de cellule avec une validation en Ctrl+Maj+Enter, je récupère tous les fériés, et au delà du 25 décembre, les valeurs sortent en #N/A.
Si je rentre la formule avec un simple Enter, toutes les cellules comprennent le 1er janvier.
Je souhaiterais pouvoir dire : je veux le premier résultat du tableau. Et en glissant vers le bas, récupérer les autres résultats en masquant ceux sortant du tableau (et se traduisant par un #N/A).
Ce sera avec plaisir que je lirai tes explications pour ta formules décortiquée ;).
Mais, peux-tu la décortiquer dans ce sens : mon résultat final, c'est la chaine entre 2 crochets, donc j'utilise STX pour l'extraire. Mais mon premier [ est dans telle position, et ] dans l'autre, donc j'utilise ça pour déterminer leur position, etc.
Je sais que ce n'est pas forcément le mode de raisonnement commun, mais le mien est de partir de la solution pour trouver le départ :D...
Merci d'avance :cool:
 

Habitude

XLDnaute Accro
Re : Formule matricielle "propre" sans #N/A

Pour repartir, par exemple, de la fonction JourFérié de FS :
La fonction renvoie un tableau contenant tous les jours fériés (hors Alsace-Moselle, mais bon :p...).
Si je rentre la formule dans une plage de cellule avec une validation en Ctrl+Maj+Enter, je récupère tous les fériés, et au delà du 25 décembre, les valeurs sortent en #N/A.
Si je rentre la formule avec un simple Enter, toutes les cellules comprennent le 1er janvier.
Je souhaiterais pouvoir dire : je veux le premier résultat du tableau. Et en glissant vers le bas, récupérer les autres résultats en masquant ceux sortant du tableau (et se traduisant par un #N/A).

Alors pour ce faire tu dois oublié le matricielle.
Et passé un deuxième paramètre à ta fonction, soit l'indice désiré.

Ca permet de faire la gestion des erreur avec un Si
 

Pièces jointes

  • MatricielleDate2.xls
    44.5 KB · Affichages: 91

JNP

XLDnaute Barbatruc
Re : Formule matricielle "propre" sans #N/A

Re :),
Effectivement, ça parait plus logique (même si un peu lourd :p)
Code:
=SI(ESTERR(JoursFériés(2010;LIGNE()));"";(JoursFériés(2010;LIGNE())))
OK, ça me permet de voir les limites de VBA :D...
Merci à toi, et je ne suis pas contre le "décorticage" d'Hoerwind ;).
Bonne nuit :cool:
 

Habitude

XLDnaute Accro
Re : Formule matricielle "propre" sans #N/A

Re :),
Effectivement, ça parait plus logique (même si un peu lourd :p)
Code:
=SI(ESTERR(JoursFériés(2010;LIGNE()));"";(JoursFériés(2010;LIGNE())))
OK, ça me permet de voir les limites de VBA :D...
Merci à toi, et je ne suis pas contre le "décorticage" d'Hoerwind ;).
Bonne nuit :cool:

Et bien pas tout à fait

Si une fonction prend un paramètre limité. ( ici 1 à 10) Alors c'est sont paramètre que l'on test.

Code:
=SI((LIGNE()> 0)*(LIGNE()<11);JoursFériés(2010;LIGNE());"")
 

hoerwind

XLDnaute Barbatruc
Re : Formule matricielle "propre" sans #N/A

Bonjour,

L'explication de la formule nommée sous la pièce jointe, j'espère avoir été clair.

Pour Habitude :
LIGNE()>0 me semble superflu, une ligne étant toujours >0
Par contre <12 permet d'afficher aussi le 25/12/2010
De plus cette condition préliminaire n'est valable que si la liste des jours fériés est appelée à partir de la ligne 1, si ce n'est en la corrigeant à chaque fois.

Il me semble beaucoup plus logique d'inclure cette condition dans la macro.
 

Pièces jointes

  • NonMaricielleV2.zip
    15 KB · Affichages: 20

hoerwind

XLDnaute Barbatruc
Re : Formule matricielle "propre" sans #N/A

Re,

Heureux d'avoir pu t'aider quelque peu.

J'avais lu que Morefunc ne fonctionne pas sous la version 2007, donc forcément sous 2010, et je n'ai pas encore été voir si une nouvelle version avait été publiée.
 

JNP

XLDnaute Barbatruc
Re : Formule matricielle "propre" sans #N/A

Re :),
J'avais lu que Morefunc ne fonctionne pas sous la version 2007, donc forcément sous 2010, et je n'ai pas encore été voir si une nouvelle version avait été publiée.
Si, si, la version 2007 existe et fonctionne :). Mais elle ajoute des fonctionalités au ruban, ce qui coince avec 2010 vu que la gestion du ruban a changé...
Bonne journée :cool:
 
G

Guest

Guest
Re : Formule matricielle "propre" sans #N/A

Jnp, Hoerwind, Tibo, Habitude, David

Merci pour cette conversation dont j'ai suivi chaque post avec interêt.

( je re-déclare mon adminration pour les formulistes en particulier)

A+
 

Habitude

XLDnaute Accro
Re : Formule matricielle "propre" sans #N/A

Bonjour,

L'explication de la formule nommée sous la pièce jointe, j'espère avoir été clair.

Pour Habitude :
LIGNE()>0 me semble superflu, une ligne étant toujours >0
Par contre <12 permet d'afficher aussi le 25/12/2010
De plus cette condition préliminaire n'est valable que si la liste des jours fériés est appelée à partir de la ligne 1, si ce n'est en la corrigeant à chaque fois.

Il me semble beaucoup plus logique d'inclure cette condition dans la macro.


Et Bien tu as raison.
Or ce que je voulais démontrer était plus l'utilisation du paramètre.
Ligne() étant un exemple, que, je n'utiliserais pas nécessairement dans ce cas.
 

Discussions similaires

Statistiques des forums

Discussions
312 677
Messages
2 090 818
Membres
104 674
dernier inscrit
salimmed