Recherche algorithme VBA plans de découpe

cs_aruna62190 Messages postés 19 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 12 mai 2011 - 26 avril 2011 à 16:09
cs_aruna62190 Messages postés 19 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 12 mai 2011 - 12 mai 2011 à 20:36
Bonjour,
VOici le probleme : on part d'une bobine d'appro avec une certaine largeur (en mm) et une certaine longueur (en m). J'ai un certain nombre de bobinos à produire avec eux aussi une largeur et longueur. Je veux savoir combien de bobines d'appros il me faut pour produire l'ensemble des bobinos et les restes éventuels sur chaque bobine d'appro. Il faut donc minimiser les chutes. Quelqu'un aurait une idée sur un algo en VBA?


ex : bobine d'appro : largeur 1300 (en mm) ; longueur : 479 (en m)
bobinos à produire :
3 de largeur 441 et longueur 339
1 de largeur 441 et longueur 215
16 de largeur 172 et longueur 479
10 de largeur 143 et longueur 479
De combien de bobines d'appro ai je besoin pour produire l'ensemble des bobinos? Quels sont les pertes sur chaque bobine d'appro?

MERCI

31 réponses

4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
27 avril 2011 à 12:01
Juste une question. As-tu une taille minimale de bobinos à produire. Par exemple les bobino ne peuvent pas être plus petit que 100 en largeur et 100 en longueur.
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
27 avril 2011 à 12:07
Oublie ma question donne moi encore 30 min
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
27 avril 2011 à 12:23
Tu as un adresse perso. pour que je t'envoie un fichier. J pas encore fini mais je vois que cela va être chaud de te l'envoyer par le site
0
cs_aruna62190 Messages postés 19 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 12 mai 2011
27 avril 2011 à 13:50
Slt oui voici mon adresse : utakaman62@hotmail.com
Je te remercie.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
27 avril 2011 à 14:07
Ok g une analyse a te montrer mais là g une urgence je te l'envoie soire.
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
27 avril 2011 à 23:40
Finalement c plus simple que je le tape là et tu ferra un copier coller.

tab et un tableau 3 dimension que je vois ainsi tab[enregistrement][nombre de appro][surface]
Case [surface] en m2

Je tape les fonction majuscule tu devras en créer d'autres ainsi que les "instructions" (boucles, teste, etc) et var pour variable.

