Avrai notato che il test da me eseguito con 100 pezzi per tipologia di trasporto
(ma sicuramente si verifichera anche con un elevato numero di pezzi reali)
il programma trova due possibili soluzioni
1) minor vuoto ma più viaggi
2) maggior vuoto ma meno viaggi
Con il pulsante alternativa potrai scegliere quella a te più idonea
(i dati, delle possibili soluzioni, vengono trascritti nel foglio2, e vengono cancellati ad ogni elaborazione).
Quindi testa bene il programma con i carichi reali e fai sapere se collimano con quelli dettati dalla vostra esperienza.
Veniamo alla spiegazione del programma che è suddiviso in due macro
la macro1 "CompilaSped" crea la tabella "I20:O32" nel foglio, tabella realtiva a soddisfare i viaggi per ogni camion in funzione dei carichi che può trasportare per ogni tipologia di prodotto
es.: (con 100 pezzi per tipologia) il camion1 deve fare 50 viaggi per soddisfare i Telai mercedes e 17 viaggi per soddisfare le Torrette 1850
per fare questo dimensiono 13 vettori (i camion con Cam1...Cam13) ai quali assegno i 6 carichi che possono trasportare
poi non faccio altro che scansionare la matrice dei carichi da trasportare e assegnare nella tabella suddetta il numero viaggi (V1) con il codice
- Codice: Seleziona tutto
V1 = Int(VettC(CCA) / Div)
Resto = VettC(CCA) Mod Div
If Resto <> 0 Then V1 = V1 + 1
Dove Vett(CCA) sono i pezzi da trasportare
Div è il numero di pezzi che può trasportare (nella divisione prendo solo la parte intera)
il Resto se esiste (Mod azzera se il numero è multiplo altrimenti fornisce il resto) e quindi se Resto è diverso da zero sommo 1 (viaggio) a V1
A tabella compilata ho due colonne con formule
Max e Min viaggi per camion
Ora si tratta di ottenere delle combinazioni tra questi viaggi Min e Max dei camion per soddisfare i seguenti punti
con la macro2 "Elabora13"
1) non devono rimanere dei pezzi da spedire cella I36 maggiore di 0
2) Min spazio rimanente cella H36 (confronto con quello registrato nel foglio2)
3) Minimo o ugual numero di camion in cella H19 (confronto con quelli registrati nel foglio2)
i punti due e tre vengono confrontati con ciò che viene scritto nel foglio2
e le condizioni riportate permettono anche di azzerare il Foglio2 se viene trovata una condizione migliore,
se trova una condizione identica registra la nuova soluzione nella colonna successiva
se la trova peggiore non la registra affatto.
Ora spiegare il codice intero ci vorrebbe un manuale ma considera che quelle condizioni vengono ripetute
quindi è sufficiente studiare un modulo per capirne il funzionamento di tutto.
Premetto che questa routine sarebbe esteticamente più valida se si usassero funzioni tipo array con confronto e altro... ma mi complicavano la vita e ho optato, almeno per il codice, utilizzare funzioni elementari.
Ciao