Microsoft 365 Calcul nombre de programmations machine selon condition

Leguyl

XLDnaute Occasionnel
Bonjour à tou(te)s,

Pour chaque développement (largeur) de pièce, je dois calculer le nombre de programmations machine.

=SOMME(SI(FREQUENCE(tabPièces[Dév.];tabPièces[Dév.])>0;1)) me donne le nombre de développement différents qui est de 7 dans le fichier joint mais…

Un support (ou demi-support) = 3 programmations machines
N'importe quelle autre pièce = 2 programmations machines

Le résultat attendu est de 17
• 3 dév. de supports différents = 3*3 = 9
• 4 dév. d'autres pièces = 4*2 = 8

⚠ Je ne peux ajouter de colonne intermédiaire dans le vrai fichier de travail

Merci d'avance à qui pourra m'aider.

Leguyl
 

Pièces jointes

  • Prog machine.xlsx
    12.8 KB · Affichages: 6
Solution
Bonjour,

Voici qui donne 15 :
=LET(
Supports;UNIQUE(FILTRE(tabPièces[Dév.];(tabPièces[Dév.]>0)*ESTNUM(CHERCHE("support";tabPièces[Pièce]))));
Autres;UNIQUE(FILTRE(tabPièces[Dév.];(tabPièces[Dév.]>0)*ESTERREUR(CHERCHE("support";tabPièces[Pièce]))));
NBVAL(Supports)*3+NBVAL(Autres)*2
)
comme vous avez 365 j'ai préféré le faire dans une fonction LET qui permet entre autres une meilleure lecture des formule à rallonge.
Elle pourrait être écrite comme ceci pour raccourcir les filtres :
=LET(
Tests; CHERCHE("support";tabPièces[Pièce]);
Supports; UNIQUE(FILTRE(tabPièces[Dév.];(tabPièces[Dév.]>0)*ESTNUM(Tests)));
Autres; UNIQUE(FILTRE(tabPièces[Dév.];(tabPièces[Dév.]>0)*ESTERREUR(Tests)));
NBVAL(Supports)*3+NBVAL(Autres)*2
)
Ou...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Leguyl,
Vraiment pas sur d'avoir tout compris.
Comment identifie t-on les supports des pièces ? Par leur intitulés ?
Dans ce cas pourquoi ne pas faire :
VB:
=3*NB.SI(tabPièces[Pièce];"Support*")+2*NB.SI(tabPièces[Pièce];"Pièce*")
sinon donnez un peu plus d'explications. :)
 

Leguyl

XLDnaute Occasionnel
Bonsoir sylvanu,

Oui, on identifie un support par son intitulé, que ce soit "Support", "Demi-support" ou autre contenant le mot "support" précédé ou suivi d'un autre mot.

Et si ce n'est pas un support, c'est automatiquement une autre pièce/un autre produit, quel qu'en soit l'intitulé.

Si plusieurs produits différents ont un même développement, pas besoin de reprogrammer la machine pour la découpe/le pliage de ceux-ci.

Les supports nécessitent trois programmations machine par développement, les autres pièces/produits n'en nécessitent que deux.

Ce que je cherche à faire en un seul calcul est donc de :
• Compter le nombre de dév. différents pour les supports et multiplier le résultat par 3
• Compter le nombre de dév. différents des autres produits et multiplier le résultat par 2
• Faire la somme des deux résultats.

Merci pour votre aide.

Ajout/Modif : En fait, je m'aperçois que le résultat attendu dans le fichier joint est 15 et non 17. Il n'y a que trois valeurs de développement de "non support" et pas 4.
 
Dernière édition:

Leguyl

XLDnaute Occasionnel
Bonsoir,
Expliquez en quoi ma formule est fausse puisque je respecte :

On peut faire :
VB:
=3*NB.SI(tabPièces[Pièce];"*Support*")+2*NB.SI(tabPièces[Pièce];"Pièce*")
Mais dans ce cas cela fait 20.
En fait, cette formule ne tient pas compte du fait que les programmations machines sont en rapport avec la valeur de développement (colonne Dév.).

Pour les "*supports*", j'ai 3 développements différents :
816, 696 et 736, ce qui donne 3 x 3 = 9 programmations

Pour les autres produits, j'ai également 3 développements différents :
886, 806 et 766, ce qui donne 3 x 2 = 6 programmations

Il y a donc au total, 15 programmations à faire
 

Gégé-45550

XLDnaute Accro
En fait, cette formule ne tient pas compte du fait que les programmations machines sont en rapport avec la valeur de développement (colonne Dév.).

Pour les "*supports*", j'ai 3 développements différents :
816, 696 et 736, ce qui donne 3 x 3 = 9 programmations

Pour les autres produits, j'ai également 3 développements différents :
886, 806 et 766, ce qui donne 3 x 2 = 6 programmations

Il y a donc au total, 15 programmations à faire
Bonsoir,
Une proposition,
Cordialement,
 

Pièces jointes

  • Prog machine.xlsx
    21 KB · Affichages: 4

Leguyl

XLDnaute Occasionnel
Bonjour Gégé,

