Optimisation

Signaler
Messages postés
28
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
17 octobre 2006
-
Messages postés
615
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
4 juillet 2012
-
Bonjour,
Dans le cadre de mon boulot (dessinateur/calculateur en charpente et maison ossature bois), je cherche à développer une petite appli en VB6, qui me permettrait d’optimiser une liste de bois.
Je m’explique :
En fait un bois est composé d’une section (base/hauteur), d’une longueur et d’une quantité ; pour un chantier, à partir de mon logiciel de dessin, j’obtiens une liste de x bois différents classée par sections.
A l’heure actuelle, j’imprime cette liste et j’optimise manuellement mes longueurs de bois ; c'est-à-dire que je cherche à additionner mes longueurs de bois pour se rapprocher au mieux des longueurs commerciales (Incrémentée de 30cm en 30cm à partir de 300cm de longueur).
Je vous laisse imaginer la gymnastique quand j’ai des listes d’environ 500 bois différents… sans compter les risques d’erreurs…m’enfin quand j’ai fini, je retape ma liste de bois optimisée sous excel.
Mon but serait de gérer, à partir de mon progr VB, l’optimisation des différentes longueurs de bois de sections identiques ; le tout couplé à une base Access ou sont enregistrées toutes mes sections commerciales ; et pour finir d’éditer ma liste optimisée automatiquement.
Pour le moment j’ai trouvé le moyen de remplir une msflexgrid contenant ma liste de bois via un fichier *.csv. Mon problème maintenant c’est de trouver un moyen pour optimiser les bois sélectionnés dans le flexgrid (de sections identiques) et de les basculés dans une liste tierce, optimisée.
Qqn à peut-être déjà développé quelque chose qui ressemblerait de près ou de loin à ce que je cherche à faire.
Je ne pense pas trouver une solution miracle, mais si vous avez des idées, je prend ts ce qui viens parce que là … je suis un peu bloqué.


Merci.

8 réponses

Messages postés
386
Date d'inscription
samedi 4 octobre 2008
Statut
Membre
Dernière intervention
19 février 2018
2
Bonjour,

Indique comment est fait ta msflexgrid et je pourais peu etre te trouvais la solution c juste une kestion de tri.

Bonne programmation,
[Gally Home Corp]
0
Messages postés
28
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
17 octobre 2006

Comme je comprenais pas bien le sens de "Indique comment est fait ta msflexgrid", je t'envoie le code qui me sert au remplissage de la flexgrid.

FORM MDI

Private Sub MnuOuvreCVS_Click()
'Ouverture de la boîte de dialogue recherche de fichier
Dialogue.DialogTitle = "Ouverture d'un fichier {*.cvs} "
Dialogue.Filter = "*.csv|*.csv|"
Dialogue.ShowOpen
'Test sur la validation de la boîte de dialogue
If Dialogue.FileName = "" Then
Exit Sub
Else
StatusBar.Panels(3).Text = Dialogue.FileName 'Affiche le chemin d'accès au fichier chargé
AccèsFichier = Dialogue.FileName
FrmDonnées.Show
ActualListe
ChargerFichier
End If
End Sub

FORM CONTENANT LA FLEXGRID :

Private Sub Form_Load()
On Error GoTo Erreur
HookGrid Me, Liste 'Déclaration du Flexgrid pr le Scroll
With Liste
.AllowUserResizing = flexResizeNone
.HighLight = flexHighlightWithFocus
End With
FrmDonnées.Caption = AccèsFichier
Sortie:
Exit Sub
Erreur:
MsgBox "Erreur " & Err.Number & " : " & Err.Description & vbCrLf & "(Procédure Form_Load / Module Feuille Form1)", vbExclamation, "Erreur..."
unHookGrid 'Désactive le scroll sur la liste
Resume Sortie
End Sub

MODULE DE REMPLISSAGE

