Microsoft 365 Si avec des conditions

milor17

XLDnaute Nouveau
Bonjour à tous,

Je suis bloquée sur une formule, trop complexe pour moi.

Je vous explique la situation (le fichier est évidemment en PJ) :
Onglet "Composants" : base de donné qui va nous renvoyer le résultat.
-> à chaque "0" dans la colonne A. Le composant de la colonne C va changer. Chaque composant a généralement plusieurs utilisations.
-> le résultat que j'aimerais avoir se trouve dans l'onglet "Analyse_resultat". Ci-dessous ce que j'aimerais obtenir, selon les différentes instructions. Je les ai mis dans l'ordre, c'est à dire que celles du dessus priment sur celles du dessous.
  • Si le composant trouve au moins 1x une utilisation dont le premier chiffre est "2" -> Utilisé dans = A analyser
  • Si le composant trouve au moins 1x une utilisation dont le premier chiffre est "1" -> Utilisé dans = Pompes
  • Si le composant ne trouve QUE des utilisations qui commencent par "099" -> Utilisé dans = Uniquement kits -> Attention ! Ici il y a une particularité. La première utilisation que le composant va renvoyer à chaque "0" en colonne A est son propre composant. En gros, à chaque "0", le composant = l'utilisation. Donc ici, il ne faut pas tenir compte de cette ligne d'utilisation avec le "0" en colonne A.
  • Si le composant ne trouve qu'une seule utilisation et que c'est le même numéro que le composant (donc "0" en colonne A et qui est suivi par un autre "0") -> Utilisé dans = Rien du tout
  • Si le composant ne trouve que des utilisations dont le premier chiffre est "0" -> Utilisé dans = Uniquement SAV
J'espère que mes explications en parallèle du fichier sont assez claires. Si ce n'est pas le cas, n'hésitez pas à poser des questions !

Un grand merci d'avance.
 

Pièces jointes

  • Formule_Excel.xlsx
    12 KB · Affichages: 10
Solution
Bonjour à toutes & à tous,
bonjour @milor17
Dans certaines cellules, la formule renvoie "0" et je n'arrive pas à détecter pourquoi. Peut-être à cause des "P" et des "E" ?
Oui, c'est la raison la dernière condition de la formule vérifie que les Utilisations commencent toutes par 0 (hormis la 1ère ligne avec niveau=0).
Que faut-il faire pour ces cas avec des utilisations commençant par une lettre ?

Deuxième point, transforme tes listes en tableaux structurés et nomme les :
Sélectionne une cellule de ta liste, Onglet Accueil "Mettre sous forme de tableau" choisis un style, Coche "Mon tableau comporte des entêtes" et en haut à gauche du menu choisis le nom de ton tableau :
1678709473770.png
1678709646433.png

(Ici tb_Composants et...

vgendron

XLDnaute Barbatruc
Bonjour

Est ce que la présentation de ta feuille Composants peut etre modifiée pour regrouper les composants par numéro sans avoir de ligne vide
dans l'essai "manuel" que j'ai fait, je pense avoir retrouvé la logique

peux tu vérifier?
1) j'ai mis les données dans une table "t_BDD"
2) j'ai trié par "Composant" puis "Niveau"
3) j'ai ajouté une colonne F qui indique le changement de composant
4) dans la colonne G: j'ai appliqué manuellement la logique pour retrouver le résultat attendu..
 

Pièces jointes

  • Formule_Excel.xlsx
    16.9 KB · Affichages: 3

AtTheOne

XLDnaute Accro
Supporter XLD
Bonjour à toutes & à tous,
bonjour @milor17
Avec les explications @vgendron et la création de 2 tableaux (tb_Composants et tb_Utilisation)
Utilise la formule
VB:
=SI(SOMME((tb_Composants[Composant]=[@Article])*(GAUCHE(tb_Composants[N° composante];1)="2"))>0;"A analyser";
SI(SOMME((tb_Composants[Composant]=[@Article])*(GAUCHE(tb_Composants[N° composante];1)="1"))>0;"Pompes";
SI(SOMMEPROD((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]="0"))=NB.SI(tb_Composants[Composant];[@Article]);"Rien du tout";
SI(SOMMEPROD((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0")*(GAUCHE(tb_Composants[N° composante];3)="099"))=SOMMEPROD((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0"));"Uniquement kits";
SI(SOMMEPROD((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0")*(GAUCHE(tb_Composants[N° composante];1)="0"))=SOMMEPROD((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0"));"Uniquement SAV";)))))

Voir le classeur joint

Amicalement
Alain
 

Pièces jointes

  • Si avec des conditions.xlsx
    16 KB · Affichages: 1

milor17

XLDnaute Nouveau
Bonjour @AtTheOne !

Merci beaucoup pour cette formule, elle fonctionne nickel.

