cs_guigui28
Messages postés28Date d'inscriptionvendredi 10 septembre 2004StatutMembreDernière intervention17 octobre 2006
-
6 mars 2006 à 21:05
cs_pluplu
Messages postés615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 juillet 2012
-
7 mars 2006 à 19:42
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 doptimiser une liste de bois.
Je mexplique :
En fait un bois est composé dune section (base/hauteur), dune longueur et dune quantité ; pour un chantier, à partir de mon logiciel de dessin, jobtiens une liste de x bois différents classée par sections.
A lheure actuelle, jimprime cette liste et joptimise 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 jai des listes denviron 500 bois différents sans compter les risques derreurs menfin quand jai fini, je retape ma liste de bois optimisée sous excel.
Mon but serait de gérer, à partir de mon progr VB, loptimisation 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 jai trouvé le moyen de remplir une msflexgrid contenant ma liste de bois via un fichier *.csv. Mon problème maintenant cest 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é.
cs_guigui28
Messages postés28Date d'inscriptionvendredi 10 septembre 2004StatutMembreDernière intervention17 octobre 2006 6 mars 2006 à 23:00
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
cs_pluplu
Messages postés615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 juillet 2012 7 mars 2006 à 14:58
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_pluplu
Messages postés615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 juillet 2012 7 mars 2006 à 18:09
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
cs_guigui28
Messages postés28Date d'inscriptionvendredi 10 septembre 2004StatutMembreDernière intervention17 octobre 2006 7 mars 2006 à 19:30
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.