identificare range di fattibilità



  • identificare range di fattibilità
    di vulp89 (utente non iscritto) data: 29/08/2012 12:39:57

    Buongiorno,
    ho passato vari giorni cercando una soluzione al mio problema che tutt'ora resta irrisolto.
    Di seguito espongo le dinamiche del problema:
    Supponiamo di avere 3 Fabbriche, ognuna delle quali produce tubi a vari DIAMETRI e SPESSORI (che saranno le mie variabili).
    Supponiamo di avere la prima Fabbrica chiamata "Tizio". In un foglio excel, riporto le possibili dimensioni di tubi che "Tizio" può produrmi.
    Prima colonna (A) metto i diametri fattibili (in ordine crescente) e nella prima riga (1) metto gli spessori fattibili (in ordine crescente)--> mi si formerà una tabella Diametro-Spessore che, riempiendo con delle x nelle zone fattibili da "Tizio" (corrispondenza Diametro-Spessore fattibile), mi darà le capacità della mia fabbrica.
    Lo stesso ragionamento vale anche per le altre due fabbriche.
    Si noti bene che è possibile che una stessa coppia diametro-spessore sia fattibile in + di una fabbrica!

    A questo punto, avendo io i dati di fattibilità di ogni singola fabbrica, vorrei ottenere un foglio excel che mi dica, inserendo: valore DIAMETRO e valore SPESSORE e premendo un bottone (quindi preferibilmente in codice VBA con una macro), se quella coppia diametro-spessore possa essere fattibilie e se sì, precisamente quale delle mie tre fabbriche è in grado di farlo.
    Spero di essere stato chiaro. Spero possiate aiutarmi per favore
    Grazie ciaooo



  • di HarryBosch data: 29/08/2012 13:09:47

    Ciao vulp89
    intanto hai fatto molto bene a postare un file di esempio.
    ti chiedo un paio di info:
    - nella richiesta dici che le zone fattibili dello schema DiametroSpessore saranno riempite con una X; immagino che nel foglio postato corrispondano alle caselle in bianco giusto? Mentre le zone gialle non sono fattibili... quindi, vorresti che il codice tenesse conto della fattibilità se la cella è bianca oppure quando, effettivamente, all'interno trovasse una X?
    - poi ti chiedo anche se hai qualche conoscenza di base del vba e se, nel caso, avessi tentato un qualche codice, in modo da correggerlo assieme (che credo sia una delle soluzioni migliori per imparare)

    Ciao, Vanni



  • di vulp89 (utente non iscritto) data: 29/08/2012 14:26:43

    Scusa ho scritto il messaggio prima di pensare di allegare il file! Comunque è il contrario, le caselle gialle sono gli abbinamenti Diametro-Spessore fattibili mentre le caselle in bianco non sono fattibili.
    Purtroppo, ho tentato di utilizzare VBA di excel costruendo una macro siccome sicuramente è il sistema migliore, ma non ho avuto esito positivo.. non avendo conoscenze del programma ho solamente tentato di farlo leggendo la guida excel che devo dire, per un principiante, essere di difficile comprensione.
    In conclusione non ho conoscenze di VBA ma mi piacerebbe molto imparare, già che ci siamo non potresti anche consigliarmi un buon PDF o un buon sito che sappia aiutare passo a passo ad apprenderne l'utilizzo?!



  • di Vecchio Frac data: 29/08/2012 15:40:09

    Prima di pensare a qualche soluzione con qualche magica Worksheetfunction (la butto lì, magari viene fuori un'idea :) ) puoi usare queste tre righe per valorizzare le celle gialle inserendovi una "X", cosa che magari può semplificare la vita.
     
    Option Explicit
    
    Sub fill_with_X()
    Dim rng As Range, ac As Range
    
        Set rng = Range(Cells(3, 3), Cells([c3].CurrentRegion.Rows.Count, [c3].CurrentRegion.Columns.Count))
        For Each ac In rng
            If ac.Interior.Color = 65535 Then ac = "X"
        Next
        
    End Sub
    






  • di vulp89 (utente non iscritto) data: 29/08/2012 16:12:48

    OK le X lo ho inserite, anche se alcune sono di colore Azzurro o verde! come mi consigli di procedere? a questo punto solo ho posizionato le x nelle celle gialle, quindi identificato in un'altra maniera (con una X) quello che già era evidenziato ( in giallo).
    E ora, scusa ma sono proprio inesperto.
    Mi sai consigliare qualche sito/ file per imparare un po' meglio?!
    Grazie, Marco



  • di Vecchio Frac data: 29/08/2012 16:29:45

    Bè, puoi assegnare alle celle il colore automatico per averle tutte nere, non è questo il problema :)
    Il vantaggio di avere una X serve però a fare le ricerche incrociate, come probabilmente Vanni starà già pensando di fare :) Il che riesce meglio con un valore in cella che non andando a cercare il colore interno (sempre se usi una funzione tipo Lookup).
    Consigliarti un manualetto non saprei, io ho imparato googlando e sperimentando... e partecipando a forum come questi :)
    Se trovo qualcosa di free nei miei archivi te lo segnalo volentieri.
    Intanto penso a come affrontare al meglio (i.e. nel modo più comprensibile) questo caso. nel frattempo anche Vanni (HarryBosch) si sarà messo a pensare :D






  • di HarryBosch data: 29/08/2012 19:45:18

    Ciao Ragazzi, rieccomi
    al momento sono un pò occupato quindi intanto ti allego il file dove ho testato il codice; con più calma poi posto il codice e metto i commenti se ti interessa capire meglio come funziona.
    Ovviamente l'interfaccia è molto schematica, giusto per capire come si potrebbe utilizzare una ricerca su più fogli.

    Non ho creato una funzione, come suggeriva Vecchio Frac, ma ho utilizzato una sub che in sostanza cerca orizzontalmente e quindi verticalmente le due variabili inserite (diametro e spessore); se nella cella corrispondente trova la X allora riporta il nome della Fabbrica.

    Mi piacerebbe anche sapere come pensava di risolvere il problema Vecchio Frac...

    Vanni



  • di Vecchio Frac data: 29/08/2012 21:22:36

    Vi allego la mia proposta...
    Fa alquanto schifo, lo ammetto, ho scritto in fretta e furia poco fa quindi non è ottimizzato e soprattutto è ridondante. Si può migliorare e di molto. In pratica i dati sono su tre fogli, in un foglio di ricerca si impostano spessore e diametro ricercati, quindi la sub (che ripeto fa schifo ed è da rivedere con calma) ricerca i valori corrispondenti e scrive sul medesimo foglio in quale dei sottofogli dati (chiamati con estrema fantasia "fabbrica 1, 2, 3") li rintraccia.
    E' dda testare approfonditamente, ma almeno è un inizio :)
    Domani mattina mi guardo anche l'allegato di Vanni che sono curioso :)





  • di Vecchio Frac data: 30/08/2012 08:08:56

    Bravo Vanni, il modello è molto carino e pulito, abbiamo avuto la stessa idea sull'utilizzo della convalida dei dati :) solo che io la creo dinamicamente ogni volta che attivo il foglio di ricerca, mentre forse è meglio come fai tu, cioè impostarla staticamente con il richiamo ai range definiti =diametro e =spessore.
    Forse non è necessario riempire con X le celle valorizzate perché si può testare (come ho fatto io) se l'interno è giallo, ma la mia soluzione è un po' pericolosa perché se l'operatore colora di giallino oppure di verde la cella, invece che del giallo predefinito, la mia macro salta :)
    Suggerisco che l'operatore inserisca X (oppure 1) nelle celle da considerare e che una formattazione condizionale si preoccupi di colorare l'interno delle celle.
    Infine, una nota di tecnica per Vanni: evitiamo please l'uso di GoTo, che è pessimo e fonte di guai :) si può e si deve utilizzare un ciclo, un Do...Loop, da fermare con Exit Do.
    Adesso aspettiamo vulp89 e vediamo i suoi commenti :)





  • di Vecchio Frac data: 30/08/2012 08:19:17

    Per quanto riguarda l'apprendimento di Excel, puoi partire comodamente dal materia scaricabile presso il nostro forum e messo a disposizione dal nostro patron Mauro:
    //excelvba.altervista.org/Corso/Indice.html

    Trovate altre informazioni in Home, sotto la sezione deidcata allo storico delle discussioni, dove ci sono le due righe in grassetto che riportano:

    Excel vba propone una completa infrastruttura documentale: Corso Base Excel VBA, Approfondimenti, Tutorial, Articoli e Downloads su Excel VBA.

    Ogni voce è cliccabile e rimanda ad un contenuto.

    Inoltre sottolineo a chi ha voglia di cimentarsi che "AAA Cercasi autori per nuove guide ed articoli sulle nuove tecnologie di sviluppo per Excel e Microsoft Office"... io ci sto pensando, magari è un'idea per un lavoro fatto in due e per chi ha orecchie per intendere... :)






  • di Vulp89 (utente non iscritto) data: 30/08/2012 09:13:29

    Ragazzi siete realmente geniali.. dico sul serio!
    Ho accennato questo problema solo ieri e già oggi vi presentate con la soluzione. È la prima volta che partecipo a un Forum e devo dire di essere impressionato dalla sua efficienza, ero convinto servissero tempi biblici (nei casi + fortunati).. è anche x questo che quando ho inserito i dati del problema non sono stato estremamente preciso (ero convinto ci si lavorasse poco a poco assieme e che le difficoltà risultassero passo a passo).
    Praticamente: primo problema: le tre fabbriche oltre ad avere coppie DIametro-spessore potenzialmente differenti tra loro, hanno anche una scala di diametri e di spessori diverse.. x essere più chiaro:

    Io ho 3 fogli con quelle tabelle con caselle evidenziate in giallo. Nel primo foglio i diametri vanno da 156 a 406 e gli spessori da 4.3 a 64;
    il secondo foglio conterrà la seconda tabella con diametri che vanno da 250 a 510 e spessori da22 a 70; un terzo foglio che conterrà la terza tabella con diametri da 390 a 610 e spessori da 10 a 40.. (facendo un esempio).
    Ciò che voglio prima di tutto è poter unire sotto un'unica tabella gigante, le tre più piccole (con rispettiva legenda per identificare sempre a quale fabbrica appartiene una data coppia diametro-spessore .. e ad esempio nel caso la stessa coppia fosse possibile per + di una fabbrica la casella corrispondente avrebbe due colori).
    Seconda cosa: avere un programma come quello fatto da voi ora, che, inserendo un dato diametro e dato spessore mi dica quale fabbrica possa essere in grado di farlo (e se + di una che me le segnali tutte), prestando attenzione al fatto che I VALORI DEI DIAMETRI E SPESSORI RIPORTATI NELLA TAB CHE VI HO ALLEGATO SONO VALORI STANDARD, è possibile che il cliente voglia un diametro o uno spessore leggermente differente e quindi, se invece di 159 e 5,2 il cliente mi chiede 159 e 5,4 (anche se non in tabella). io vedo che nell'intervallo della mia tabella è comunque fattibile ma il programma impostato mi darebbe una fattibilità di solo 159 e 5,2. (punto un po' duro da spiegare spero di aver reso l'idea).
    Penso che cn questo sia tutto ragazzi, penso di aver detto realmente ogni particolare di cui ho bisgno.. inoltre Avrei bisogno di chiedere una cosa a uno di voi due in pvt, sarebbe vermamente importante.
    Grazie



  • di Vecchio Frac data: 30/08/2012 09:32:55

    Grazie per il tuo apprezzamento, si fa quel che si può.
    Io sono stato aiutato molto a suo tempo e adesso cerco di essere utile, e ogni giorno se ne impara una :)
    Prima di affrontare i nuovi vincoli (era chiaro che non poteva essere così semplice) ci tengo a precisare che qui non possiamo fornire soluzioni pronte (ce ne manca il tempo e la possibilità), ma (ci) aiutiamo a fornire spunti che poi l'utente deve riuscire a sviluppare da sé.
    Per il messaggio privato, una volta c'era la bustina per inviare una mail, ma ora non la vedo più... devo chiedere al nostro patron :)





  • di HarryBosch data: 30/08/2012 11:17:09

    @Vecchio Frac cavolo! praticamente abbiamo realizzato la stessa "interfaccia" di ricerca!! la mia era molto miserina dal punto di vista estetico, magari la prossima la miglioro.
    Ok, ottimo il consiglio del ciclo Do..Loop che applicherò immediatamente. E una domanda al riguardo, che già volevo farti in un'altra occasione: perché dici che "l'uso di GoTo è pessimo e fonte di guai"? Quali impicci potrebbe creare?

    @ Vulp89
    Ovviamente grazie per gli apprezzamenti; ci teniamo a tenere ben vivo il forum.
    la tua idea è quella di creare in un'unica tabella con le 3 fabbriche, ma come fai ad avere due colori nella cella corrispondente? non ho capito cosa intendi...
    Se vuoi creare un'unica tabella, forse la soluzione che intendevi era quella di assegnare ad ogni combinazione (da mettere soto legenda) una colorazione specifica, una cosa del tipo:

    fabbrica1 colore a
    fabbrica2 colore b
    fabbrica3 colore c
    fabbrica1 - fabbrica2 colore d
    fabbrica1 - fabbrica3 colore e
    fabbrica2 - fabbrica3 colore f
    fabbrica1 - fabbrica2 -fabbrica3 colore g

    è ovvio che inizialmente ci vorrebbe un lavoro certosino per inserire il giusto colore in ogni cella, ma quello eventualmente è un compito tuo...

    un'altra cosa:
    dici che la misura richiesta potrebbe anche differire dalle misure standard impostate nella tabella principale; quindi il riferimento diventa il range iniziale, giusto? mi spiego meglio:
    se la fabbrica1 realizza tubi con diametro 156-406 e spessore 4,3-64 nella tabella hai presente solo le misure standard. Ma quindi sono invece realizzabili tutte le misure all'interno di questi 2 range?

    Hai dato un'occhiata ai codici? O risultano un pò troppo complicati?
    Vanni



  • di vulp89 (utente non iscritto) data: 30/08/2012 15:45:23

    Si l'aspetto dei colori va benissimo anche come dici tu, basta solo aggiungere una legenda che sia corretta.
    Per quanto riguarda le dimensioni standard voglio dire che è meglio considerare solo la cornice della parte colorata in giallo (del mio allegato).. tutto ciò che sta all'interno di questa cornice (confine) può essere prodotto! ad esempio, prendendo il diametro 300,5 vedo che ha varie caselle di spessori corrispondenti : es. 8,8 seguito da 9,5.. in realtà se mi viene richiesto posso anche eseguire spessore 8,9; 9,0; 9,1; 9,2; 9,3; 9,4..`le misure riportate sono standard.. le capacità della fabbrica sono all'interno di tutta la zona gialla!spero di essere stato chiaro :)

    ai codici ci sto lavorando (mettiamola così :) ) io sono a digiuno di VBA o qualsiasi altro linguaggio di programmazione.. ci sto provando :) x chiarimenti ovvviamente sono qua!



  • di Vecchio Frac data: 30/08/2012 18:40:57

    L'uso del GoTo è da evitare perchè implica dei salti nel codice non controllabili, è un retaggio dei vecchi Basic quando non esistevano i cicli While...Wend e Do...Loop. Con GoTo puoi interrompere il flusso del programma e quindi la sua logica, programmi che ne facevano uso erano detti spaghettari per la particolarità degli spaghetti di contorcersi e intrecciarsi tra di loro fino a far ingarbugliare il piatto e far perdere l'inizio e la fine dello spaghetto :)

    Perchè invece dei colori non valorizzate le celle con 1, 2 o 3 a seconda della fabbrica? anche le ricerche possono basarsi meglio su questo. Ho giusto trovato in ufficio la funzione che fa al caso nostro (una combinazione di SCARTO e CONFRONTA) ma non la ricordo qui a casa :)

    Ripensare tutto anche a valori approssimati però complica la faccenda :)





  • di HarryBosch data: 31/08/2012 21:09:00

    @ vulp89
    Mi sono dilettato con un lavoretto che ti farà risparmiare diverso tempo...
    Con il modellino che ti allego troverai il solito foglio iniziale dove impostare la ricerca, con alcune novità rispetto al precedente:
    - per iniziare ho migliorato la grafica.. preso spunto dal modello di Vecchio Frac
    - puoi inserire qualsiasi valore di ricerca, diametro e spessore: il risultato si baserà sui range inseriti nella tabella apposita;
    - puoi modificare la tabella dei range e inserire nuovi parametri relativi alle fabbriche
    - puoi pure selezionare il colore che vuoi per le varie combinazioni
    - la tabella si compilerà in automatico in base ai nuovi range inseriti e ti mette pure il colore relativo!
    Amen...

    Fammi sapere se era quello che intendevi.

    @ Che ne dici Vecchio Frac?



  • di Vecchio Frac data: 31/08/2012 21:45:58

    @Vanni, complimenti, un lavoro ben fatto.
    Come minimo il nostro amico ti deve una birra

    E' molto scenografico e sicuramente professionale.
    Carina l'idea dello Zoom dinamico sulla legenda!

    Per quanto riguarda la Select Case sulle fabbriche, invece di testare le diverse combinazioni ("a", "b", "c, "ab", ecc.) che ne dici di individuare le fabbriche per numero (1, 2, 3) e quindi cavatela con l'esempio che allego?
     
    For i = 1 to Len(fabbriche)
        comb = "Fabbrica " & i & " - "
    Next
    Replace (comb & "@", " - @", "")






  • di Vecchio Frac data: 01/09/2012 14:09:11

    Mi vengono in mente diverse migliorie per rendere davvero generalizzabile il modello, ad esempio scorporare la zona legenda in modo che si possano inserire nuove righe e colonne nella scheda dei dati, utilizzare la formattazione condizionale in funzione del contenuto della cella per colorarla (e se siamo in Excel 2003 e non bastano le tre condizioni, bastano poche righe di codice), ecc.
    Ritengo comunque che la funzione didattica del file presentato da Vanni, oltre ad essere già di per sè di pregevole fattura, riesca a coprire bene le esigenze del richiedente.
    Suggerisco di spuntare come "risolta" questa discussione.





  • di vulp89 (utente non iscritto) data: 03/09/2012 14:58:45

    Vanni, ho visto il commento di gradimento di VecchioFrac però purtroppo non riesco ad aprire il foglio excel del tuo lavoro.. nn saprei proprio come fare!
    Scusate il disagio, però sono ansioso di vedere il lavoro!
    Come potrei fare?
    Ad ogni modo grazie mille in anticipo :D



  • di Vecchio Frac data: 03/09/2012 15:21:19

    Non vedi l'allegato, non riesci a scaricarlo o, pur avendolo scaricato, non riesci ad aprirlo?
    Non credo che sia un problema legato all'essere iscritti, il nostro patron Mauro aveva già fixato questo problema. Comunque prova a chiudere il browser e ricollegarti al forum. A volte capita che la sessione scada e non ti permetta più di compiere azioni valide.





  • di vulp89 (utente non iscritto) data: 03/09/2012 16:20:18

    posso scaricarlo, una volta scarico mi si apre in zip però non riesco a estrarlo :/ .. se è da estrarre :P



  • di Vecchio Frac data: 03/09/2012 16:43:33

    Non è zippato (stranamente), ha estensione .xlsm : se lo vedi come .zip cambiagli l'estensione e prova a riaprirlo (sempre se non hai già provato a farlo).





  • di HarryBosch data: 03/09/2012 21:46:56

    Eventualmente provo a ripostarlo nel caso domani non dovessi ancora riuscire ad aprire il file; comunque era proprio un file .xlsm come ha detto Vecchio Frac.

    @Vecchio Frac
    Ps: anche l'utilizzo del "Replace" non è niente male ^_^



  • di VULP89 (utente non iscritto) data: 04/09/2012 09:08:48

    Cavolo... non vedo più nemmeno i file allegati appartenenti alla conversazione adesso :/ :/ ("in alto a destra" per rendere l'idea..).
    QUindi per riassumere il concetto, Vanni mi hai inviato il codice da inserire in VBA non il file excel già impostato giusto?! Grazie per la risp



  • di vulp89 (utente non iscritto) data: 04/09/2012 09:14:50

    Cmq l'avevo salvato e mi si apre sempre con WinZip.. ho 3 cartelle e 1 file, poi aprendo le cartelle, ognuna ha al proprio interno vari file (nessuno con estensione .xlsm)



  • di HarryBosch data: 04/09/2012 09:48:19

    Ti riposto il file che non è più disponibile.
    Questa volta provo a inserirlo zippato.
    Vanni



  • di vulp89 (utente non iscritto) data: 06/09/2012 08:53:37

    grazie.. scusa ma ho visto solo ora la tua risposta perchè non ho ricevuto notifiche tramite mail. ora ci do un' occhiata :)



  • di vulp89 (utente non iscritto) data: 06/09/2012 09:04:16

    è semplicemente fantastica :) :D bellissima.. ribadisco che siete genii!
    L'unica cosa che vorrei fare in più e per la quale vorrei chiedervi delucidazioni è poter inserire le fattibilità delle fabbriche reali, che non sono a forma di quadrato (per esser più chiaro, in questio file il giallo, il rosso, il verde etc.. sono tutti a forma di rettangolo--> selezionarli tutti in una volta trascinando il cursore è possibile e suppongo che nel codice VBA sia semplice anche inserirli se si tratta solo di rettangoli)
    In realtà le fattibilità non sono così semplici, bensì (come nel primo file che ho mandato) hanno un confine diciamo "frastagliato" e io dovrei per l'appunto inserire quel confine così fatto .. poi all'interno tutte le dimensioni vanno bene come hai già fatto in questo file che è veramente perfetto!
    È chiaro quello che sto dicendo!?
    non voglio che tu rifaccia il tutto.. dimmi solo se esiste un codice VBA che permette di considerare "un confine più irregolare" come dicevo prima :) Thanks



  • di Vecchio Frac data: 06/09/2012 09:30:03

    Sì, puoi identificare range multipli separandoli da virgola e intervalli multipli con due punti.

     
    'cosa apparirà? ^_^
    Set area_irregolare =  range("$B$4:$C$5,$B$6:$B$11,$B$12:$C$13,$E$4:$E$13,$G$4:$G$13,$H$4:$H$5,$I$4:$I$13,$H$9:$H$10,$K$4:$K$13,$M$4:$M$13,$L$12:$L$13,$L$4:$L$5")
    area_irregolare.select
    






  • di vulp89 (utente non iscritto) data: 06/09/2012 09:32:33

    Grazie :D lo farò appena possibile.. grazie ancora ragazzi! veramente grazie mille!



  • di HarryBosch data: 06/09/2012 10:18:00

    Mi sono riguardato la prima tabella che hai postato. Quindi "non esiste" un range ben definito (e quindi evidenziabile da un rettangolo come per l'esempio che ti ho allegato), ma per ogni dimensione è fattibile un specifico range di spessore...
    C'è da lavorare un pò per modellare il codice a questa situazione: la mia idea sarebbe quella di creare le tabelle numeriche per ciascuna fabbrica, del tipo:
    FABBRICA 1
    Dimensione - Spessore
    159 - 4,5-32
    165 - 4,4-31,5
    ....
    ovvero per ogni dimensione inserire il range di spessore fattibile.
    Quindi, in base alle tabelle specifiche, creare la "tavola" generale che raggruppi le 3 tabelle, con la colorazione delle diverse combinazioni.
    Ho inteso giusto?

    per la selezione dei range frastagliati la strada è quella indicata da Vecchio Frac.
    Se hai già le 3 tabelle con le colorazioni che indicano le combinazioni possibili sarebbe già una buona cosa...



  • di VULP89 (utente non iscritto) data: 06/09/2012 12:50:23

    Si esatto.. è proprio così! per ogni diametro si ha un range di spessore possibile,ma allo stesso tempo per ogni spessore si ha un range di diametro pox (vale sempre la regola che i diametri possono essere anche 273,1 o non necessariamente 273,0..) ad ogni modo il concetto dei range di spessori per ogni diametro è buono!
    Si le ho le altre tabelle, però mi servirebbe un indirizzo privato per postarle.. non è fattibile in questo topic..



  • di vulp89 (utente non iscritto) data: 07/09/2012 09:35:55

    Ma per inserire nel codice VBA i range irregolari di cui parlo sopra come posso fare? il codice Postato l'ho capito, ma non riesco a capire dove inserirlo nel foglio di lavoro inviatomi da Vanni!



  • di HarryBosch data: 07/09/2012 22:09:41

    @ vulp89
    puoi contattarmi a questo indirizzo:
    proufyobsur@dunflimblag.mailexpire.com
    non allegare niente che poi ti ricontatto io con la mail personale
    Ciao, Vanni



  • di Vecchio Frac data: 07/09/2012 23:10:18

    Non conoscevo mailexpire.com.
    Gran bella idea!
    Vanni, sei un genio (hai presente il dott. Heinz Doofenshmirtz di Phineas e Ferb? )