numero righe con filtri automatici



  • numero righe con filtri automatici
    di marinoernestoch data: 07/08/2014 21:36:38

    Buona sera.
    In VBA, com'è possibile conoscere le righe che soddisfano una condizione di filtro, senza essere obbligati a passare dal selection.copy?
    Con l'esempio che allego, appunto prima del comando copy, ottengo sempre il valore 1, mentre ottengo il valore reale, solo dopo il paste.
    Inoltre perchè se non do un range...select a partire dalla riga successiva al filtro, ma da la riga del filtro anche se non soddisfa la condizione?
    Qualcuno mi può aiutare?
    ringrazio
     
    Sub con_filtro()
    If ActiveSheet.AutoFilterMode Then
       ' On Error Resume Next
        If Not ActiveSheet.ShowAllData Then ActiveSheet.ShowAllData    '<============ a volte da errore a volte NO?????
        'On Error GoTo 0             '<============ forse da errore quando è già showall
        ActiveSheet.AutoFilter.Range.AutoFilter
        
    End If
    prima_riga = Range("Riga_testata_attivita").Row
    ultima_riga = Cells(Rows.Count, 5).End(xlUp).Row
    colonna = Range("colonna_cf_prestatore_su_attivita").Address(0, 0)
    colonna = Replace(colonna, ":", prima_riga & ":") & ultima_riga
    colonna_dati = Replace(colonna, prima_riga & ":", prima_riga + 1 & ":") '<= mi devo posizionare avanti di uno altrimenti mi da anche la riga del filtro
    ricerca = InputBox("digita codice o fine")
    if ucase(ricerca) = "FINE" then exit sub
    ActiveSheet.Range(colonna).AutoFilter Field:=1, Criteria1:=ricerca
    qta = Selection.Rows.Count      '<==== mi da sempre 1 ????
    On Error Resume Next
    Range(colonna_dati).SpecialCells(xlCellTypeVisible).Select
    If Err.Number = 0 Then
        On Error GoTo 0
        qta = Selection.Rows.Count    '<===== mi da 1 ???
     '   Selection.EntireRow.Copy   '<=====si ferma alle righe contigue
           Selection.EntireRow.Select   '<==== mi seleziona tutti
        qta = Selection.Rows.Count     '<===== mi da sempre1 ???
         Selection.Copy                 '<=== copia tutte le righe
    
    
       ' Workbooks("DATA_BASES_ver_X.xls").Worksheets("prova").Activate
        ActiveSheet.Paste
        qta2 = Selection.Rows.Count   '<==== mi dice quante righe ha copiato
        If Selection.Rows.Count > 1 Then ActiveCell.End(xlDown).Select
        ActiveCell.Offset(1, 0).Select
        
        Workbooks("DATA_BASES_ver_0.xls").Worksheets("ATTIVITA").Activate
    Else
        On Error GoTo 0
        MsgBox "Non trovato=" & ricerca
    
    End If
    ActiveSheet.ShowAllData
    ActiveSheet.AutoFilter.Range.AutoFilter
    Application.EnableEvents = True
    End Sub
    



  • di scossa data: 07/08/2014 22:04:25

    Non alleghi alcun file quindi il tuo codice serve a poco, per cui ti do solo uno spunto.




    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Public Sub contarighe()
      Dim rng As Range
      Dim nRows As Long
      For Each rng In Selection.SpecialCells(xlCellTypeVisible).Areas
        nRows = nRows + rng.Rows.Count
      Next
      MsgBox nRows
    End Sub



  • di marinoernestoch (utente non iscritto) data: 07/08/2014 22:40:25

    Scossa, ho aggiunto il foglio.
    Ho corretto la macro per continuare nelle prove, per cui potrebbe essere <> da quanto postato:ma il succo non cambia.
    Chiedo anche lumi sulle altre perplessità.
    Ringrazio molto.
    ernesto