Utilisation d'un VBA pour optimiser des pertes

Bonjour, dans le cadre d'un projet de construction j'ai créé un fichier Excel pour optimiser les pertes de barre d'armature. Je voulais automatiser les calculs et créer un algorithme qui optimise les pertes en lisant certains paramètres. Je n'arrive pas à obtenir le résultat que je souhaite. Je vous ai joint le fichier pour un type de dalle, il y en aura 180 d'où mon envie d'automatiser les calculs.

---

En résumé, les lignes en rouge présentent les problèmes rencontrés :

Colonne A : [entrée manuelle ou extraite d'une base de données] Le nom des barres d'armatures selon les plans (les barres de même nom ont les même propriétés (nuance, diamètre, longueur) dans toutes les dalles)

Colonne B : [entrée manuelle ou extraite d'une base de données] Nuance de la barre, 2 choix : 400W ou 500W

Colonne C : [entrée manuelle ou extraite d'une base de données] Diamètre de la barre, 4 choix : 10M, 15M, 20M et 25M

Colonne D : [entrée manuelle ou extraite d'une base de données] Nom de la dalle

Colonne E : [entrée manuelle ou extraite d'une base de données] Nombre de barre dans 1 dalle

Colonne F : [entrée manuelle ou extraite d'une base de données] Longueur d'1 barre (en mm)

Colonne G : [formule] Longueur totale = Nb barre * L (en mm) -> peut-on inclure ce calcul dans le VBA ?

Colonne H : [entrée manuelle ou extraite d'une base de données] Barre qui sera pliée ou restera droite (aucun impact, juste de l'info)

Colonne I : [Module VBA] Calcul du nombre de barre d'usine nécessaire pour faire 1 type de barre (arrondi sup), sachant qu'une barre sortie d'usine = 14000mm

Colonne J : [Module VBA] Calcul de la longueur perdue (= (Colonne I * Colonne F) - Colonne G) -> NE S'AFFICHE PAS

Colonne K : [Module VBA] Calcul du % de perte initial (= Colonne J / Colonne G)

A partir d'ici, ce que je souhaitais était qu'un algorithme lise les propriétés de la barre qu'il est entrain de calculer (nuance, diamètre, longueur et longueur perdue) et qu'il recherche les barres avec des propriétés similaires (nuance + diamètre) ainsi que leur longueur (colonne F) et qu'il me sorte la meilleure option pour optimiser ma longueur perdue.

Colonne L : [Module VBA] Affichage de la longueur pouvant être réutilisée -> NE FONCTIONNE PAS

Colonne M : [Module VBA] Calcul du % de perte optimisé ((= Colonne J - Colonne L) / Colonne G)

Colonne N : [Module VBA] Explication de comment utiliser la perte -> NE FONCTIONNE PAS car il recherche uniquement sur la même ligne j'ai l'impression donc ce n'est pas la plus optimisée

---

J'espère que vous saurez m'aider car cela fait une semaine que je me casse la tête dessus....

Merci d'avance

Bonsoir et bienvenue,

Si j'ai bien compris votre souhait est très similaire à un autre que nous avons étudié avec @BsAlv il y a quelque temps :

https://forum.excel-pratique.com/excel/liste-d-optimisation-pour-debit-de-bois-195367

Il voulait couper des planches, vous des fers à béton, mais dans le fond le principe est le même.

Pour info, d'un point de vue théorique c'est un problème très compliqué à résoudre "algorithmiquement" car il existe des quantités astronomiques de combinaisons de découpes de barres possibles sur une même sortie d'usine. Cependant on peut utiliser des méthodes de recherche dites "greedy/gourmandes" pour trouver un optimum sans étudier l'ensemble des combinaisons. Avec @BsAlv nous avions trouvé des solutions pas trop males mais l'auteur original ayant disparu, nous avions abandonné.

Je pense qu'on pourrait adapter à votre cas sans repartir de 0 mais ça risque de prendre du temps, je voulais simplement vous informer de la situation en amont.

Après paradoxalement, en regardant votre fichier j'ai l'impression que vous demandez quelque chose de très simple qui ne nécessite pas de VBA. Si vous souhaitez juste calculer les chutes ligne par ligne, pas besoin de se tracasser avec tout cela. Quelques formules sont suffisantes. Je problème dont je parlais traite de la réutilisation des chutes dans les lignes inférieures.

Bonne soirée

Bonjour,

Message bien reçu !

Je comprends que ça paraisse simple et que l'utilisation d'un VBA n'est pas absolument nécessaire mais c'est un exemple pour une dalle, en tout il y en a 1800 avec 160 types différents. Je pensais que l'automatisation simplifierait les choses. Qu'en pensez-vous ?

Merci pour votre retour et bonne journée

Bonjour,

Ci-joint une proposition pour les calculs faisables sans VBA.

Par contre oui, en relisant vous cherchez bien un algorithme de répartition des chutes, et ça c'est une autre affaire.

Petite info : les formules seront toujours plus efficaces que le VBA, qu'il convient d'utiliser en "dernier recours".

Bonjour,

Merci pour l'info, je ne savais pas qu'un VBA s'utiliser en dernier recours.

Pensez-vous que l'optimisation des pertes reste possible ? Ou devrais-je partir sur une autre solution (je ne sais pas ce qui est disponible) ?

Merci

Bonsoir à tous,

Bonsoir Lisaa, 🙂

Peut-être voir l'algorithme de

Jean Duprat

klin89

Bonsoir à tous,

Oui désolé, je ne vous ai pas répondu car je n'ai pas trop le temps de m'y plonger. Bon courage !

bonjour Lisaaa, Salut saboh12617,Klin89,

Faut-il tenir compte de la perte de 3 mm (par exemple) par sciage ?

un essai avec l'App "Solveur", mais je ne l'ai pas encore programmé en VBA

voir Feuille "Solveur", tableau3, pour les 400W-15M

j'utilise 10 manières de couper (colonne I) avec le nombre de barres de 14.000 que je coupe comme çà dans la colonne J.

Cela me donne une perte de 5,7%

Cette solution vous plaît ou c'est logistiquement une bordele comme çà ? (utilisation de 84.8% >>>> 94.2%, 45 longueurs de 14.000 au lieu de 50)

PS. si on est un peu prémonitoire, les pertes des 2 derniers coupes, (1304 et 1811 mm), on peut l'utiliser pour les 644 ou 637 du lendemain ????

Re à tous, 🙂

Sur le net, on peut faire une recherche avec les termes suivants :

cutting stock problem algorithm excel

C'est quand même pas simple à résoudre ce genre de problèmes, heureusement qu'il y a des experts parmi nous pour s'y intéresser.

klin89 🙃

re,

dans Fichier>options>App (?, je ne sais pas si ceci est correct,mon excel n'est pas francophone), vous activez l'App Solver/Solveur.

Puis dans l'Editeur VBA, Extra>Refs, vous cocher aussi le ref de "solver"

image

Et puis on est lancé.

Bonjour à tous,

BsAlv, pour répondre à ta question, la gestion logistique est également complexe car il y a une notion de certification à garder tout au long de la vie de la barre. Le numéro de coulée de la barre qui sera coupée et pliée devra la suivre jusqu'à ce que le béton soit coulé.

Je ne sais pas trop si c'est clair mais les barres de 14m arrive à l'usine en paquet de x barre d'une coulée numéro "y", quand ces x barres seront découpés, il faudra rapporter ce numéro de coulée ''y" sur tous les nouveaux paquets, même sur les pertes.

Si j'ai bien compris ton tableau, je pense que ca va être complexe de garder cette traçabilité non ?

Pour la perte de sciage, ici on est sur une découpe par pression, je pense qu'il n'y a une perte moins important que 3 mm, peut-être 1,5 mm.

De plus, mon PC bloque tes macros et je n'arrive pas à les activer même en allant dans option pour les activer manuellement... :(

Merci pour ton implication !

vous pouvez cocher ceci dans l'Explorer Windows our ce fichier. Cela fonctionne maintenant ?

582a6947-f830-4bb4-bcfa-9ccde33dd418 - excel

Edit : salut Saboh, en même temps

Bonjour à tous,

Je pense qu'il est possible d'adapter la super macro de @BsAlv pour garder la trace des barres utilisées. Mais je pense qu'il faudra ajouter un 2e tableau à votre fichier contenant le "stock de barres". Quelque chose comme ceci :

Lot

Longueur/infos diverses

Qté

Lot_01

14000

10

Pour l'activation des macros, sur office 365 :

Avant d'ouvrir le fichier Excel :

Dans l'explorateur de fichiers, faites clic droit > propriétés. En bas, cliquez sur "Débloquer".

image

re,

j'éspère que vous avez su résoudre le problème de la sécurité.

Voici le résultat pour le moment chez moi.

Avec le bouton "Solveur", on obtient le tableau "Tabel3" avec (pour le moment) 20 coupes différents pour 90 barres et un rendement de 84%

Puis le bouton "Retracer" vous donne le TCD sur la feuille "Optie ...". (à partir de la cellule AH3). Par exemple les 16 pièces de longueur 2.000 pour l'ordre 400 viennent des barres 3, 4 et 5 du lot_007 et des barres 1 et 2 du lot_008 et de la barre 2 du lot_009. Puis la colonne AK vous donne le numéro du coup et de la barre de ce coup. Maintenant, la question, est-vous satisfait avec cette mise en page ?

Hello,

Problème de sécurité résolu !

Je suis entrain d'analyser ton tableur, j'ai un peu du mal à comprendre je crois. Ca me parait complexe pour le nombre de barre qu'il y aura à traiter : on parle de 1800 dalles (qui ont environ le même ferraillage que celle en exemple) dont 160 types différents... Penses-tu que c'est faisable sur un si grand nombre ? Peut-on présenter de manière plus concise ?

Vous le faites comment pour le moment ? Je peux le faire de la même façon.

1800 dalles et 160 types, cela prendra un peu plus de temps, pouvez-vous me donner un exemple 10 fois plus grand ou même directement 1600 x 160 ?

Je crains juste qu'il optimise de telle manière que vous vous retrouviez avec trop de stock intermédiaire, ce qui rend l'organisation logistiquement plus difficile.

Je vous envoie le fichier demain après-midi.

Pour l'instant on n'est pas encore en production, j'ai bien fait de m'y prendre en amont vu la complexité de la chose haha

Bonjour à tous,

De toute façon comme indiqué par @BsAlv, plus le stock augmente et plus il y aura besoin de temps de calcul. Je me demande cependant dans quelle mesure on ne peut pas répartir les découpes à faire en fonction de l'avancement du chantier :

J'imagine que vous parlez du total des dalles, vous n'allez pas tout ferrailler en même temps. Donc on peut utiliser le planning de chantier pour segmenter grosso/modo les découpes de barres par groupe de dalles ferraillées en même temps.

Mais je suis curieux, n'est-ce pas à l'entreprise de production de fers à béton de s'occuper de ça ? Dans les BE où j'ai travaillé on envoyait les listes de barres sans s'occuper de leur découpe.

re,

Pouvez-vous ajouter un "deadline", le moment où la pièce doit être présent et la cadence (couper autant de barres par heures)

Et on fait des optimalisations dans des blocs de chaque fois une heure ou une demie-heure.

Il faut s'imaginer l'entrée d'un immeuble d'appartements, vous y voyez par exemple 50 boîtes postales. Si je peux optimaliser au max, je fais les 1.600 ordres en même temps et j'ai besoin de toutes les 1.600 boîtes postales, donc impossible, Donc le max pour votre logistique, c'est combien ? 20 ? Donc je peux chercher dans les 20 ordres suivants pour optimaliser cet ordre. Peux-je remettre le reste d'une barre dans le stock primaire, par exemple 10.000 mm d'une barre de 14.000 ?

saboh12617, BsAlv,

Merci pour votre investissement.

Je vais vous envoyer la liste totale des dalles ainsi que leur deadline mais on ne connait pas le ferraillage de toutes les dalles car le BE est encore en conception. Je prépare le planning et vous envoie tout en même temps. Je peux déjà vous dire qu'on prévoit de faire 6 à 8 dalles / jour. Il serait donc intéressant de traiter les pertes soit par jour soit par semaine en fonction du volume de perte obtenue, non ?

Oui d'habitude c'est à l'usine d'armature de faire ce job là sauf qu'ici c'est l'usine de préfabrication des dalles qui s'occupe du CFA (coupe, façonnage, assemblage).

Je reviens le plus rapidement possible vers vous avec les éléments demandés !

Rechercher des sujets similaires à "utilisation vba optimiser pertes"