C'est presque ça. Le résultat est le bon dans ce cas de figure mais, comme je l'ai (peut-être mal) exprimé, un demi support (ou n'importe quel autre intitulé comportant le mot "support") est considéré comme un support.

Si j'ajoute une valeur de développement à la ligne "Demi support", le résultat passe de 15 à 20 au lieu de 18

Si, en plus, j'ajoute une ligne avec, comme intitulé de pièce "Petit support alu" et que j'entre une valeur de développement qui n'était pas encore utilisée, le résultat total est de 22 au lieu de 21.

Je récapitule mon besoin :
• Si l'intitulé contient le mot "support", suivi ou précédé d'autres mots : 3 programmations par développement différent
• Si l'intitulé ne contient pas le mot "support" : 2 programmations par développement différent

Si vous avez une solution pour régler ce problème, je suis preneur.

Quoi qu'il en soit, merci quand même de vous être penché dessus.

Bonne journée,
Leguyl
 

Gégé-45550

XLDnaute Accro
Bonjour Gégé,

C'est presque ça. Le résultat est le bon dans ce cas de figure mais, comme je l'ai (peut-être mal) exprimé, un demi support (ou n'importe quel autre intitulé comportant le mot "support") est considéré comme un support.

Si j'ajoute une valeur de développement à la ligne "Demi support", le résultat passe de 15 à 20 au lieu de 18

Si, en plus, j'ajoute une ligne avec, comme intitulé de pièce "Petit support alu" et que j'entre une valeur de développement qui n'était pas encore utilisée, le résultat total est de 22 au lieu de 21.

Je récapitule mon besoin :
• Si l'intitulé contient le mot "support", suivi ou précédé d'autres mots : 3 programmations par développement différent
• Si l'intitulé ne contient pas le mot "support" : 2 programmations par développement différent

Si vous avez une solution pour régler ce problème, je suis preneur.

Quoi qu'il en soit, merci quand même de vous être penché dessus.

Bonne journée,
Leguyl
Bonjour,
la fonction FILTRE n'admet pas les caractères génériques.
Hors VBA, la seule solution possible à mon sens nécessite une petite action manuelle.
Voir PJ.
Cordialement,
 

Pièces jointes

  • Prog machine_1.xlsx
    21.5 KB · Affichages: 1

Leguyl

XLDnaute Occasionnel
Bonjour,
Vous ne répondez jamais aux questions ? C'est une question de principe ?
Voir post #6 :

Alors comment arrivez vous à 17 ?
Mais si, je réponds aux questions, toujours. Encore faut-il lire complétement les réponses. J'ai indiqué en fin de post 3 que je m'étais trompé dans le premier post et que le résultat devait être de 15 et non de 17.

Pourquoi ? Parce que...
• Il y a 3 valeurs de développements différents pour les "supports". Multiplié par 3, ça donne 9
• Il y a également 3 valeurs de développements différents pour les autres produits. Multiplié par 2 dans ce cas, ça donne alors 6 programmations
Total : 9 + 6 = 15 programmations machines
 

Leguyl

XLDnaute Occasionnel
Bonjour,
la fonction FILTRE n'admet pas les caractères génériques.
Hors VBA, la seule solution possible à mon sens nécessite une petite action manuelle.
Voir PJ.
Cordialement,
Re bonjour Gégé,

Je ne peux pas demander aux utilisateurs finaux de faire cette manip, ils s'y perdront. Mais je finirai bien par trouver une solution.

Merci à tous les deux de votre participation.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Voici qui donne 15 :
=LET(
Supports;UNIQUE(FILTRE(tabPièces[Dév.];(tabPièces[Dév.]>0)*ESTNUM(CHERCHE("support";tabPièces[Pièce]))));
Autres;UNIQUE(FILTRE(tabPièces[Dév.];(tabPièces[Dév.]>0)*ESTERREUR(CHERCHE("support";tabPièces[Pièce]))));
NBVAL(Supports)*3+NBVAL(Autres)*2
)
comme vous avez 365 j'ai préféré le faire dans une fonction LET qui permet entre autres une meilleure lecture des formule à rallonge.
Elle pourrait être écrite comme ceci pour raccourcir les filtres :
=LET(
Tests; CHERCHE("support";tabPièces[Pièce]);
Supports; UNIQUE(FILTRE(tabPièces[Dév.];(tabPièces[Dév.]>0)*ESTNUM(Tests)));
Autres; UNIQUE(FILTRE(tabPièces[Dév.];(tabPièces[Dév.]>0)*ESTERREUR(Tests)));
NBVAL(Supports)*3+NBVAL(Autres)*2
)
Ou Encore
=LET(
Tests;--ESTNUM(CHERCHE("support";tabPièces[Pièce]));
Supports; UNIQUE(FILTRE(tabPièces[Dév.];(tabPièces[Dév.]>0)*(Tests=1)));
Autres; UNIQUE(FILTRE(tabPièces[Dév.];(tabPièces[Dév.]>0)*(Tests=0)));
NBVAL(Supports)*3+NBVAL(Autres)*2
)
Cordialement
 

Pièces jointes

  • LeGuyl-Prog machine.xlsx
    12.9 KB · Affichages: 2
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof