XL 2013 Minimum et Maximum avec conditions

ZAKAO

XLDnaute Junior
Bonjour tout le monde,

J'espère que vous vous portez bien en ce lundi.

La semaine dernière j'ai pu voir avec vous une solution (Lien du précédent thread)à mon problème qui me donnait une addition conditionnelle suivant une arborescence de type WBS (ci-joint une figure). Je me demandais si en suivant le même principe que la dernière fois, on pourrait obtenir le minimum et le maximum de chaque branche comme on a pu obtenir la somme de chaque branche.

Pour informations : j'utilise encore la version 2013 d'Excel, les fonctions MIN.SI, MAX.SI et MIN.SI.ENS, MAX.SI.ENS, n'existent pas encore. Je suis ouvert à une solution VBA avec tout de même une préférence pour les formules.

Ci-joint, un fichier avec la dernière solution et les colonnes minimum/maximum.

Je vous remercie d'avance de toute l'aide que vous pourriez m'apporter en vous souhaitant une bien belle journée :)
 

Pièces jointes

  • Test - 1 ex(1).xlsx
    10.4 KB · Affichages: 8
  • Capture.JPG
    Capture.JPG
    117.2 KB · Affichages: 20
Dernière édition:
Solution
Bonjour ZAKAO,

Formule matricielle en D3 :
Code:
=MIN(SI(GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".";DECALER(C3;1;;10000)))
Formule matricielle en E3 :
Code:
=MAX(SI(ESTVIDE(DECALER(D3;1;;10000))*(GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".");DECALER(C3;1;;10000)))
Toutes deux à valider par Ctrl+Maj+Entrée.

A+

job75

XLDnaute Barbatruc
Bonjour ZAKAO,

Formule matricielle en D3 :
Code:
=MIN(SI(GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".";DECALER(C3;1;;10000)))
Formule matricielle en E3 :
Code:
=MAX(SI(ESTVIDE(DECALER(D3;1;;10000))*(GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".");DECALER(C3;1;;10000)))
Toutes deux à valider par Ctrl+Maj+Entrée.

A+
 

Pièces jointes

  • Test - 1 ex(1).xlsx
    17.5 KB · Affichages: 4

ZAKAO

XLDnaute Junior
Bonjour ZAKAO,

Formule matricielle en D3 :
Code:
=MIN(SI(GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".";DECALER(C3;1;;10000)))
Formule matricielle en E3 :
Code:
=MAX(SI(ESTVIDE(DECALER(D3;1;;10000))*(GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".");DECALER(C3;1;;10000)))
Toutes deux à valider par Ctrl+Maj+Entrée.

A+
Merci encore une fois @job75 !

Je ne connaissais pas du tout l'existence des formules matricielles pour le coups...
 

ZAKAO

XLDnaute Junior
Bonjour ZAKAO,

Formule matricielle en D3 :
Code:
=MIN(SI(GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".";DECALER(C3;1;;10000)))
Formule matricielle en E3 :
Code:
=MAX(SI(ESTVIDE(DECALER(D3;1;;10000))*(GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".");DECALER(C3;1;;10000)))
Toutes deux à valider par Ctrl+Maj+Entrée.

A+
Bonus :

Je sais qu'il existe la fonction SMALL qui permet d'ignorer la valeur 0 en cherchant le minimum. Est-ce qu'on peut l'intégrer à cette formule telle quelle. Ou faut-il entièrement repenser la formule ?

Merci...
 

ZAKAO

XLDnaute Junior
SMALL c'est PETITE.VALEUR en français.

Elle permet de classer les valeurs.

Avec 1 comme 2ème argument elle fait la même chose que MIN.
En effet, je viens de voir cela, en mettant 2, je prends la deuxième plus petite valeur. Donc avec un test logique pour tester si le minimum donné est 0, je peux décider de prendre la valeur au-dessus.

Mais ce n'est pas vraiment l'effet que je cherchais, trop de cas viennent gêner cette méthode pour ignorer les 0. J'ai observé les suivants :
  • Lorsque que toutes mes heures sont égales à 0, pas de deuxième valeur, écrire un espace serait suffisant, je peux résoudre cela avec une gestion des erreurs
  • Lorsque deux valeurs sont égales à 0 je devrais prendre la 3-ème, mais à la main c'est lourd, en plus je n'obtiens pas forcément l'effet... (capture 2)
C'est dommage lorsqu'on veut appliquer cela à dates par exemple, car Excel va me renvoyer l'année 1900, cela peut venir gêner d'éventuelles opérations sur les cellules.
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    59.1 KB · Affichages: 16
  • Capture 2.JPG
    Capture 2.JPG
    73.9 KB · Affichages: 16

job75

XLDnaute Barbatruc
En fait pour éliminer les valeurs zéro il suffit d'ajouter la condition DECALER(C3;1;;10000)<>0.

Et d'ajouter SIERREUR pour le cas où toutes les valeurs sont nulles, la formule en D3 devient :
Code:
=SIERREUR(PETITE.VALEUR(SI((GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".")*(DECALER(C3;1;;10000)<>0);DECALER(C3;1;;10000));1);"n/a")
Et en E3 :
Code:
=SIERREUR(GRANDE.VALEUR(SI(ESTVIDE(DECALER(D3;1;;10000))*(GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".")*(DECALER(C3;1;;10000)<>0);DECALER(C3;1;;10000));1);"n/a")
 

Pièces jointes

  • Test - 1 ex(2).xlsx
    17.5 KB · Affichages: 3

ZAKAO

XLDnaute Junior
En fait pour éliminer les valeurs zéro il suffit d'ajouter la condition DECALER(C3;1;;10000)<>0.

Et d'ajouter SIERREUR pour le cas où toutes les valeurs sont nulles, la formule en D3 devient :
Code:
=SIERREUR(PETITE.VALEUR(SI((GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".")*(DECALER(C3;1;;10000)<>0);DECALER(C3;1;;10000));1);"n/a")
Et en E3 :
Code:
=SIERREUR(GRANDE.VALEUR(SI(ESTVIDE(DECALER(D3;1;;10000))*(GAUCHE(DECALER(B3;1;;10000);NBCAR(B3)+1)=B3&".")*(DECALER(C3;1;;10000)<>0);DECALER(C3;1;;10000));1);"n/a")
Ah oui d'accord, je commence à comprendre de plus en plus la logique derrière vos formules. Merci encore une fois @job75 pour votre patience.

Par contre je ne comprends pas pourquoi ce coups-ci, la formule n'est pas matricielle en D3.

Je vous souhaite une belle journée. Bye ;)
 
Dernière édition:

Statistiques des forums

Discussions
312 209
Messages
2 086 270
Membres
103 168
dernier inscrit
isidore33