Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire
62768 internautes nous ont dit merci ce mois-ci
Mon but est d'optimiser les pertes sur mon tube de 6m et donc de trouver le meilleur ordre pour découper mes tubes
A faire attention :
cela nous donnera pas forcément le meilleur resultat.
j'étais loin d'imaginer que mon problème était si complexe
Loop While Nb(Si(DejaFait(i) = 1)) = n
For i = 1 To n
If LongueurEnCours + Longueur(i) <= LongueurMax alors
DejaFait(i) = 1
LongueurEnCours = LongueurEnCours + Longueur(i)
Else
DejaFait(i) = 0
End If
Next i
Loop
Nous pouvons également en déduire une infinité d'autres selon le tri de la liste.
Sub Compter() 'Compte le nombre de découpe et défini la Var_pub Feuil = "Découpes" Dim Ligne As Integer Ligne = 2 Do While Sheets(Feuil).Cells(Ligne, 2) <> "" Ligne = Ligne + 1 Loop 'Définir le nombre de découpes NB_decoupes = Ligne - 2 '-2 à cause du titre et de la dernière ligne qui est vide End Sub
Ligne = Sheets(Feuil).Range("B" & Rows.Count).End(xlUp).Row
Ligne = Sheets(Feuil).Range("B" & Rows.Count).End(xlUp).Row - 1
Oui la je l'ai fait très rapidement donc j'ai mis le minimum de commentaire. j'en rajouterai à la version 2 du document.
Et concernant les variables tableaux je connais le principe, je sais coment les créer mais je trouve leur utilisation plus complexque l'utilisation directe des cellules Excel. Est-ce que ça peux vraiment aporter un plus ? J'ai limitié le nombre de découpes à 28'000 il faudrait essayer d'inséréer 28'000 valeur et voir si c'est vraiment si long que ça.
A FaNy en durée d'exécution : pas dans ce cas précis de commandes entre 300 & 500 longueurs. Ta procédure est suffisamment rapide.
Mais l'utilisation de ce fichier peut évoluer.
Par exemple :
Si l'entreprise décide demain de ne plus calculer les découpes commande par commande, mais pour une semaine ou un mois de commandes. Cela pourrait en effet s'avérer payant en réduction des coûts par économie des pertes. Mais cela voudrait dire que ton fichier mettrait beaucoup, beaucoup plus de temps. Dans un cas comme celui-ci, les variables tableaux seraient (conditionnel) la solution.
Nous avons tous pensé cela au début. Mais, il s'avère qu'en les utilisant régulièrement, tu n'y verras que des avantages.
A titre d'exemple, le code suivant :
pourrait s'écrire, avec deux var tab (ColonnesSixSept() et ColonnesDeuxTrois())
La syntaxe est quasiment identique.
Question subsidiaire, depuis le début de cet "exercice", je te recommande l'algorithme glouton du sac à dos.
T'es tu renseigné à ce sujet?
Si oui, as tu essayé de le mettre en oeuvre?
Pour info, ta méthode parvient exactement au même résultat que par cet algo. Mais par curiosité peut être serais tu intéressé.
Mais je vais me renseigner sur les varaibles tableaux et sur ta métodes de sac à dos.
Mais encore une fois je vois pas en quoi l'utilisation de variables tableau amélorerait le tableau dans le cas d'une evolution, est-ce que tu aurai un exemple concret ? :)
Tu pourras y voir la différence.
C'est du "bricolage", mais le résultat est plus ou moins parlant :
Le Fichier Exemple
Cela ne veut effectivement rien dire car une macro qui s'exécute en un temps acceptable est correcte. Mais ici on parle bien d'évolution de ce fichier.
Essaye en ajoutant X lignes et compare les deux méthodes.