Macro che copia risultati no



  • Macro che copia risultati no
    di Elias (utente non iscritto) data: 26/05/2014 09:18:08

    Buongiorno Ragazzi Ho una macro che mi copia i risultati "NO" dalla tabella presente in folgio1, nel foglio di lavoro risultati ( ma per un solo foglio di lavoro ). Avendo 4 fogli di lavoro, cioè in ogni foglio ho una tabella ( 4 tabelle in tutto ). come faccio a copiare i risultati "No" nelle tabelle presenti nei 4 fogli di lavoro nel foglio di lavoro risultati? vorrei che mi copia le tabelle con i risultati NO nel foglio di lavoro Risultati una sotto l'altra ( sono tabelle diverse ). Grazie in anticipo!
     
    Option Explicit
    Sub RISULTATO()
    
    Dim Ncol As Integer
    Ncol = ActiveSheet.Rows(9).Find(what:="DISPONIBILITA'").Column
    
    Worksheets("RISULTATO").Range("a7").CurrentRegion.Clear
        
        With ActiveSheet.Range("$A$9")
        .AutoFilter field:=Ncol, Criteria1:="NO"
        .CurrentRegion.Copy Sheets("RISULTATO").Range("a7")
        .AutoFilter field:=Ncol
        End With
        Sheets("RISULTATO").Select
    
    End Sub



  • di Mister_x (utente non iscritto) data: 26/05/2014 10:14:55

    ciao

    in questo caso sarebbe utile avere ha disposizione un tuo file completo di tutti i fogli e vedere come sono strutturati, si intende eleminare dati sensibili, ma lasciando quelli da copiare e dove copiarli,
    quindi allega il tuo file cosi si puo' creare la sub() per fare questo

    ciao
    PS per allegare un file hai a disposizione il tasto in alto a destra nella discussione





  • di Elias (utente non iscritto) data: 26/05/2014 10:23:58

    Ho allegato il file "ES."



  • di Mister_x (utente non iscritto) data: 26/05/2014 10:39:47

    ciao

    ho controllato il tuo file, ma per fare questo lavoro non serve nessuna sub() ma dei semplici collegamenti ai fogli interessati, vedi il tuo file con le modifiche che ho fatto alla celle della colonna E del foglio RISULTATO
    per questi lavori non conviene scomodare il VBA ma utilizzare le funzioni di excel in quanto piu' maleabili a modifiche

    ciao







  • di ELIAS (utente non iscritto) data: 26/05/2014 10:46:58

    Non ci sono modifiche. non voglio che mi copia le tabelle intere ma vorrei che mi copia le tabelle solo con i risultati "NO" facendo un filtro nella riga inserendo quest'istruzione
     
    Dim Ncol As Integer
    Ncol = ActiveSheet.Rows(9).Find(what:="DISPONIBILITA'").Column
    
    Worksheets("RISULTATO").Range("a7").CurrentRegion.Clear
        
        With ActiveSheet.Range("$A$9")
        .AutoFilter field:=Ncol, Criteria1:="NO"
        .CurrentRegion.Copy Sheets("RISULTATO").Range("a7")
        .AutoFilter field:=Ncol
        End With
        Sheets("RISULTATO").Select
    



  • di ELIAS (utente non iscritto) data: 26/05/2014 10:51:33

    Vorrei mettere assieme le due istruzione. Cioè quella di sopra e questa qui presente. Ho provato ma sinceramente non so come fare visto che uso da poco excel e non sono tanto pratico e esperienza
     
    Option Explicit
    
    Sub Risultato()
      
      nf = ThisWorkbook.Sheets.Count
      Application.ScreenUpdating = False
      Sheets("Risultato").UsedRange.ClearContents
      For i = 1 To nf
        Sheets(i).Range("a1:iv5000").Copy Sheets("risultato").Cells(5000, 1).End(xlUp).Offset(1, 0)
        Application.CutCopyMode = False
      Next
      Application.ScreenUpdating = True
    End Sub



  • di e (utente non iscritto) data: 26/05/2014 11:33:22

    spero di essermi riuscito a spiegare!! Vorrei una macro con pulsante che mi copia le tabelle nei 4 fogli di lavoro solo con i risultati "NO" dentro il foglio di lavoro risultati



  • di ELIAS (utente non iscritto) data: 26/05/2014 14:25:45

    Non posso usare quest'istruzione? ho provato a mettere sheets(i) al posto di activesheet ma purtroppo mi dice errore
     
    Ncol = Sheets(i).Rows(13).Find(what:="Risultati").Column



  • di Mister_x (utente non iscritto) data: 26/05/2014 15:24:39

    ciao

    da mettere in un modulo e da provare se soddisfa le tue esigenze di riporto valori no in foglio risultato

    ciao
     
    '' da inserire in un Modulo
    Option Explicit
    
    Sub Copia_NO_Risultato()
    Dim Foglio As Variant
    Dim i As Long, o As Long, Nriga As Long
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Nriga = 10
    Sheets("RISULTATO").Select
    Range("A9:E1000").ClearContents
    For i = 1 To Sheets.Count
      Foglio = UCase(Sheets(i).Name)
      If Foglio <> "RISULTATO" Then
      Cells(Nriga - 1, "E") = UCase(Sheets(i).Name)
        For o = 10 To Sheets(i).Cells(Rows.Count, "E").End(xlUp).Row
          If Sheets(i).Cells(o, "E") = "NO" Then
            Cells(Nriga, "A") = Sheets(i).Cells(o, "A")
            Cells(Nriga, "B") = Sheets(i).Cells(o, "B")
            Cells(Nriga, "C") = Sheets(i).Cells(o, "C")
            Cells(Nriga, "D") = Sheets(i).Cells(o, "D")
            Cells(Nriga, "E") = Sheets(i).Cells(o, "E")
            Nriga = Nriga + 1
          End If
        Next o
        Nriga = Nriga + 6
      End If
     Next i
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    End Sub
    
    






  • di ELIAS (utente non iscritto) data: 26/05/2014 15:34:13

    funziona!! Ma mi copia solo i valori e non la tabella intera con i valori ed i titoli e gli sfondi.. come faccio?



  • di ELIAS (utente non iscritto) data: 26/05/2014 15:42:17

    Vorrei che copiasse la tabella com'è con le righe con i risultati "NO". le colonne possono variare, funzionerà lo stesso? Grazie per la tua disponibilità per aiutarmi



  • di nichicanta data: 26/05/2014 16:02:31

    prova quesat e dimmmi se va bene, l'ho adattata al tuo quesito, cambia la colon anche devi utilizzare per filtrare i dati di tutti ifogli cambiando il valore in quesat riga:Field:=4 ( il numero indica la colonna su cui applicare il filtro).
    Ti saluto.
     
    Sub m()
    Dim nf As Long, i As Long 
      nf = ThisWorkbook.Sheets.Count
      Application.ScreenUpdating = False
      Sheets("RISULTATO").UsedRange.ClearContents
    For i = 1 To nf
        With Sheets(i).Select
            If Sheets(i).Name <> "RISULTATO" Then
            Range("A1").AutoFilter Field:=4, Criteria1:="NO"
            Sheets(i).UsedRange.Copy ThisWorkbook.Worksheets("RISULTATO").Cells(5000, 1).End(xlUp).Offset(1, 0)
            End If
    Sheets(i).AutoFilterMode = False
      
        End With
    Next i
    End Sub
    



  • di nichicanta data: 26/05/2014 16:05:30

    Scusami per gli errori di battitura, ho una tastiera che fa i capricci, volevo dirti questo:
    prova questa e dimmi se va bene, l'ho adattata al tuo quesito, cambia la colonna su cui applicare il filtro di tutti i fogli da copiare nel foglio "RISULTATO", cambia il valore in questa riga:Field:=4 ( il numero indica la colonna su cui applicare il filtro).
    Ti saluto.



  • di ELIAS (utente non iscritto) data: 26/05/2014 16:14:35

    La ringrazio tantissimo nichicanta!! apprezzo sempre la sua disponibilità ad aiutarmi!! Comunque, Le colonne possono variare, Una volta dovrei aggiungere ed una volta forse elimino. Funzionerà lo stesso? magari potrei fare un filtro nella riga che cerca la parola disponibilità e prende tutti i "no" nella colonna di disponibilità. una cosa tipo quest'istruzione
     
    Ncol = ActiveSheet.Rows(9).Find(what:="DISPONIBILITA'").Column
    
    Worksheets("RISULTATO").Range("a7").CurrentRegion.Clear
        
        With ActiveSheet.Range("$A$9")
        .AutoFilter field:=Ncol, Criteria1:="NO"
        .CurrentRegion.Copy Sheets("RISULTATO").Range("a7")
        .AutoFilter field:=Ncol



  • di ELIAS (utente non iscritto) data: 26/05/2014 16:35:21

    Ho provato a farla funzionare ma avendo tabelle con colonne diverse ( perche le tabelle nei 4 folgi di lavoro sono diverse, cioè variano le colonne ) non funziona



  • di nichicanta data: 26/05/2014 16:35:38

    potresti provare ad inserire diversi criteri di filtro che si applicano su diverse colonne come ti ho riportato sotto ( penso che tu non possa inserire tante altre colonne su cui applicare i filtri e/o ricercare altro dato)
     
    Sub m()
    Dim nf As Long, i As Long 'A3, E100!
      nf = ThisWorkbook.Sheets.Count
      Application.ScreenUpdating = False
      Sheets("RISULTATO").UsedRange.ClearContents
    For i = 1 To nf
        With Sheets(i).Select
            If Sheets(i).Name <> "RISULTATO" Then
            Range("A9:E9").AutoFilter Field:=5, Criteria1:="NO", Operator:=xlAnd
            Range("A9:E9").AutoFilter Field:=2, Criteria1:="DISPONIBILITA'", Operator:=xlAnd
            Range("A9:E9").AutoFilter Field:=1, Criteria1:=" QUI CI METTI UN ALTRO CRITERIO DI FILTRO E COSI VIA ", Operator:=xlAnd      
            
                   Sheets(i).UsedRange.Copy ThisWorkbook.Worksheets("RISULTATO").Cells(5000, 1).End(xlUp).Offset(1, 0)
            End If
    Sheets(i).AutoFilterMode = False
    Sheets("RISULTATO").Select
        End With
    Next i
    End Sub
    



  • di ELIAS (utente non iscritto) data: 26/05/2014 16:38:36

    La provo subito Comunque ci sono delle tabelle che avvolte dovrei aggiungere 100 colonne e ci sono tabelle che rimangono le stesse perciò ho pensato di farla sulla riga vista che non varia mai questa



  • di nichicanta data: 26/05/2014 16:48:46

    tieni presente che l'ultimo codice necessita di due o più (dipende da te cosa vuoi fare)criteri di ricerca, nel caso dovessi filtrare solo per SI e NO non funzionerebbe, in questo caso dovresti usare il primo codice ed eliminare le altre condizioni create con l'operatore:xlAnd



  • di ELIAS (utente non iscritto) data: 26/05/2014 16:51:50

    Non funzione essendo che non so quasi mai quante colonne potrei aggiungere, non posso specificare la colonna perché nel mio caso è sempre variabile. perciò io vorrei che andasse nella riga numero 9 in tutte le tabelle ed andare alla parola disponibilità e trovare tutti i "NO" e copiare le righe con "NO" nel foglio dei risultati.



  • di Mister_x (utente non iscritto) data: 26/05/2014 18:31:08

    riciao

    quindi stando al tuo ultimo esposto,e non sapendo a priori quante colonne ha un articolo, ti propongo questa sub(), la quale ha due posizioni fisse, quelle di ricerca del NO in Colonna E su tutti i fogli e la partenza in riga 10 ,
    il riporto viene fatta sia che le colonne vanno da un minimo di 5 a un max di x dato che si calcola da sola quante sono per riga occupate

    ciao
     
    '' da inserire in un Modulo
    Option Explicit
    
    Sub Copia_NO_Risultato()
    Dim Foglio As Variant
    Dim i As Long, o As Long, e As Long, Nriga As Long
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Nriga = 10
    Sheets("RISULTATO").Select
    Range("A9:ZZ10000").ClearContents
    For i = 1 To Sheets.Count
      Foglio = UCase(Sheets(i).Name)
      If Foglio <> "RISULTATO" Then
      Cells(Nriga - 1, "E") = UCase(Sheets(i).Name)
        For o = 10 To Sheets(i).Cells(Rows.Count, "E").End(xlUp).Row
          If Sheets(i).Cells(o, "E") = "NO" Then
           For e = 1 To Sheets(i).Cells(o, Columns.Count).End(xlToLeft).Column
            Cells(Nriga, e) = Sheets(i).Cells(o, e)
           Next e
            Nriga = Nriga + 1
          End If
        Next o
        Nriga = Nriga + 6
      End If
     Next i
     Application.ScreenUpdating = True
    Application.EnableEvents = True
    End Sub
    






  • di ELIAS (utente non iscritto) data: 27/05/2014 09:33:26

    Ho provato ad aggiungere ad esempio due colonne prima della colonna disponibilità cioè la colonna "E" e mi da risultati vuoti la colonna E da cui ho i risultati "SI" e "NO" varia molto spesso, avvolte sta ad "x" avvolte "yx", "dp", "y" ecc.. perciò io avrei voluto che dalla riga 9 la macro andasse a rilevare la parola Disponibilità cioè la colonna dove stanno "SI" e "NO" e dopo facesse un filtro prendendo solo i risultati "NO". ps. La riga 9 nella tabella quella non varia mai, ho tutte le tabelle che partono dalla riga 9. Sono le colonne che variano, sopratutto la E che sta alla fine ed io dovendo sempre aggiungere colonne prima della colonna E, la E varia sempre.



  • di Mister_x (utente non iscritto) data: 27/05/2014 09:45:31

    ciao

    certo che come spiegazione bisogna sempre strapparle dalla bocca, comunque a questo punto la sub() cerca in qualsiasi punto del foglio la parola di intestazione "DISPONIBILITA'" e va a questo punto scrivere nel foglio tutti i valori trovati in NO,
    da come vedrai adesso la sub ti riporta il nome del foglio, l'intestazione e i suoi relativi dati

    ti posto il file con la Modifica fatta e il risultato che otterrai

    ciao
     
    '' da inserire in un Modulo
    Option Explicit
    
    Sub Copia_NO_Risultato()
    Dim Foglio As Variant
    Dim i As Long, o As Long, e As Long, Nriga As Long
    Dim Intestazione As Range
    Dim In_riga As Long, In_col As Long
    Dim cella As Variant
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Nriga = 1
    Sheets("RISULTATO").Select
    Range("A1:ZZ10000").ClearContents
    For i = 1 To Sheets.Count
      Foglio = UCase(Sheets(i).Name)
      If Foglio <> "RISULTATO" Then
      Set Intestazione = Sheets(i).Range("A1:ZZ20")
      '''
       For Each cella In Intestazione
         If UCase(cella.Value) = "DISPONIBILITA'" Then
           In_riga = cella.Row
            In_col = cella.Column
          Exit For
         End If
       Next
      ''' Intestazione
      Cells(Nriga, 1) = UCase(Sheets(i).Name)
      Nriga = Nriga + 1
      For e = 1 To Sheets(i).Cells(In_riga, Columns.Count).End(xlToLeft).Column
            Cells(Nriga, e) = Sheets(i).Cells(In_riga, e)
       Next e
      Nriga = Nriga + 1
      ''
        For o = In_riga To Sheets(i).Cells(Rows.Count, In_col).End(xlUp).Row
          If Sheets(i).Cells(o, "E") = "NO" Then
           For e = 1 To Sheets(i).Cells(o, Columns.Count).End(xlToLeft).Column
            Cells(Nriga, e) = Sheets(i).Cells(o, e)
           Next e
            Nriga = Nriga + 1
          End If
        Next o
        Nriga = Nriga + 2
      End If
     Next i
     Set Intestazione = Nothing
     Application.ScreenUpdating = True
    Application.EnableEvents = True
    End Sub
    
    






  • di Mister_x (utente non iscritto) data: 27/05/2014 09:52:18

    riciao

    errrata corrige
    ho dimenticato una variabile nella sub()
    da cosi
    If Sheets(i).Cells(o, "E") = "NO" Then

    a cosi
    If Sheets(i).Cells(o, In_col) = "NO" Then

    altimenti non controlla la colonna interessata
    risposto il file con la modifica fatta
    riciao





  • di ELIAS (utente non iscritto) data: 27/05/2014 10:35:04

    Grazie Mille Mister_X non si può copiare anche la tabella e non solo i valori nella tabella? magari si potesse fare sarebbe perfetta



  • di Mister_x (utente non iscritto) data: 27/05/2014 11:58:18

    riciao

    sub() con colore e bordi

    ciao

    allego sempre il file di prova Bordi
     
    '' da inserire in un Modulo
    Option Explicit
    
    Sub Copia_NO_Risultato()
    Dim Foglio As Variant
    Dim i As Long, o As Long, e As Long, Nriga As Long
    Dim Intestazione As Range
    Dim In_riga As Long, In_col As Long
    Dim cella As Variant
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Nriga = 1
    Sheets("RISULTATO").Select
    Range("A1:ZZ10000").Clear  ''Contents
    For i = 1 To Sheets.Count
      Foglio = UCase(Sheets(i).Name)
      If Foglio <> "RISULTATO" Then
      Set Intestazione = Sheets(i).Range("A1:ZZ20")
      '''
       For Each cella In Intestazione
         If UCase(cella.Value) = "DISPONIBILITA'" Then
           In_riga = cella.Row
            In_col = cella.Column
          Exit For
         End If
       Next
      ''' Intestazione
      Cells(Nriga, 1) = UCase(Sheets(i).Name)
      Cells(Nriga, 1).Select
        With Selection
          .Interior.ColorIndex = 6
          .Font.ColorIndex = 3
        End With
       Call Bordi
          ''
      Nriga = Nriga + 1
      For e = 1 To Sheets(i).Cells(In_riga, Columns.Count).End(xlToLeft).Column
            Cells(Nriga, e) = Sheets(i).Cells(In_riga, e)
            Cells(Nriga, e).Select
         With Selection
              .Interior.ColorIndex = 44
              .Font.ColorIndex = 9
         End With
       Call Bordi
       Next e
      Nriga = Nriga + 1
      ''
        For o = In_riga To Sheets(i).Cells(Rows.Count, In_col).End(xlUp).Row
          If Sheets(i).Cells(o, In_col) = "NO" Then
           For e = 1 To Sheets(i).Cells(o, Columns.Count).End(xlToLeft).Column
            Cells(Nriga, e) = Sheets(i).Cells(o, e)
            Cells(Nriga, e).Select
            With Selection
              .Interior.ColorIndex = 4
              .Font.ColorIndex = 1
            End With
       Call Bordi
           Next e
            Nriga = Nriga + 1
          End If
        Next o
        Nriga = Nriga + 2
      End If
     Next i
     Set Intestazione = Nothing
     [a1].Select
     Application.ScreenUpdating = True
    Application.EnableEvents = True
    End Sub
    
    Sub Bordi()
    With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
    End Sub
    






  • di ELIAS (utente non iscritto) data: 27/05/2014 12:18:46

    Gentilissimo!!!! funzione benissimo!! Grazie infinite ancora



  • di ELIAS (utente non iscritto) data: 27/05/2014 12:52:21

    Cambiando i dati per adattarlo al mio documento ( Disponibilità con Risultati e NO con FALSO ) mi da un errore sulla riga qui sotto, come mai non si adatta e mi dice errore in giallo sulla riga qui sotto???
     
    For e = 1 To Sheets(i).Cells(In_riga, Columns.Count).End(xlToLeft).Column



  • di Mister_x (utente non iscritto) data: 27/05/2014 14:11:11

    cioa

    quindi il file che hai postato non corrisponde esattamente alla colonna diciamo dei NO scritto ma possiamo trovare anche un FALSO dato che arriva da una formula o al posto di un SI un VARe quindi prova a modificare questo pezzo
    altrimenti posta il tuo file veramente come stanno le cose
    ciao
    riposto sempre l'ultimo file con la modifica aggiornata
     
    da cosi
    If Sheets(i).Cells(o, In_col) = "NO" Then
           For e = 1 To Sheets(i).Cells(o, Columns.Count).End(xlToLeft).Column
    a cosi
    For o = In_riga To Sheets(i).Cells(Rows.Count, In_col).End(xlUp).Row
          If Sheets(i).Cells(o, In_col) = "NO" Or Sheets(i).Cells(o, In_col) = False Then






  • di Elias (utente non iscritto) data: 28/05/2014 20:12:24

    Ho provato ad applicarlo ad un file simile che ha più colonne ed al posto di disponibilità ce risultato, ed al posto di no ce falso.. ma è uguale.. però non funziona Non dovrebbe funzionare? Ps. Magari potessi mettere il mio file ma per motivi di privacy non posso



  • di Mister_x (utente non iscritto) data: 28/05/2014 22:51:10

    ciao

    attualmente non so' leggere nella mente di un altro, cerco di capire cosa vuole se spiegato,
    ma se per caso tu posti il tuo file lasciando la struttura esatta di come e', togliendo dati sensibili, tipo nomi via codfisc numeri tel. e lasci solo il dato vero dove dobbiamo valutare la cosa,FORSE SI RISOLVE, altrimenti ad indovinare e' molto difficile,
    sappi che io nel gioco , lotto enalotto gratta e perdi, sono molto fortunato, VINCO SEMPRE,
    NON GIOCO MAI

    ciao





  • di ELIAS (utente non iscritto) data: 29/05/2014 09:57:05

    Ho allegato il mio file Es1.



  • di Mister_x (utente non iscritto) data: 29/05/2014 13:01:09

    ciao

    se non cambi l'intrstazione della colonna certo che avrai sempre un errore
    For Each cella In Intestazione
    If UCase(cella.Value) = "DISPONIBILITA'" Then

    nel tuo deve cercare l'intestazione RISULTATO dato che la colonna interessata e' nominata Risultato e non Disponibilita' come avevi detto precedentemente e mai corretto
    For Each cella In Intestazione
    If UCase(cella.Value) = "RISULTATO" Then

    ti riallego il tuo file ES1 modificato dove in modulo1 ho inserito la sub() funzionante egregiamente

    ciao

    comunque





  • di ELIAS (utente non iscritto) data: 03/06/2014 09:44:44

    Grazie!!