Par contre, est-ce que c'est possible d'ajouter encore une condition :
S'il y a un article présent dans "Analyse_vierge" qu'on ne retrouve pas dans l'onglet "Composants", alors la colonne "Utilisé dans" renvoie du vide.
J'ai remis la PJ avec un article supplémentaire afin que vous compreniez mieux (je l'ai ajouté plus bas afin de ne pas détruire le tableau.

Bonjour à toutes & à tous,
bonjour @milor17
Avec les explications @vgendron et la création de 2 tableaux (tb_Composants et tb_Utilisation)
Utilise la formule
VB:
=SI(SOMME((tb_Composants[Composant]=[@Article])*(GAUCHE(tb_Composants[N° composante];1)="2"))>0;"A analyser";
SI(SOMME((tb_Composants[Composant]=[@Article])*(GAUCHE(tb_Composants[N° composante];1)="1"))>0;"Pompes";
SI(SOMMEPROD((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]="0"))=NB.SI(tb_Composants[Composant];[@Article]);"Rien du tout";
SI(SOMMEPROD((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0")*(GAUCHE(tb_Composants[N° composante];3)="099"))=SOMMEPROD((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0"));"Uniquement kits";
SI(SOMMEPROD((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0")*(GAUCHE(tb_Composants[N° composante];1)="0"))=SOMMEPROD((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0"));"Uniquement SAV";)))))

Voir le classeur joint

Amicalement
Alain
 

Pièces jointes

  • Si avec des conditions_v2.xlsx
    16 KB · Affichages: 2

AtTheOne

XLDnaute Accro
Supporter XLD
Re-Bonjour,
Il suffit de rajouter la condition "SOMME((tb_Composants[Composant]=[@Article])*1)=0"
remarque : pour l'utilisation dans une version antérieure à XL365 ou XL2021 il faut remplacer les "SOMME" par des "SOMMEPROD" (Pb formules matricielles)

La formule devient :
VB:
=SI(SOMME((tb_Composants[Composant]=[@Article])*1)=0;"";
SI(SOMME((tb_Composants[Composant]=[@Article])*(GAUCHE(tb_Composants[N° composante];1)="2"))>0;"A analyser";
SI(SOMME((tb_Composants[Composant]=[@Article])*(GAUCHE(tb_Composants[N° composante];1)="1"))>0;"Pompes";
SI(SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]="0"))=NB.SI(tb_Composants[Composant];[@Article]);"Rien du tout";
SI(SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0")*(GAUCHE(tb_Composants[N° composante];3)="099"))=SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0"));"Uniquement kits";
SI(SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0")*(GAUCHE(tb_Composants[N° composante];1)="0"))=SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0"));"Uniquement SAV";))))))

Ou pour condenser un peu en utilisant la fonction LET :
Enrichi (BBcode):
=LET(Test;tb_Composants[Composant]=[@Article];Composante;tb_Composants[N° composante];Niveau;tb_Composants[Niveau];
SI(SOMME(Test*1)=0;"";
SI(SOMME(Test*(GAUCHE(Composante;1)="2"))>0;"A analyser";
SI(SOMME(Test*(GAUCHE(Composante;1)="1"))>0;"Pompes";
SI(SOMME(Test*(Niveau="0"))=SOMME(Test*1);"Rien du tout";
SI(SOMME(Test*(Niveau<>"0")*(GAUCHE(Composante;3)="099"))=SOMME(Test*(Niveau<>"0"));"Uniquement kits";
SI(SOMME(Test*(Niveau<>"0")*(GAUCHE(Composante;1)="0"))=SOMME(Test*(Niveau<>"0"));"Uniquement SAV";)))))))

