Risultati da 1 a 20 di 20

Discussione: modulo non vede valore di variabile pubblica acquisito con macro in un foglio



  1. #1
    L'avatar di Marcello84
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Latina
    Messaggi
    5
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    0

    modulo non vede valore di variabile pubblica acquisito con macro in un foglio

    Buongiorno a tutti,
    Sono un nuovo utente che si è appena affacciato alla creazione di macro tramite il vba in excel. Mi scuso fin d'ora per i probabili errori di forma (e di sostanza) contenuti nel mio codice, ma come detto è la prima volta che programmo in vba.
    Per arrivare al mio problema vi riassumo il funzionamento del "programma" che sto sviluppando. La cartella excel è così composta:
    foglio 1 (database): tabella con nomi - fascia assegnata ad ogni nome (A, B o C) - n. di incarichi di classe 1 - n. di incarichi di classe 2 - n. di incarichi di classe 3
    foglio 2 (risultati): tabella uguale a quella del foglio 1 con i soli risultati provenienti dalla ricerca

    Il programma svolge le seguenti funzioni:
    1) premendo il pulsante nel foglio 1 chiede il valore dell'incarico da assegnare. In base ad esso stila una lista di nominativi che incolla nel foglio 2
    2) facendo doppio click su un nominativo nel foglio 2, previa conferma in una messagebox, DOVREBBE dare un +1 nel foglio 1 nella cella dell'incarico di classe 1, 2 o 3 (in base al valore inserito in sede di ricerca) in corrispondenza allo stesso nominativo selezionato col doppio click nel foglio 2.

    La macro del doppio click si trova nel foglio 2 e richiama, per assegnare l'incarico, una macro situata in un modulo. Ho assegnato ad una variabile pubblica il valore del doppio click.

    PROBLEMA
    Il problema è che la macro che dovrebbe assegnare il +1 dell'incarico non legge il valore della variabile pubblica a cui ho assegnato il valore del doppio click. Non capisco il motivo di ciò, dato anche che ho già utilizzato un'altra variabile pubblica che viene letta tra un modulo e l'altro.
    Per verificare più facilmente se eventuali modifiche funzionano ho inserito al posto dell'assegnazione dell'incarico (+1) una messagebox che mostra il valore della variabile pubblica contenente il valore del doppio click.

    Mi scuso se mi sono dilungato o sono stato confusionario, ho cercato di dare un quadro sufficiente sulla situazione. Se servissero altre informazioni non esitate a chiedere.
    Grazie a chiunque voglia aiutarmi.Allegato 1186

  2. #2
    L'avatar di Textomb
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    47
    Messaggi
    171
    Versione Office
    Excel 2016
    Likes ricevuti
    93
    Likes dati
    11
    ciao Marcello.
    Ho visto il tuo file. Purtroppo molto velocemente perchè adesso ho pochissimo tempo. A prima vista però mi è sembrato migliorabile.
    Posso dirti quanto segue: le variabili globali dichiarate in un modulo di classe non sortiscono il loro effetto...
    Quindi quella variabile "nome" non funzionerà come speri.
    Inoltre fai un ciclo Do..Loop per scoprire l'ultima riga della tabella. Non serve basta dare un'istruzione del genere...
    r=Range("A" & Rows.Count).End(xlUp).Row
    Ti consiglio di rivedere un pò la logica che hai utilizzato per il tuo progetto.
    Se hai bisogno batti un colpo.

  3. #3
    L'avatar di A.Maurizio
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Torino
    Età
    56
    Messaggi
    383
    Versione Office
    2013
    Likes ricevuti
    44
    Likes dati
    0
    Ciao Marcello84 Ben Venuto nel Forum. Allora , prova a Guardare se le mie Nodifiche che ti ho Apportato possono andarti Bene.
    Ora a me funziona Benissimo, poi vedi tu Ciao da A.Maurizio
    Questo e il Mio Link per Scaricare il Tuo File : https://app.box.com/s/umklqey3k2y734p6l7ki2huzggsjauke

  4. #4
    L'avatar di Marcello84
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Latina
    Messaggi
    5
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    0
    Grazie ad entrambi per la risposta.
    Hai ragione Textomb, il codice è sicuramente migliorabile, anche perchè utilizzo pochi comandi che sto imparando ad usare man mano in base alle ricerche che faccio. Per il resto cerco di superare i problemi con la logica (vedi la semplificazione tramite il comando che mi hai indicato invece di fare il ciclo do-loop e per cui ti ringrazio). Rivedrò sicuramente il codice inserendo il comando indicato.
    Per quanto riguarda la risposta di Maurizio, ho provato il file che hai allegato ma mi ritrovo lo stesso problema di prima, ovvero quando vado a fare il doppio click sul nominativo nel foglio 2 mi restituisce una casella di messaggio vuota, quindi con valore della variabile "nome" vuoto.
    Questa variabile l'ho definita in un modulo di base e non di classe, in una sub dichiarata pubblica nella riga prima del sub.
    La cosa strana è che la variabile "Y", anch'essa pubblica e dichiarata allo stesso modo, funziona e viene letta anche da altri moduli. Può essere perchè la variabile "nome" la dichiaro in un foglio e non in un modulo base?

  5. #5
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    816
    Versione Office
    2016 64bit
    Likes ricevuti
    147
    Likes dati
    53
    Non mi è chiaro un particolare: cosa succede qui ?
    Codice: 
    Y = InputBox("Inserire valore dell'incarico" & Chr(13) & "(arrotondato all'unità)")
    If Y > 300000 Then
    ...
    che dato bisogna inserire per proseguire in modo "esatto" con la macro ?

  6. #6
    L'avatar di Textomb
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    47
    Messaggi
    171
    Versione Office
    Excel 2016
    Likes ricevuti
    93
    Likes dati
    11
    Citazione Originariamente Scritto da Marcello84 Visualizza Messaggio
    Grazie ad entrambi per la risposta.
    Hai ragione Textomb, il codice è sicuramente migliorabile, anche perchè utilizzo pochi comandi che sto imparando ad usare man mano in base alle ricerche che faccio. Per il resto cerco di superare i problemi con la logica (vedi la semplificazione tramite il comando che mi hai indicato invece di fare il ciclo do-loop e per cui ti ringrazio). Rivedrò sicuramente il codice inserendo il comando indicato.
    Per quanto riguarda la risposta di Maurizio, ho provato il file che hai allegato ma mi ritrovo lo stesso problema di prima, ovvero quando vado a fare il doppio click sul nominativo nel foglio 2 mi restituisce una casella di messaggio vuota, quindi con valore della variabile "nome" vuoto.
    Questa variabile l'ho definita in un modulo di base e non di classe, in una sub dichiarata pubblica nella riga prima del sub.
    La cosa strana è che la variabile "Y", anch'essa pubblica e dichiarata allo stesso modo, funziona e viene letta anche da altri moduli. Può essere perchè la variabile "nome" la dichiaro in un foglio e non in un modulo base?
    Marcello la variabile "Y" sta in un modulo standard e quindi funziona come variabile globale. La variabile "nome" l'hai messa all'interno di un modulo di classe (cioè all'interno del modulo dedicato al foglio di lavoro) e quindi non funziona come variabile globale...

  7. #7
    L'avatar di A.Maurizio
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Torino
    Età
    56
    Messaggi
    383
    Versione Office
    2013
    Likes ricevuti
    44
    Likes dati
    0
    Scusami Marcello non avevo capito che divevi fare il doppio click sulla cella , io avevo solo osservato e curato il fattore dei due tasti sia quello che o trovato nel foglio 1 che quello che c'è nel foglio 2 .
    Però secondo me se suddividessi il tutto con delle normali funzioni , e poi le richiami dai suddetti tasti ; oltre a snellire il tutto lo renderesti anche molto più chiaro ! No ?
    Almeno ! Io normalmente faccio cosi, poi vedi tu .
    Saluti da Maurizio

  8. #8
    L'avatar di Marcello84
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Latina
    Messaggi
    5
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    0
    Citazione Originariamente Scritto da rollis13 Visualizza Messaggio
    Non mi è chiaro un particolare: cosa succede qui ?
    Codice: 
    Y = InputBox("Inserire valore dell'incarico" & Chr(13) & "(arrotondato all'unità)")
    If Y > 300000 Then
    ...
    che dato bisogna inserire per proseguire in modo "esatto" con la macro ?
    La selezione dei dati dal foglio1 al foglio2 tramite la macro avviene in base al valore dell'incarico che si inserisce. Ci sono 3 fasce di valore incarico, oltre 300, 101-300, 0-100. Y è la variabile a cui viene attribuito il valore dell'incarico da assegnare. I nominativi di fascia A potranno avere incarichi di fascia 1, 2 e 3, i nominativi di fascia B solo 2 e 3 e i nominativi di fascia C potranno avere solo incarichi di fascia 3.

    Marcello la variabile "Y" sta in un modulo standard e quindi funziona come variabile globale. La variabile "nome" l'hai messa all'interno di un modulo di classe (cioè all'interno del modulo dedicato al foglio di lavoro) e quindi non funziona come variabile globale...
    Quindi per risolvere dovrei inserire la macro del doppio click in un modulo base? Ho provato ma così facendo non riesco a far funzionare il doppio click, anche avendo messo worksheets(2).activate all'inizio della macro. Come faccio a dirgli di usare il doppio click sul foglio 2 se inserisco la macro in un modulo base?

    A.Maurizio Scusami Marcello non avevo capito che divevi fare il doppio click sulla cella , io avevo solo osservato e curato il fattore dei due tasti sia quello che o trovato nel foglio 1 che quello che c'è nel foglio 2. Però secondo me se suddividessi il tutto con delle normali funzioni , e poi le richiami dai suddetti tasti ; oltre a snellire il tutto lo renderesti anche molto più chiaro ! No ?
    Almeno ! Io normalmente faccio cosi, poi vedi tu .
    Saluti da Maurizio
    i tasti nei due fogli funzionavano, con il primo richiamavo la funzione di estrazione che mi chiedeva di inserire il valore Y, con il secondo invece pulivo la lista in modo da poter ricominciare il lavoro. Se intendi fare più sub da richiamare nei vari passaggi invece di scrivere un solo lungo codice si, ci avevo pensato, ma per ora mi sto concentrando sul finire il progetto, anche perchè ha una certa urgenza. I ritocchi li lascerò alla fine, per ora devo farlo funzionare.

  9. #9
    L'avatar di A.Maurizio
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Torino
    Età
    56
    Messaggi
    383
    Versione Office
    2013
    Likes ricevuti
    44
    Likes dati
    0
    Scusami Marcello Allora penso proprio di non aver capito bene il tuo Problema Finanale.
    In quanto quando Io ho Scaricato il Tuo Programma e ho premuto il Tasto del Foglio 1 ; mi dava Errore in questa Zona del tuo lavoro :

    Worksheets(1).Activate
    Y = InputBox("Inserire valore dell'incarico" & Chr(13) & "(arrotondato all'unità)")
    If Y > 300000 Then
    r = 2

    in quanto tu Avevi messo le Parentesi Tonde tra & (chr(13)) &

    Allora Io ho Apportato la modifica come Segnato in Rosso.
    Detto questo ho provato a inserire il Numero Trenta , Quando ho premuti il Tasto del Foglio 1 e in Modo Automatico mi ha Portato sul Foglio 2 con le dovute modifiche.
    Poi se per te non era quello ciò che stavi cercando ; Scusami ma evidentemente ho interpretato male la Tua Richiesta.
    Per qui ti consiglio vivamente di non perdere tempo e dare più retta a Prospetto che ti ha fornito TextTomb ; Oppure Tutti gli altri , in quanto Io più di cosi non saprei proprio come Aiutarti , Ciao e Alla prossima.

  10. #10

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4020
    Versione Office
    2013
    Likes ricevuti
    1228
    Likes dati
    923
    Ciao a tutti,
    anch'io non ho capito il valore della variabile Y... :256:

    Marcello84 ha scritto:

    La selezione dei dati dal foglio1 al foglio2 tramite la macro avviene in base al valore dell'incarico che si inserisce. Ci sono 3 fasce di valore incarico, oltre 300, 101-300, 0-100. Y è la variabile a cui viene attribuito il valore dell'incarico da assegnare. I nominativi di fascia A potranno avere incarichi di fascia 1, 2 e 3, i nominativi di fascia B solo 2 e 3 e i nominativi di fascia C potranno avere solo incarichi di fascia 3.
    Ma nel codice, si prendono in considerazione i valori:
    Y>300000
    Y>100000 And Y<300000
    Y<10000
    0

    Cosa sono quei valori?
    Tralasciando il codice che hai scritto, potresti spiegare con che criteri deve avvenire l'estrazione?

    Ciao

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  11. #11
    L'avatar di Marcello84
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Latina
    Messaggi
    5
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    0
    Spiego a cosa serve il tutto:
    c'è una lista di nomi a cui viene associata una fascia di "bravura": A è la fascia più alta, B è la fascia media e C la fascia bassa.
    Gli incarichi da assegnare si dividono anch'essi in 3 fasce in base al valore dell'incarico: gli incarichi con valore da 0 a 100.000 sono di fascia 3, quelli da 100.001 a 300.000 sono di fascia 2 e quelli oltre 300.000 sono di fascia 1.
    Le persone di fascia A possono avere incarichi di ogni fascia, quelli di fascia B possono avere incarichi solo di fascia 2 e 3 e quelli di fascia C possono averne solo di fascia 3. Tutti non possono avere più di 1 incarico di fascia 1 e non più di 4 incarichi in totale.
    Quando si preme il pulsante nel primo foglio si deve inserire il valore dell'incarico che si vuole assegnare, valore che viene assegnato alla variabile Y. Per questo vengono poi effettuati i controlli sul valore di Y, per individuare in quale fascia di incarico rientra.
    Tramite il sub "estrazione" si ottiene una lista nel secondo foglio di tutte le persone che possono avere l'incarico del valore indicato, in base alla loro fascia e a quanti incarichi hanno.
    Dopodichè nel foglio 2, facendo doppio click sul nome a cui si vuole assegnare il nuovo incarico, previa conferma con messagebox, il programma dovrebbe andare ad aggiungere l'incarico assegnato nella casella della relativa fascia di incarico del nominativo scelto, ma nel primo foglio, non nel secondo dove si fa doppio click.
    Questo è ciò che deve fare il programma. Ci sono comunque altre cose come il pulsante per cancellare la lista nel secondo foglio e la divisione per colori, ma sono cose superflue al momento.
    Il punto sta ora nel riuscire a far aggiungere il +1 del nuovo incarico nella cella della fascia di incarico del nominativo scelto nel primo foglio. Il problema, a quanto mi è sembrato di capire, sta nel fatto che la variabile "nome" a cui assegno il valore della cella dove viene fatto il doppio click, non viene letto negli altri moduli. Per essere sicuro di ciò ho cambiato la funzione di aggiunta del +1 di incarico in una messagebox che visualizza il valore della variabile "nome", che infatti viene visualizzato vuoto.
    Sembra che il problema stia nel fatto che il sub doppio click sia inserita in un modulo di classe (nel foglio) e non in un modulo base. Ho provato ad inserire il sub doppio click in un modulo base, ma in questo modo non funziona più.
    Spero di essere riuscito a fare un po' di chiarezza sulla questione, ma se così non fosse non esitate a chiedere.
    Come posso fare quindi a far funzionare il sub doppio click e far leggere il valore della variabile "nome" in altri moduli?
    Grazie a tutti!

    PS: per effettuare le prove sul file inserite più di 300.000 come valore incarico in quanto nel sub "inserimento" per il momento ho previsto solo il caso in cui Y sia maggiore di 300000!! (altrimenti la funzione del doppio click non viene attivata)
    PPS per Maurizio: in effetti hai ragione, avevo scritto male il codice (dovuto ad un copia incolla) ma stranamente a me funzionava nonostante la doppia parentesi tonda!

  12. #12
    L'avatar di A.Maurizio
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Torino
    Età
    56
    Messaggi
    383
    Versione Office
    2013
    Likes ricevuti
    44
    Likes dati
    0
    Ascolta Marcello , Aora che mi hai spiegato un pochino il tuo problema, e Riguardando meglio il tuo Schema.
    Ho notato che ad esempio : Sul foglio 1 Tu hai inserito 9 Nominativi; che sono :

    rossi A 1 1 1
    verdi A 0 2 2
    gialli A 0 2 1
    marrone B 0 1 1
    bianchi B 0 1 0
    neri B 0 1 3
    sempronio B 0 4 0
    caio B 0 0 3
    massimo C 1 2 3
    Però premendo il tasto "Avvia estrazione" Sempre Restando sul foglio 1 .
    Sul Foglio 2 ne compaiono solo 5 che sono :

    rossi A 1 1 1
    gialli A 0 2 1
    marrone B 0 1 1
    bianchi B 0 1 0
    caio B 0 0 3

    Posso chiederti Perchè ?
    In quanto forse e proprio li L'errore , Perchè non potendo fare il Calcolo esatto di tutte le Matrici ho persone incluse , il programma non riesce da solo ad individuare bene dove e cosa fare ; No !
    Io provo a drti un Consiglio da amici ; sempre che anche gli altri partecipanti a questo forum siano d'accordo , in quanto non voglio offendere nessuno.
    Ma se non trovi risposte Plausibili ;Prova anche a Rivolgere questa Domanda al Forum di PC-Facile , li sono quasi sicuro che in un Amen Riuscirai di certo a risolvere il tuo problema.
    Poi vedi tu.
    Mi scuso con tutto il resto del Forum per questa mia Conclusione; Una cosa e certa ; Non è mia intenzione Denigrare il lavoro , o le qualità di ognuno di voi ; Ma visto che Marcello vuole risolvere questo problema e anche giusto che faccia altri tentativi da altre parti ; "Tentar non Nuoce" Ciao

  13. #13

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4020
    Versione Office
    2013
    Likes ricevuti
    1228
    Likes dati
    923
    Ciao,
    come detto da Textomb la variabile non può essere letta dal codice associato all'evento DoubleClick.
    Quello che puoi fare è assegnare il valore di Y a una cella (durante l'estrazione) in modo da poter prendere il valore da qualsiasi codice.
    In alternativa, invece di scrivere il valore in una cella potresti utilizzare un "nome".

    Appena torno a casa provo a dargli un'occhiata...

    [EDIT]
    Maurizio, scusa per la sovrapposizione ;)

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  14. #14
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    816
    Versione Office
    2016 64bit
    Likes ricevuti
    147
    Likes dati
    53
    Ok, ho rivisto il tuo modulo "Inserimento" sistemando anche le variabili Public e Global per far girare le macro:
    Codice: 
    Option Explicit
    Public nome As String
    Public Sub inserimento()
        
        Dim myrange As Range, bl As Range, al As Range
        Dim r As Integer
        Dim whs As Worksheet
        Dim v As Integer
        
        Set whs = ThisWorkbook.Worksheets("DB")
        whs.Activate
        r = 2
        Do While Cells(r, 2).Value <> ""
            r = r + 1
        Loop
    ' =================================================
    '    Set myrange = Range("A2", Cells(r, 2))
    '    For Each bl In myrange.Cells
    '        If Y > 300000 Then
    '            MsgBox (nome)
    '        End If
    '    Next
    ' =================================================
        'righe modificate o nuove
        Set myrange = Range("A2", Cells(r, 1))
        For Each bl In myrange.Cells
            If bl = nome Then
                If Y > 300000 Then
                    Range(bl.Address).Offset(0, 2) = Range(bl.Address).Offset(0, 2) + 1
                ElseIf Y > 100000 And Y <= 300000 Then
                        Range(bl.Address).Offset(0, 3) = Range(bl.Address).Offset(0, 3) + 1
                ElseIf Y <= 100000 Then
                        Range(bl.Address).Offset(0, 4) = Range(bl.Address).Offset(0, 4) + 1
                End If
            End If
        Next
    ' =================================================
    End Sub
    PS. anche se non avevo ancora letto il post #11 credo che la macro giri lo stesso.

  15. #15
    L'avatar di A.Maurizio
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Torino
    Età
    56
    Messaggi
    383
    Versione Office
    2013
    Likes ricevuti
    44
    Likes dati
    0
    Nessun problema , anche io stavo per l'appunto rileggendo il tutto per vedere di farequalche cosa in più.
    Ma io non sono voi ! io per comprendere bene il tutto avrei bisogno di più tempo ; Cosa che a Marcello Manca.
    Tu non potresti indirizzarlo con una tua Idea pratica in modo che Marcello possa Capire meglio e magari apportare delle modifiche in tempo reale al suo problema !
    Ciao Cromagno

  16. #16
    L'avatar di A.Maurizio
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Torino
    Età
    56
    Messaggi
    383
    Versione Office
    2013
    Likes ricevuti
    44
    Likes dati
    0
    Ciao Rollis13 Io mi sono permesso di provare il tuo Programmino , e devo dire che ora Funziona bene !
    In Parte ma funziona Complimenti ; Speriamo che anche marcello sia dello stesso parere , Ciao

  17. #17
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    816
    Versione Office
    2016 64bit
    Likes ricevuti
    147
    Likes dati
    53
    Sì, sì, c'è tanto da lavorarci sopra per affinare ma credo Marcello84 abbia la voglia di fare con le sue mani.

  18. #18
    L'avatar di A.Maurizio
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Torino
    Età
    56
    Messaggi
    383
    Versione Office
    2013
    Likes ricevuti
    44
    Likes dati
    0
    Senza Dubbio , Si vede che anche lui e un tipo tosto in questo campo Ciao e Buona notte

  19. #19

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4020
    Versione Office
    2013
    Likes ricevuti
    1228
    Likes dati
    923
    Citazione Originariamente Scritto da A.Maurizio Visualizza Messaggio
    Nessun problema , anche io stavo per l'appunto rileggendo il tutto per vedere di farequalche cosa in più.
    Ma io non sono voi ! io per comprendere bene il tutto avrei bisogno di più tempo ; Cosa che a Marcello Manca.
    Tu non potresti indirizzarlo con una tua Idea pratica in modo che Marcello possa Capire meglio e magari apportare delle modifiche in tempo reale al suo problema !
    Ciao Cromagno
    Ciao,
    quello che intendevo era:

    Durante l'estrazione dal foglio "DB" il valore della Y viene assegnato anche ad una variabile pubblica "nuovo_incarico".
    Per assegnare il valore (che mi dirà in che fascia dovrò poi aggiungere il +1) ho aggiunto queste righe (in rosso) nella sub "estrazione":

    Codice: 
    Public Sub estrazione()
    
    
    Dim incarico1 As Integer
    Dim incarico2 As Integer
    Dim incarico3 As Integer
    Dim totale As Integer
    Dim r As Integer
    Dim fascia As String
    Dim cl
    Dim s
    
    
    Call pulisci
    Worksheets(1).Activate
    Y = InputBox("Inserire valore dell'incarico" & (Chr(13)) & "(arrotondato all'unità)")
    Select Case Y
        Case Is > 300000
            nuovo_incarico = 1
        Case 100001 To 300000
            nuovo_incarico = 2
        Case 0 To 100000
            nuovo_incarico = 3
    End Select
    If Y > 300000 Then
    r = 2
    Do While Cells(r, 2).Value <> ""
    Cells(r, 2).Select
    fascia = Cells(r, 2).Value
    incarico1 = Cells(r, 3).Value
    incarico2 = Cells(r, 4).Value
    incarico3 = Cells(r, 5).Value
    totale = incarico1 + incarico2 + incarico3
        If incarico1 < 1 And totale < 4 And fascia = "A" Then
        Range(Cells(r, 1), Cells(r, 5)).Select
        Selection.Copy
        Worksheets(2).Activate
        Cells(64000, 1).Select
        Selection.End(xlUp).Select
        ActiveCell.Offset(1, 0).Select
        With ActiveCell
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                End With
    Worksheets(1).Activate
        End If
    r = r + 1
    Loop
    Application.CutCopyMode = False
    Else
    If Y > 100000 And Y <= 300000 Then
    r = 2
    Do While Cells(r, 2).Value <> ""
    Cells(r, 2).Select
    fascia = Cells(r, 2).Value
    incarico1 = Cells(r, 3).Value
    incarico2 = Cells(r, 4).Value
    incarico3 = Cells(r, 5).Value
    totale = incarico1 + incarico2 + incarico3
        If incarico2 < 2 And totale < 4 And fascia <> "C" Then
        Rows(ActiveCell.Row).Select
        Selection.Copy
        Worksheets(2).Activate
        Cells(64000, 1).Select
        Selection.End(xlUp).Select
        ActiveCell.Offset(1, 0).Select
        With ActiveCell
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                End With
    Worksheets(1).Activate
        End If
    r = r + 1
    Loop
    Application.CutCopyMode = False
    Else
    If Y <= 100000 Then
    r = 2
    Do While Cells(r, 2).Value <> ""
    Cells(r, 2).Select
    fascia = Cells(r, 2).Value
    incarico1 = Cells(r, 3).Value
    incarico2 = Cells(r, 4).Value
    incarico3 = Cells(r, 5).Value
    totale = incarico1 + incarico2 + incarico3
        If incarico3 < 4 And totale < 4 Then
        Rows(ActiveCell.Row).Select
        Selection.Copy
        Worksheets(2).Activate
        Cells(64000, 1).Select
        Selection.End(xlUp).Select
        ActiveCell.Offset(1, 0).Select
        With ActiveCell
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                End With
    Worksheets(1).Activate
        End If
    r = r + 1
    Loop
    Application.CutCopyMode = False
    End If
    End If
    End If
    Worksheets(2).Activate
    r = 2
    Do While Cells(r, 2).Value = "A"
    Range(Cells(r, 1), Cells(r, 5)).Interior.ColorIndex = 40
    r = r + 1
    Loop
    
    
    Do While Cells(r, 2).Value = "B"
    Range(Cells(r, 1), Cells(r, 5)).Interior.ColorIndex = 35
    r = r + 1
    Loop
    
    
    Do While Cells(r, 2).Value = "C"
    Range(Cells(r, 1), Cells(r, 5)).Interior.ColorIndex = 39
    r = r + 1
    Loop
    Worksheets(2).Activate
    Range("A2").Activate
    
    
    End Sub
    Ho aggiunto anche "Call pulisci" per cancellare il foglio "risultati" prima di inserire una nuova estrazione.

    Mentre, per sapere il nominativo a cui andrò ad aggiungere il +1 (a seguito del doppio-click) utilizzo la cella "G1" del foglio "risultati" (alla fine del codice sarà "ripulita") :

    Codice: 
    Public Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    
    
    Dim myrange As Range, cl As Range, al As Range
    Dim r As Integer, nominativo As Range
    
    
    r = 2
    Do While Cells(r, 2).Value <> ""
    r = r + 1
    Loop
    Set myrange = Range("A2", Cells(r, 2))
    Set nominativo = Range("G1")
    For Each cl In myrange.Cells
        If Target.Address = cl.Address Then
        risposta = MsgBox("vuoi assegnare l'incarico a " & cl.Value & "?", vbYesNo)
           If risposta = vbYes Then
           nominativo.Value = Target.Value
           Call inserimento
           End If
        End If
    Next
    nominativo.ClearContents
    Set myrange = Nothing
    Set nominativo = Nothing
    End Sub
    Le due sub ("estrazione" e "inserimento") le ho messe in un unico modulo ("Modulo2").

    Quindi il codice "inserimento" :

    Codice: 
    Public Sub inserimento()
    
    
    Dim myrange As Range, bl As Range, al As Range
    Dim r As Integer
    Dim whs As Worksheet
    Dim wks2 As Worksheet
    Dim v As Integer
    
    
    Set whs = ThisWorkbook.Worksheets("DB")
    Set wks2 = ThisWorkbook.Worksheets("risultati")
    whs.Activate
    r = 2
    Do While Cells(r, 2).Value <> ""
    r = r + 1
    Loop
    Set myrange = Range("A2", Cells(r, 1))
    For Each bl In myrange
        If bl.Value = wks2.Range("G1").Value Then
            bl.Offset(0, 1 + nuovo_incarico).Value = bl.Offset(0, 1 + nuovo_incarico).Value + 1
            Exit For
        End If
    Next
    End Sub
    Lascio il file di esempio....

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  20. I seguenti utenti hanno dato un "Like"


  21. #20
    L'avatar di Marcello84
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Latina
    Messaggi
    5
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    0
    Innanzitutto un primo ringraziamento a tutti per esservi dedicati alla mia richiesta a quell'ora della notte!!
    Alla luce delle soluzioni da voi trovate e proposte non posso che ribadire quanto io sia agli inizi in questo campo, oltre che porgervi un enorme ringraziamento. Entrambe le soluzioni di rollis13 e cromagno sono semplici nella logica quanto efficaci.
    Non posso però fare a meno di notare come la soluzione di rollis13 sia di quanto più semplice ci sia, oltre ad avermi fatto sentire uno sprovveduto!! Era quindi sufficiente dichiarare la variabile pubblica "nome" in un modulo base invece che nel modulo di classe(foglio2), anche se era in quest'ultimo che veniva usata.
    Anche la soluzione proposta da cromagno di attribuire il valore del nome ad una cella e farlo leggere all'altro sub è sicuramente semplice ed efficace e mi avrebbe evitato di scervellarmi sul funzionamento delle variabili pubbliche.
    In definitiva, vi ringrazio moltissimo per l'aiuto, anche A.Maurizio che ha comunque speso il suo tempo per aiutarmi.
    Vi auguro una buona giornata, visto che la mia l'avete resa buona voi!
    Alla prossima!

Discussioni Simili

  1. Risposte: 8
    Ultimo Messaggio: 27/02/17, 19:19
  2. [Risolto] Selezionare ultiomo valore diverso da zero di una colonna variabile
    Di Maurantz nel forum Domande su Excel in generale
    Risposte: 3
    Ultimo Messaggio: 25/02/17, 01:27
  3. Risposte: 19
    Ultimo Messaggio: 21/11/16, 16:32
  4. [Risolto] Come creare foglio modulo d'ordine da foglio listino (Calc)
    Di WARMACHINE nel forum Foglio di calcolo su altre Piattaforme
    Risposte: 9
    Ultimo Messaggio: 23/09/16, 19:59
  5. Pubblica PDF foglio filtrato
    Di orcaimpetuosa nel forum Domande su Excel in generale
    Risposte: 0
    Ultimo Messaggio: 12/02/16, 12:29

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •