Microsoft 365 Si avec des conditions

  • Initiateur de la discussion Initiateur de la discussion milor17
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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...
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

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

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

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

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

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

Dernière édition:
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 ;-)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
433
  • Question Question
Microsoft 365 Formule si ?
Réponses
7
Affichages
306
Retour