Macro VBA Excel



  • Macro VBA Excel
    di Ivan (utente non iscritto) data: 21/09/2012 08:42:17

    Ciao a tutti,
    dovrei fare una macro che mi verificasse che in una determinata colonna esempio E se i valori sono maggiori di 0 mi copia l'intera riga in un'altro file excel esempi c:copia.xls
    cosi per tutti i fogli (foglio1,foglio2,ecc) avendo la possibilità di inserire la colonna per ogni foglio;
    il risultato che voglio ottenere è quello di posizionarmi sulla pagina iniziale che chiamero index al posto di foglio1 e da li lanciare la macro che verifia tutti i fogli, in modo che nel file c:copia.xls trovo solo quello che mi serve, se è possibile creare il nome del file copia in automatico con la data, in modo da evitare che se si lancia due volte la macro mi continui a scrivere sullo stesso file.
    Grazie mille a chi mi può aiutare dato che di VBA non conosco niente.
    Ciao Ivan



  • di HarryBosch data: 21/09/2012 09:48:02

    Ciao Ivan
    mi sembra di aver capito, ma servono dei chiarimenti:
    - quando dici "avendo la possibilità di inserire la colonna per ogni foglio" intendi che per ogni foglio vuoi decidere quale sia la colonna da verificare?
    - e la verifica è sempre la stessa, esempio "valori > 0" oppure anche questa varia a seconda del foglio?
    - e questa verifica, sarà costante nel tempo o potrebbe anche variare? Tipo domani ti serve verificare "valori > 10"

    quale versione usi di Excel?



  • di Ivan (utente non iscritto) data: 21/09/2012 14:42:26

    Ciao HarryBosch
    si intendo che per ogni foglio decido quale sia la colonna da verificare, ma la verifica è sempre la stessa valore >0, e resta sempre uguale nel tempo, non potrà mai cambiare perchè è il riferimento alla quantità di pezzi.
    Grazie

    Ciao
    Ivan




  • di HarryBosch data: 22/09/2012 02:47:33

    Ti allego un modellino.
    All'interno troverai un solo foglio, nominato Index; aggiungi alcuni fogli di prova con i dati per testare la macro.
    Quindi avviala (ti ho messo un pulsantino che puoi togliere senza problemi se vuoi lanciarla dalla scheda).
    A questo punto il codice passerà in rassegna tutti i fogli e di ognuno ti chiederà su quale colonna vuoi effettuare il controllo.
    Alla fine i dati (le righe dove i valori della colonna selezionata erano >0) verranno salvati in un nuovo file nominato con la data in corso (al momento le righe vengono inserite una dietro l'altro, ma ovviamente sarebbe più carino se ci fossero le giuste intestazioni...).
    I file che crei verranno salvati nella stessa cartella dove metti il modellino.
    Se rilanci la macro nello stesso giorno ti chiederà se vuoi sovrascrivere i dati sul file già esistente per quel giorno (perché ovviamente troverà due file con lo stesso nome).

    Testalo e fammi sapere...
    PS: se vuoi rinominare il foglio Index bisogna modificare il codice; ma è abbastanza intuito se apri il vba




  • di HarryBosch data: 22/09/2012 02:47:43

    Ti allego un modellino.
    All'interno troverai un solo foglio, nominato Index; aggiungi alcuni fogli di prova con i dati per testare la macro.
    Quindi avviala (ti ho messo un pulsantino che puoi togliere senza problemi se vuoi lanciarla dalla scheda).
    A questo punto il codice passerà in rassegna tutti i fogli e di ognuno ti chiederà su quale colonna vuoi effettuare il controllo.
    Alla fine i dati (le righe dove i valori della colonna selezionata erano >0) verranno salvati in un nuovo file nominato con la data in corso (al momento le righe vengono inserite una dietro l'altro, ma ovviamente sarebbe più carino se ci fossero le giuste intestazioni...).
    I file che crei verranno salvati nella stessa cartella dove metti il modellino.
    Se rilanci la macro nello stesso giorno ti chiederà se vuoi sovrascrivere i dati sul file già esistente per quel giorno (perché ovviamente troverà due file con lo stesso nome).

    Testalo e fammi sapere...
    PS: se vuoi rinominare il foglio Index bisogna modificare il codice; ma è abbastanza intuito se apri il vba




  • di Ivan (utente non iscritto) data: 22/09/2012 10:43:14

    Ciao HarryBosch,
    innanzitutto grazie mille funziona alla grande,
    se possibile vorrei avere la possibilità di schegliere le colonne da controllare, impostando magari di default una colonna a caso
    variando la lettera nel codice VBA mi esegue il controllo in quella colonna senza chiedermi quale colonna controllare,
    perchè una volta fatto, i fogli rimangono statici, nel senso che io andrò solo a variare la quantità che mi serve.
    Per quanto riguarda l'intestazione del foglio dove mi copia i dati mi piacerebbe avere la possibilità di fagli inserire su richiesta prima di creare il file;
    Tipo di macchina, Cliente, Commessa.

    Grazie ancora

    Ciao

    Ivan



  • di HarryBosch data: 24/09/2012 01:31:58

    Ok si può benissimo inserire la colonna da controllare nel codice, evitando la richiesta ad ogni foglio: però in questa maniera sarà la stessa colonna per tutti i fogli del file; e infatti dici che i fogli resteranno statici. Quindi non ti serve più quel "per ogni foglio decido quale sia la colonna da verificare" che esponevi all'inizio?

    Per quanto riguarda l'intestazione, attualmente la macro agisce così:
    - crea un foglio nel file stesso dove riporta tutti i dati che corrispondono al criterio di ricerca
    - e poi "muove" questo foglio su un nuovo file salvandolo con la data odierna
    pertanto basterà far partire la copiatura dalla seconda riga e inserire l'intestazione voluta prima di lanciare la macro.

    Se mi chiarisci la prima questione ti sistemo l'allegato.
    Ciao Vanni



  • di Ivan (utente non iscritto) data: 24/09/2012 07:40:42

    Ciao Vanni,
    se non si può fare in modo che in ogni foglio la colonna di controllo sia diversa,
    va bene anche una fissa (che eventualmente posso cambiare nel codice).
    Per quanto riguarda l'intestazione è un casino fagli fare le 3 domande (Tipo di macchina, Cliente, Commessa) che poi saranno l'intestazione,
    era per facilitare le cose, nel senso che poi questo file lo utilizzeranno varie persone e se qualcuno non aggiorna l'intestazione si fa confusione.
    Fammi sapere, per il momento grazie mille.
    Ciao
    Ivan


  • Help HarryBosch
    di Ivan (utente non iscritto) data: 25/09/2012 07:32:44

    Ciao HarryBosch,
    appena riesci mi daresti una mano.
    Grazie mille
    Ciao
    Ivan



  • di HarryBosch data: 25/09/2012 08:36:27

    One moment please that I'm working...
    Ciao Ivan
    dimmi se così può andar bene:
    - per quanto riguarda le intestazioni: la macro riporterebbe nel foglio salvato le intestazioni di ogni foglio dove ha trovato i dati
    - per la colonna di ricerca: o ne metto una fissa nel codice (ma sarà la stessa per tutti i fogli) e poi la modifichi se cambiano le impostazioni dei fogli di ricerca;
    oppure nel foglio index ti inserisco una casellina dove stabilisci quale colonna andrà verificata (sempre su tutti i fogli)

    nell'attesa comincio a modificare...



  • di Ivan (utente non iscritto) data: 25/09/2012 09:17:26

    Ciao HarryBosch,
    va benissimo se metti una casellina nel foglio index,
    per il resto va bene.
    Grazie
    Ciao
    Ivan



  • di HarryBosch data: 25/09/2012 09:18:16

    Vedi allegato 1
    - la colonna di ricerca è indicata nel codice (come accennavo potrebbe essere indicata nel foglio Index)
    - ti riporta le intestazioni di ogni foglio (volendo si può fare un'unica intestazione)
    Fai sapere...



  • di Ivan (utente non iscritto) data: 25/09/2012 09:25:05

    Non vedo l'allegato 1 mi scarica il primo file,
    la colonna di ricerca nel codice va bene,
    per l'intestazione se è complicato fare in modo che faccia le domande,
    la faccio sul foglio index.
    Grazie



  • di Ivan (utente non iscritto) data: 25/09/2012 09:25:49

    Visto



  • di Ivan (utente non iscritto) data: 25/09/2012 09:31:58

    Ok, va bene per fare in modo che possa mettere il tipo di macchina il cliente e la commessa,
    sul foglio index, o attraverso delle domande come si puo fare,
    considera che se è fisso sul foglio index posso mettere un numero solo per fare copiare quelle righe,
    perchè le altre che aggiungerò non dovranno essere copiate.
    Grazieeeeeeeeee



  • di Ivan (utente non iscritto) data: 25/09/2012 10:45:35

    Tutto perfetto,
    solo un'ultima cosa poi non ti rompo più, è possibile fare in modo che nel foglio che mi salva prenda la formattazione del foglio di origine?, perchè le larghezze delle varie colonne sono tutte uguali, e non si leggono tutte le descizioni,
    Grazie mille

    Ciao
    Ivan



  • di HarryBosch data: 25/09/2012 11:07:29

    Non mi rompi assolutamente.. il Forum serve per chiedere e ricevere preziose informazioni, in entrambe le direzioni.

    Non capivo bene il discorso della domanda per decidere le intestazioni...
    Forse è meglio così come ti ho messo, ovvero che per ogni foglio ti riporta già le relative intestazioni. Per adattare automaticamente il contenuto delle celle, devi solo aggiungere una piccola istruzione:
    Sheets(1).Cells.EntireColumn.AutoFit
    da inserire nella Sub copia_fogli()
    subito dopo il Next del ciclo (vedi sotto)

    prova... eventualmente allego.
     
    .
    .
    For i = 3 To Worksheets.Count
            cerca_dati
        Next
        
        Sheets(1).Cells.EntireColumn.AutoFit
    
        Application.ScreenUpdating = False
    .
    .



  • di Ivan (utente non iscritto) data: 25/09/2012 11:39:32

    Ottimo
    funziona tutto alla perfezione
    Grazie ancora
    Ciao
    Ivan