Option Explicit 'déclaration des variables obligatoires
Private Const Délimiteur As String = ";" 'Contient le caractère séparant les données d'une même
'ligne dans le fichier lu.
Private FS As New FileSystemObject
Public NC As Integer 'Contient le nombre de colonne de la liste
Public NL As Integer 'Contient le nombre de liste de la liste
Public FL As String 'Contient le format de la liste (Légende)
'===================================================================================================
'Fonction permettant d'actualiser la liste qui affiche les données
'===================================================================================================
Public Sub ActualListe()
Dim Taille As Integer
'RECHERCHE DES LEGENDES A AFFICHEES ET TAILLES DE COLONNES
NC = 9
FL = "N°" & "|Paquet" & "|Nom" & "|Nbre" & "|Larg" & "|Haut" & "|Long" & "|Mat" & "|Rem"
FrmDonnées.Liste.Cols = NC
'RECHERCHE DU NOMBRE DE LIGNE AFFICHEE
If AccèsFichier <> "" Then
ChercheNbreLigne AccèsFichier
Else
NL = 4
End If
'APPLICATION DES RECHERCHES
With FrmDonnées.Liste
.FormatString = FL
.Rows = NL
End With
'TAILLE DES COLONNES
NC = 0 'Repasse le nbre de colonne à 0
'Numéro de bois
NC = 1
Taille = LireIni("LISTE", "TNum", StFichier)
FrmDonnées.Liste.ColWidth(NC - 1) = Taille
'Classe de coupe
NC = NC + 1
Taille = LireIni("LISTE", "TPaquet", StFichier)
FrmDonnées.Liste.ColWidth(NC - 1) = Taille
'Nom du bois
NC = NC + 1
Taille = LireIni("LISTE", "TPièce", StFichier)
FrmDonnées.Liste.ColWidth(NC - 1) = Taille
'Nbre
NC = NC + 1
Taille = LireIni("LISTE", "TNbre", StFichier)
FrmDonnées.Liste.ColWidth(NC - 1) = Taille
'Base
NC = NC + 1
Taille = LireIni("LISTE", "TLargeur", StFichier)
FrmDonnées.Liste.ColWidth(NC - 1) = Taille
'Hauteur
NC = NC + 1
Taille = LireIni("LISTE", "THauteur", StFichier)
FrmDonnées.Liste.ColWidth(NC - 1) = Taille
'Longueur
NC = NC + 1
Taille = LireIni("LISTE", "TLongueur", StFichier)
FrmDonnées.Liste.ColWidth(NC - 1) = Taille
'Matière
NC = NC + 1
Taille = LireIni("LISTE", "TCC", StFichier)
FrmDonnées.Liste.ColWidth(NC - 1) = Taille
'Remarques
NC = NC + 1
Taille = LireIni("LISTE", "TRemarque", StFichier)
FrmDonnées.Liste.ColWidth(NC - 1) = Taille
End Sub
'===================================================================================================
'Fonction permettant de charger les données du fichier lu
'===================================================================================================
Public Sub ChargerFichier()
Dim Temp As String
On Error GoTo Fin
Dim FileStream As TextStream
Dim Ligne As String
Dim TabLigne() As String
Dim R As Long
Dim C As Long

Set FileStream = FS.OpenTextFile(AccèsFichier, ForReading, False)
R = 1
While Not FileStream.AtEndOfStream
Ligne = FileStream.ReadLine
TabLigne = Split(Ligne, Délimiteur)
C = FrmDonnées.Liste.FixedCols
For C = FrmDonnées.Liste.FixedCols To FrmDonnées.Liste.Cols - 1
FrmDonnées.Liste.TextMatrix(R, C) = TabLigne(C - FrmDonnées.Liste.FixedCols)
Next C
R = R + 1
Wend

FileStream.Close
Set FileStream = Nothing
Fin:
'===================================================================================================
'Fonction permettant de connaître le nombre de ligne dans le fichier lu (Donner en variable
'le chemin d'accès au fichier)
'===================================================================================================
Private Sub ChercheNbreLigne(CheminFichier)
Dim FS, a As Object
Dim StreamLine As String
Set FS = CreateObject("Scripting.FileSystemObject")
Set a = FS.OpenTextFile(CheminFichier, 1, 0)
Do While a.AtEndOfStream <> True
StreamLine = a.ReadAll
NL = a.Line
Loop
a.Close
End Sub
0
Messages postés
262
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
27 avril 2007
1
Il me semble qu'il manque l'algorithme de résolution. Ce n'est pas un problème de développement mais un problème de robinet....

Alain 31
0
Messages postés
615
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
4 juillet 2012

Je ne suis pas sure d'avoir tout compris je résume:
- pour un chantier tu as une liste d'environ 500 bois
- un bois est composé d'une section base/hauteur d'une longueur et d'une quantité
- ton logiciel de dessin te sort une liste des bois dont tu as besoin et tu dois trouver en tenant compte des longueurs commerciales du meilleur compromis possible d'achat.

Il te faut donc une table dans ta base de donnée qui tient compte des bois standards disponibles en tenant compte de la longueur, et de la section.
Il te faut également une table qui reprend la liste des bois dont tu as besoin (importation depuis ton logiciel).
Il te faut une moulinette qui trouve la meilleure optimisation selon les longueurs dispo en standard et qui te crée la liste du choix résultant

C'est a peu près cela ou je me trompe ?



Pascal Laurençon
0
Messages postés
28
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
17 octobre 2006

C'est exactement ça. Je croyais mettre mal fait comprendre
0
Messages postés
615
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
4 juillet 2012

Encore deux petites questions :

Faut il d'abord privilègié les plus grandes sections car c'est moins coûteux, et faire la coupe soi-même, ou faut il se rapprocher le plus possible des dimensions standards ?


Dans la liste des bois quelques notions m'échapent que veut dire :
N°, Paquet, Nom

FL = "N°" & "|Paquet" & "|Nom" & "|Nbre" & "|Larg" & "|Haut" & "|Long" & "|Mat" & "|Rem"

Pascal Laurençon
0
Messages postés
28
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
17 octobre 2006

Pour répondre à tes questions :
Oui on cherche à se rapprocher des dimensions commerciales les plus proches, et non pas à privilégier les grandes sections car contrairement à ce que tu disais elles sont plus coûteuses.
Dans la liste, un bois se défini avec plus de critère que les bases/hauteur/longueur/quantité cités dans mon premier message. Seule ces derniers sont à prendre en compte pour ma moulinette.
Mais pour ton info :
N° : Défini l'index du bois
Paquet : défini son groupe d'appartenance
Nom : Défini sont nom
Mat : Défini sa matière (essence)
Rem : Défini une éventuelle remarque
Toutes ces données sont définies pendant la création de mon dessin.
0
Messages postés
615
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
4 juillet 2012

Ok je comprend un peu mieux, ça m'interesse comme truc, je vais réfléchire à la question et faire un essai de moulinette avant la fin de la semaine.

Pascal Laurençon
0