(J'ai mis les deux versions dans le fichier)
Autre remarque les références sont au format "texte" et non pas ""nombre" ou "standard"

Voir PJ
Amicalement
Alain
PS : Si c'est le cas, pense à noter le post qui répond à ta question comme solution (case à cocher à droite du post)
 

Pièces jointes

  • Si avec des conditions_v3.xlsx
    16.7 KB · Affichages: 1

milor17

XLDnaute Nouveau
Bonjour @milor17
Peux-tu dire si ma dernière proposition de vendredi te convient ?
Alain
Bonjour @AtTheOne, milles excuses pour ma réponse plus que tardive.
La formule ne fonctionne pas totalement, j'ai donc essayé de résoudre le problème seule mais malheureusement je n'y arrive pas (je n'utilise pas la formule LET).
Dans certaines cellules, la formule renvoie "0" et je n'arrive pas à détecter pourquoi. Peut-être à cause des "P" et des "E" ?
J'ai remis le fichier de base en PJ afin que tu puisses voir où ça n'est pas OK.
Merci encore d'avance.
 

Pièces jointes

  • Formule_Excel.xlsx
    12.8 KB · Affichages: 1

AtTheOne

XLDnaute Accro
Supporter XLD
Bonjour à toutes & à tous,
bonjour @milor17
Dans certaines cellules, la formule renvoie "0" et je n'arrive pas à détecter pourquoi. Peut-être à cause des "P" et des "E" ?
Oui, c'est la raison la dernière condition de la formule vérifie que les Utilisations commencent toutes par 0 (hormis la 1ère ligne avec niveau=0).
Que faut-il faire pour ces cas avec des utilisations commençant par une lettre ?

Deuxième point, transforme tes listes en tableaux structurés et nomme les :
Sélectionne une cellule de ta liste, Onglet Accueil "Mettre sous forme de tableau" choisis un style, Coche "Mon tableau comporte des entêtes" et en haut à gauche du menu choisis le nom de ton tableau :
1678709473770.png
1678709646433.png

(Ici tb_Composants et tb_Utilisation)
ensuite la formule :
Enrichi (BBcode):
=SI(SOMME((tb_Composants[Composant]=[@Article])*1)=0;"";
SI(SOMME((tb_Composants[Composant]=[@Article])*(GAUCHE(tb_Composants[N° composante];1)="2"))>0;"A analyser";
SI(SOMME((tb_Composants[Composant]=[@Article])*(GAUCHE(tb_Composants[N° composante];1)="1"))>0;"Pompes";
SI(SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]="0"))=NB.SI(tb_Composants[Composant];[@Article]);"Rien du tout";
SI(SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0")*(GAUCHE(tb_Composants[N° composante];3)="099"))=SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0"));"Uniquement kits";
SI(SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0")*(GAUCHE(tb_Composants[N° composante];1)="0"))=SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0"));"Uniquement SAV";))))))
fait référence à tb_Composants[N° composante] soit la colonne N° composante du tableau tb_Composants
et à [@Article] à la colonne Article du tableau tb_Utilisation
Si dans ton tableau tb_Composants cette colonne s’appelle Utilisation il faut remplacer [N° composante] par [Utilisation]
et dans ton tableau tb_Utilisation cette colonne s'appelle Composant il faut remplacer [@Article] par [@Composant]

J'ai appliqué tout cela à ton nouveau fichier (avec un "Pas de correspondance" à la place du "0")

Réponds-moi pour les éventuelles conditions supplémentaires relatives aux utilisations commençant par des lettres
 

Pièces jointes

  • Formule_Excel v2.xlsx
    16.2 KB · Affichages: 2
Dernière édition:

milor17

XLDnaute Nouveau
Bonjour à toutes & à tous,
bonjour @milor17

Oui, c'est la raison la dernière condition de la formule vérifie que les Utilisations commencent toutes par 0 (hormis la 1ère ligne avec niveau=0).
Que faut-il faire pour ces cas avec des utilisations commençant par une lettre ?

Deuxième point, transforme tes listes en tableaux structurés et nomme les :
Sélectionne une cellule de ta liste, Onglet Accueil "Mettre sous forme de tableau" choisis un style, Coche "Mon tableau comporte des entêtes" et en haut à gauche du menu choisis le nom de ton tableau : Regarde la pièce jointe 1165639 Regarde la pièce jointe 1165640
(Ici tb_Composants et tb_Utilisation)
ensuite la formule :
Enrichi (BBcode):
=SI(SOMME((tb_Composants[Composant]=[@Article])*1)=0;"";
SI(SOMME((tb_Composants[Composant]=[@Article])*(GAUCHE(tb_Composants[N° composante];1)="2"))>0;"A analyser";
SI(SOMME((tb_Composants[Composant]=[@Article])*(GAUCHE(tb_Composants[N° composante];1)="1"))>0;"Pompes";
SI(SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]="0"))=NB.SI(tb_Composants[Composant];[@Article]);"Rien du tout";
SI(SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0")*(GAUCHE(tb_Composants[N° composante];3)="099"))=SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0"));"Uniquement kits";
SI(SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0")*(GAUCHE(tb_Composants[N° composante];1)="0"))=SOMME((tb_Composants[Composant]=[@Article])*(tb_Composants[Niveau]<>"0"));"Uniquement SAV";))))))
fait référence à tb_Composants[N° composante] soit la colonne N° de composante du tableau tb_Composants
et à [@Article] de à la colonne Article du tableau tb_Utilisation
Si dans ton tableau tb_Composants cette colonne s’appelle Utilisation il faut remplacer [N° de composante] par [Utilisation]
et dans ton tableau tb_Utilisation cette colonne s'appelle Composant il faut remplacer [@Article] par [@Composant]

J'ai appliqué tout cela à ton nouveau fichier (avec un "Pas de correspondance" à la place du "0")

Réponds-moi pour les éventuelles conditions supplémentaire relatives aux utilisation commençant par des lettres
Merci beaucoup, je vais pouvoir y aller avec ça ;-)
 

Discussions similaires

Réponses
7
Affichages
273
  • Résolu(e)
Microsoft 365 Formule SI
Réponses
4
Affichages
368
Réponses
15
Affichages
499

Statistiques des forums

Discussions
314 719
Messages
2 112 183
Membres
111 455
dernier inscrit
Jacandre