Microsoft 365 Formule si avec conditions multiples dans colonnes discontinues

Mamiss

XLDnaute Nouveau
Bonjour,

J'ai besoin de votre aide pour me calculer un état d'avancement sur un fichier, voici l'explication:
1. dans la colonne A, j'ai le statut global de ma ligne. Les statuts sont les suivants:
- A Traiter
- En cours
- Traité
2. dans les colonnes C, E, G et I j'ai mes statuts intermédiaire qui peuvent donc être A Traiter, En cours ou Traité. Mes conditions:
- Si au moins une des 4 colonnes C E G ou I contiennent le mot "Traité", ou "En cours", alors la le statut global de la ligne = En cours
- Si toutes les colonnes sont égal au même statut, alors le statut global est égal au statut des colonnes
- Si toutes les cellules sont vides, alors A Traiter.

Voici un fichier qui illustre ma demande

Merci énormément pour l'aide
 

Pièces jointes

  • Classeur1.xlsx
    11.2 KB · Affichages: 7
Solution
Si l'on veut pouvoir modifier la casse il suffit d'utiliser la fonction MINUSCULE :
Code:
=REPT("A traiter";ESTERR(CHERCHE("En cours";C2&E2&G2&I2))*ESTERR(CHERCHE("Traité";C2&E2&G2&I2)))&REPT("En cours";OU(ESTNUM(CHERCHE("En cours";C2&E2&G2&I2));ESTNUM(CHERCHE("Traité";C2&E2&G2&I2))*(NBCAR(C2&E2&G2&I2)-NBCAR(SUBSTITUE(MINUSCULE(C2&E2&G2&I2);"traité";))<24)))&REPT("Traité";NBCAR(C2&E2&G2&I2)-NBCAR(SUBSTITUE(MINUSCULE(C2&E2&G2&I2);"traité";))=24)

job75

XLDnaute Barbatruc
A condition de ne pas utiliser les 3 mots clés en colonnes D F H, formule en A2 :
Code:
=REPT("A traiter";NON(NB.SI(C2:I2;"En cours")+NB.SI(C2:I2;"Traité")))&REPT("En cours";OU(NB.SI(C2:I2;"En cours");NB.SI(C2:I2;"Traité")*(NB.SI(C2:I2;"Traité")<4)))&REPT("Traité";NB.SI(C2:I2;"Traité")=4)
 

Pièces jointes

  • Classeur(1).xlsx
    11.6 KB · Affichages: 7

Mamiss

XLDnaute Nouveau
Bonjour,

Merci énormément pour ce travail. Malheureusement les mots clés peuvent se retrouver dans les autres colonnes. Du coup, la formule doit prendre en compte strictement ces colonnes. Encore une contrainte supplémentaire : les cellules vides ne doivent pas être considérées. En gros, si l'un des 4 cellules contient un mot clé et que les autres sont vides, alors le statut global = mot clé

Je te remercie encore une fois pour l'aide et teste également avec des formules si. J'ai réussi à le faire avec une formule si.conditions imbriqués avec des et et des ou mais le seul problème c'est que mes colonnes doivent avec l'une à la suite de l'autre.
 

job75

XLDnaute Barbatruc
Puisqu'on ne peut pas utiliser NB.SI on peut traiter les chaînes concaténées comme C2&E2&G2&I2.

Formule en A2 :
Code:
=REPT("A traiter";ESTERR(CHERCHE("En cours";C2&E2&G2&I2))*ESTERR(CHERCHE("Traité";C2&E2&G2&I2)))&REPT("En cours";OU(ESTNUM(CHERCHE("En cours";C2&E2&G2&I2));ESTNUM(CHERCHE("Traité";C2&E2&G2&I2))*(NBCAR(C2&E2&G2&I2)-NBCAR(SUBSTITUE(C2&E2&G2&I2;"Traité";))<24)))&REPT("Traité";NBCAR(C2&E2&G2&I2)-NBCAR(SUBSTITUE(C2&E2&G2&I2;"Traité";))=24)
Notez que la casse doit être respectée pour le mot "Traité" à cause de la fonction SUBSTITUE.
 

Pièces jointes

  • Classeur(2).xlsx
    11.7 KB · Affichages: 3

job75

XLDnaute Barbatruc
Si l'on veut pouvoir modifier la casse il suffit d'utiliser la fonction MINUSCULE :
Code:
=REPT("A traiter";ESTERR(CHERCHE("En cours";C2&E2&G2&I2))*ESTERR(CHERCHE("Traité";C2&E2&G2&I2)))&REPT("En cours";OU(ESTNUM(CHERCHE("En cours";C2&E2&G2&I2));ESTNUM(CHERCHE("Traité";C2&E2&G2&I2))*(NBCAR(C2&E2&G2&I2)-NBCAR(SUBSTITUE(MINUSCULE(C2&E2&G2&I2);"traité";))<24)))&REPT("Traité";NBCAR(C2&E2&G2&I2)-NBCAR(SUBSTITUE(MINUSCULE(C2&E2&G2&I2);"traité";))=24)
 

Pièces jointes

  • Classeur(3).xlsx
    12.5 KB · Affichages: 4

Mamiss

XLDnaute Nouveau
Bonjour Job75,
Encore merci pour le temps consacré. Je viens de tester et malheureusement des cas qui ne rentrent pas en compte. Avec la formule, je suis obligée d'avoir tous les 4 champs renseignés et malheureusement, les 4 cellules ne sont pas obligatoires, la dernière peut être vide.
 

job75

XLDnaute Barbatruc
Bonjour Mamiss, le forum,
je suis obligée d'avoir tous les 4 champs renseignés et malheureusement, les 4 cellules ne sont pas obligatoires, la dernière peut être vide.
Que dites-vous là ? Sur mon fichier I4 I6 I7 I8 sont vides !!!
J'ai fini par appliqué une fonction si imbriqué et ça fonctionne.
Avec les fonctions REPT on évite les fonctions SI qui "pèsent" plus lourd en mémoire.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 932
Messages
2 093 730
Membres
105 802
dernier inscrit
Witchun