début du code :
var_aire_ma_bobine = l'aire de la bobine de référence. Don ton exemple c'est 1.3 * 479
R
E saisie du nombre de appro et des dimension
P calculé la sur face de l'appro en m2
T mettre le tout dans tab[var_x][nombre de appro][calculé la sur face du appro en m2]
E additionnée var_x de un
R
TANT QUE l'utilisateur entre des données
TRIER_TAB(fonction qui doit trier la tab de la plus grande à la plus plus petite surface. retourne rien)
var_enre = APPRO_A_GÉRÉ(prend tab en paramètre et retourne la première case ou [nombre de appro]>0 si aucun retourne -1 )
TANT QUE var_enre > ou = à 0
R SI var_reste = 0
SI tab[var_enre][nombre de appro] * tab[var_enre][surface] < ou = var_aire_ma_bobine
var_reste = var_aire_ma_bobine - tab[var_enre][nombre de appro]] * tab[var_enre][surface]
SI var_rest 0 donc var_bobine var_bobine + 1
E SI NON
var_nbfois =COMBIEN_DE_FOIS(paramètre tab[var_enre][nombre de appro]] * tab[var_enre][surface] et var_aire_ma_bobine)
var_reste = (tab[var_enre][nombre de appro]] * tab[var_enre][surface]) - (var_aire_ma_bobine * var_nbfois)
SI var_reste = 0
var_bobine = var_bobine + var_nbfois
P SI NON
var_bobine = var_bobine + var_nbfois - 1
FIN DU TESTE var_reste = 0
tab[var_enre][nombre de appro] = 0
FIN DU TESTE tab[var_enre][nombre de appro]] * tab[var_enre][surface] < ou = var_aire_ma_bobine
T SI NON var_reste > 0
var_enr=RESTE_SUFFISANT(cherche dans tab l'enre qui à une surface < ou = à var_reste et la retourne si non retourne -1)
TANT QUE var_enr > ou = 0 ou var_reste > 0
R var_nbfois = COMBIEN_DE_FOIS(prend tab[var_enre][surface] et var_reste)
E var_reste = var_reste - tab[var_enre][surface] * var_nbfois
E P tab[var_enre][nombre de appro] = tab[var_enre][nombre de appro] - var_nbfois
T SI var_reste > 0 donc var_enr = RESTE_SUFFISANT(...)
E
R
SI var_reste > 0
var_perte = var_perte + var_reste
var_reste = 0
FIN DU TESTE var_reste > 0
FIN DU TEST var_reste = 0
R var_enre = APPRO_A_GÉRÉ(prend tab en paramètre et retourne la première case ou [nombre de appro]>0 si aucun retourne -1 )
AFFICHER_RESULTATS(prend var_bobine et var_perte et les affiche à l'écran
Fin du code :

Voila. Bien sur rien n'est à prendre comme du pain béni et je vais ouvrir un nouveau poste pour savoir ce que pense les internaute de mon analyse
+
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
27 avril 2011 à 23:54
ça m'énerve !!! Vraiment P%&2" fais C8+U** il n'a pas pris en compte les espaces pour faire les blocs d'instructions!!! Je me suis donné la pêne de les faire vraiment suis déçus!!!
!
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
28 avril 2011 à 13:24
Voila c comme ça que je voulais que tu le lises. tien moi au courant

début du code :
  var_aire_ma_bobine = l'aire de la bobine de référence. Don ton exemple c'est 1.3 * 479
  R
  E saisie du nombre de appro et des dimension
  P calculé la sur face de l'appro en m2
  T mettre le tout dans tab[var_x][nombre de appro][calculé la sur face du appro en m2]
  E additionnée var_x de un
  R
  TANT QUE l'utilisateur entre des données
  TRIER_TAB(fonction qui doit trier la tab de la plus grande à la plus plus petite surface. retourne rien)
  var_enre = APPRO_A_GÉRÉ(prend tab en paramètre et retourne la première case ou [nombre de appro]>0 si aucun retourne -1 )
  TANT QUE var_enre > ou = à 0
  R SI var_reste = 0
      SI tab[var_enre][nombre de appro] * tab[var_enre][surface] < ou = var_aire_ma_bobine
      var_reste = var_aire_ma_bobine - tab[var_enre][nombre de appro]] * tab[var_enre][surface]
      SI var_rest 0 donc var_bobine var_bobine + 1
  E SI NON
      var_nbfois =COMBIEN_DE_FOIS(paramètre tab[var_enre][nombre de appro]] * tab[var_enre][surface] et var_aire_ma_bobine)
      var_reste = (tab[var_enre][nombre de appro]] * tab[var_enre][surface]) - (var_aire_ma_bobine * var_nbfois)
      SI var_reste = 0
        var_bobine = var_bobine + var_nbfois
  P   SI NON
        var_bobine = var_bobine + var_nbfois - 1
      FIN DU TESTE var_reste = 0
      tab[var_enre][nombre de appro] = 0
    FIN DU TESTE tab[var_enre][nombre de appro]] * tab[var_enre][surface] < ou = var_aire_ma_bobine
  T SI NON var_reste > 0
      var_enr=RESTE_SUFFISANT(cherche dans tab l'enre qui à une surface < ou = à var_reste et la retourne si non retourne -1)
      TANT QUE var_enr > ou = 0 ou var_reste > 0
      R var_nbfois = COMBIEN_DE_FOIS(prend tab[var_enre][surface] et var_reste)
      E var_reste = var_reste - tab[var_enre][surface] * var_nbfois
      P P tab[var_enre][nombre de appro] = tab[var_enre][nombre de appro] - var_nbfois
      T SI var_reste > 0 donc var_enr = RESTE_SUFFISANT(...)
      E
      R
  E   SI var_reste > 0
        var_perte = var_perte + var_reste
        var_reste = 0
      FIN DU TESTE var_reste > 0
    FIN DU TEST var_reste = 0
  R var_enre = APPRO_A_GÉRÉ(prend tab en paramètre et retourne la première case ou [nombre de appro]>0 si aucun retourne -1 )
  AFFICHER_RESULTATS(prend var_bobine et var_perte et les affiche à l'écran
Fin du code :
0
cs_aruna62190 Messages postés 19 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 12 mai 2011
28 avril 2011 à 15:43
Merci bcp. Je décortique tout ça au plus vite et te tiens au courant!
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
28 avril 2011 à 16:03
Je viens de voir un truc.

la fonction que j'ai appelé COMBIEN_DE_FOIS dois aussi prendre tab[var_enre][nombre de appro]. Car quand on l'utilise avec les var_reste COMBIEN_DE_FOIS(prend tab[var_enre][surface] et var_reste) si il nous retourne une valeur supérieur à [nombre de appro] cela va créer des erreurs
0
cs_aruna62190 Messages postés 19 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 12 mai 2011
5 mai 2011 à 15:25
Dsl pour la reponse tardive mais je n'ai pas eu le temps de regarder plus tot.
Si je prends le debut de l'algorithme, on a bien var_aire qui corresopond à l'aire de la bobine d'appro. Ensuite, on a la saisie du nombre de appro mais à quoi correspond cela? au nombre de bobinos à produire? Par rapport à mon exemple, ça correspond à quoi?
merci
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
5 mai 2011 à 16:15
Dans ton exemple "3 de largeur 441 et longueur 339"
3 vaut nombre de appro
et 0.441 X 339 ar_aire en m2
0
cs_aruna62190 Messages postés 19 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 12 mai 2011
5 mai 2011 à 16:33
ok d'accord. Si je prends la suite :
tab[var_x][nombre de appro][calculé la sur face du appro en m2] est bien un tableau de 3 colonnes ou var_x variera de 1 au nombre de lignes du tablea(donc au nombre de format largeur/longueur différent à produire)?
Ensuite, j'ai compris que l'on trie ce tableau dans l'ordre décroissant des surfaces.
Ensuite, la variable var_enre est le numéro de la 1ere ligne du tableau où nombre de appro >=0 ?
A quoi sert la variable var_bobine?

merci
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
5 mai 2011 à 17:41
[var_x] va de 0 à n en fonction du nombre d'enregistrement que l'utilisateur entre. Si je prend ton exemple :

3 de largeur 441 et longueur 339
1 de largeur 441 et longueur 215
16 de largeur 172 et longueur 479
10 de largeur 143 et longueur 479

le tableau tab[var_x][nombre de appro][calculé la sur face du appro en m2] aurait les valeur suivante

Premier saisie
tab[0][0][0] = 3
tab[0][0][1] = 0.441 X 339

deuxièeme saisie
tab[1][0][0] = 1
tab[1][0][1] = 0.441 X 215

troisième saisie
tab[2][0][0] = 16
tab[2][0][1] = 0.172 X 479

Quatrième saisie
tab[3][0][0] = 10
tab[3][0][1] = 0.143 X 479

etc.
0
cs_aruna62190 Messages postés 19 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 12 mai 2011
6 mai 2011 à 08:44
Ce n'est pas plutot :

Premier saisie
tab[0][1][0] = 3
tab[0][0][1] = 0.441 X 339

deuxièeme saisie
tab[1][ 1 ][0] = 1
tab[1][0][1] = 0.441 X 215

troisième saisie
tab[2][ 1 ][0] = 16
tab[2][0][1] = 0.172 X 479

Quatrième saisie
tab[3][ 1 ][0] = 10
tab[3][0][1] = 0.143 X 479

A quoi sert la variable var_bobine?

Peux tu m'expliquer aussi comment fonctionne la fonction COMBIEN_DE_FOIS(paramètre tab[var_enre][nombre de appro]] * tab[var_enre][surface] et var_aire_ma_bobine)

merci
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
6 mai 2011 à 09:54
Tu dis "Ce n'est pas plutot : tab[0][1][0]" non et oui!! En vb6 tu est libre de faire commencer la case de ton tableau depuis la valeur que tu veux que ce soit 0, 1,2 etc mais la logique veut que toutes les cellules parte de depuis le même poin de départ et que ce point de départ soit 0. En effet comme tout les variable commence par 0 ( ou empety qui vaut 0) tu pourra plus facilement faire une boucle. Tu n'aura pas à faire une instruction à 2 fr variable = 1!??!

var_aire_ma_bobine et la surface de référencée du tissu que tu as. C la variable qui représente la situation quand tu dis "on part d'une bobine d'appro avec une certaine largeur (en mm) et une certaine longueur" et "bobine d'appro : largeur 1300 (en mm) ; longueur : 479 (en m) "

Il s'agit de la surface de référence dans le qu'elle on va coupé pour faire le autre surfaces.

var_aire_ma_bobine = l'aire de la bobine de référence. Don ton exemple c'est 1.3 * 479
0
cs_aruna62190 Messages postés 19 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 12 mai 2011
6 mai 2011 à 10:38
Ok pour les tableaux.

Donc dans ton code, je vois 2 variables différentes : var_bobine et var_aire_ma_bobine, c'est la meme chose?

J'ai du mal avec la synthaxe du code. Je travaille en VBA sur excel...

Je n'arrive pas à comprendre la fonction COMBIEN_DE_FOIS(paramètre tab[var_enre][nombre de appro]] * tab[var_enre][surface] et var_aire_ma_bobine) :
par exemple on a nombre de appro =3 et surface = 0,441 x 339=150 et var_aire_ma_bobine = 1,3 x 479=622,7. Quel calcul est effectué avec ces données?

merci
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
6 mai 2011 à 11:35
Tout d'abord j'ai corriger l'alignement de l'algoritme vu qu'il manqué des espaces et ensuite je te répond
début du code :
  var_aire_ma_bobine = l'aire de la bobine de référence. Don ton exemple c'est 1.3 * 479
  R
  E saisie du nombre de appro et des dimension
  P calculé la sur face de l'appro en m2
  T mettre le tout dans tab[var_x][nombre de appro][calculé la sur face du appro en m2]
  E additionnée var_x de un
  R
  TANT QUE l'utilisateur entre des données
  TRIER_TAB(fonction qui doit trier la tab de la plus grande à la plus plus petite surface. retourne rien)
  var_enre = APPRO_A_GÉRÉ(prend tab en paramètre et retourne la première case ou [nombre de appro]>0 si aucun retourne -1 )
  TANT QUE var_enre > ou = à 0
  R SI var_reste = 0
      SI tab[var_enre][nombre de appro] * tab[var_enre][surface] < ou = var_aire_ma_bobine
        var_reste = var_aire_ma_bobine - tab[var_enre][nombre de appro]] * tab[var_enre][surface]
        SI var_rest 0 donc var_bobine var_bobine + 1
  E   SI NON
        var_nbfois=COMBIEN_DE_FOIS(paramètre tab[var_enre][nombre de appro]] * tab[var_enre][surface] et var_aire_ma_bobine)
        var_reste = (tab[var_enre][nombre de appro]] * tab[var_enre][surface]) - (var_aire_ma_bobine * var_nbfois)
        SI var_reste = 0
          var_bobine = var_bobine + var_nbfois
  P     SI NON
          var_bobine = var_bobine + var_nbfois - 1
        FIN DU TESTE var_reste = 0
        tab[var_enre][nombre de appro] = 0
      FIN DU TESTE tab[var_enre][nombre de appro]] * tab[var_enre][surface] < ou = var_aire_ma_bobine
  T SI NON var_reste > 0
      var_enr=RESTE_SUFFISANT(cherche dans tab l'enre qui à une surface < ou = à var_reste et la retourne si non retourne -1)
      TANT QUE var_enr > ou = 0 ou var_reste > 0
      R var_nbfois = COMBIEN_DE_FOIS(prend tab[var_enre][surface] et var_reste)
      E var_reste = var_reste - tab[var_enre][surface] * var_nbfois
      P P tab[var_enre][nombre de appro] = tab[var_enre][nombre de appro] - var_nbfois
      T SI var_reste > 0 donc var_enr = RESTE_SUFFISANT(...)
      E
      R
  E   SI var_reste > 0
        var_perte = var_perte + var_reste
        var_reste = 0
      FIN DU TESTE var_reste > 0
    FIN DU TEST var_reste = 0
  R var_enre = APPRO_A_GÉRÉ(prend tab en paramètre et retourne la première case ou [nombre de appro]>0 si aucun retourne -1 )
  AFFICHER_RESULTATS(prend var_bobine et var_perte et les affiche à l'écran
Fin du code :
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
6 mai 2011 à 11:43
Non var_bobine et var_aire_ma_bobine ne sont pas les même choses.
var_bobine est utilisé pour répondre à la question "combien de bobines" pour tout faire.

Tu utilise VBA excel, libre a toi mais je pense que VB6 voir VBnet est bien mieux.

La fonction COMBIEN_DE_FOIS :

Le but de cette fonction est de savoir si on a assez de tissu pour faire le nombre de pièce voulu.

Tu dis "=3 et surface = 0,441 x 339=150 et var_aire_ma_bobine = 1,3 x 479=622,7"

COMBIEN_DE_FOIS dois dire si on peut 3 * 150 est plus petit que 622,7. 3 car on a pas besoin de plus pour le travaille voulu. Si il falais 5 de 0,441 x 339 la question serait 5 * 150 est - il plus petit que 622,7 (etc).

Si oui alors COMBIEN_DE_FOIS retourne 3

Si non COMBIEN_DE_FOIS teste si 2 fois (une fois de moins) est plus petit que 622,7
Si oui COMBIEN_DE_FOIS retourne 2

Si non COMBIEN_DE_FOIS teste si 1 fois (une fois de moins) est plus petit que 622,7

etc jusque à 0
0
cs_aruna62190 Messages postés 19 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 12 mai 2011
9 mai 2011 à 11:28
ok oui mais on m'oblige à le faire dans excel....
Je n'arrive pas à comprendre la fin du code ci dessous; je bloque au code écrit en rouge.
Et le code en bleu n'est-il pas mal placé car il ne fait pas parti de la boucle?
merci

T SI NON var_reste > 0
var_enr=RESTE_SUFFISANT(cherche dans tab l'enre qui à une surface < ou = à var_reste et la retourne si non retourne -1)
TANT QUE var_enr > ou = 0 ou var_reste > 0
R var_nbfois = COMBIEN_DE_FOIS(prend tab[var_enre][surface] et var_reste)
E var_reste = var_reste - tab[var_enre][surface] * var_nbfois
P P tab[var_enre][nombre de appro] = tab[var_enre][nombre de appro] - var_nbfois
T SI var_reste > 0 donc var_enr = RESTE_SUFFISANT(...) E
R
E SI var_reste > 0
var_perte = var_perte + var_reste
var_reste = 0
FIN DU TESTE var_reste > 0
FIN DU TEST var_reste = 0
R var_enre = APPRO_A_GÉRÉ(prend tab en paramètre et retourne la première case ou [nombre de appro]>0 si aucun retourne -1 )
AFFICHER_RESULTATS(prend var_bobine et var_perte et les affiche à l'écran
0
Rejoignez-nous