Login Registrati
Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
  • Autore
    Articoli
  • #53823 Score: 0 | Risposta

    Ciao nel workbook allegato c'è una macro "ApplicaFiltro3" per filtrare la colonna A posizioni.

    Se in cella A1 (inserisci la posizione) la sigla A1 mi seleziona tutte le celle da A1 a A14
    perchè hanno tutte il numerero 1.

    Se in cella A1 (inserisci la posizione) la sigla A2 mi seleziona tutte le celle da A2

    Vorrei che se seleziono A1 si filtrasse solo le sigle A1

    Spero di essermi spiegato.
    Grazie

    Allegati:
    You must be logged in to view attached files.
    #53825 Score: 0 | Risposta

    alexps81
    Moderatore
      55 pts

      Ciao, bisogna sistemare un po' di cose. La prima è pubblicare la richiesta nella sezione giusta. Per ora ci ho pensato io a spostarla in questa.

      Poi per quanto riguarda il codice:

      fai attenzione a come dichiari le variabili:

      Dim c, avviso As String
      

      qui solo la variabile "avviso" è di tipo string invece "c" è di tipo variant

      Sempre per quanto riguarda la variabile "c", nel tuo codice prima gli assegni il valore contenuto un "A1" poi gli dici di essere uguale a quel valore prelevato e poi gli aggiungi il simbolo "*" che la rende "tutto ciò che viene anche dopo quel valore", quindi se scrivi A1 poi diventa A1, A11, A12, A13, A14, ecc...quindi non va bene, ecco perché ti filtra non solo "A1"

      Il filtro poi lo devi applicare partendo dalla riga 2 e non dalla riga 3:

      ActiveSheet.Range("$A$3:$A$4000").AutoFilter Field:=1, Criteria1:=c

      quindi sarebbe:

      ActiveSheet.Range("$A$2:$A$4000").AutoFilter Field:=1, Criteria1:=c

      Il messaggio che mostri come "avviso" non ha bisogno di essere immagazzinato in un variabile, dato che poi non la utilizzi più:

      avviso = MsgBox("devi inserire una posizione in A1!", vbInformation + vbOKOnly, "AVVISO")

      diventa solo:

      MsgBox "devi inserire una posizione in A1!", vbInformation + vbOKOnly, "AVVISO"

      A questo punto prova queste modifiche:

      Sub ApplicaFiltro3() 'filtro posizioni
          Dim c As String
          Dim visibili As Boolean
          
          c = Range("A1").Value
          If LCase(c) <> LCase("inserisci qui posizione da ricercare") Then
              ActiveSheet.Unprotect "123456"
              Application.ScreenUpdating = False
              Application.Calculation = xlCalculationManual
      
              If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
              ActiveSheet.Range("$A$2:$A$4000").AutoFilter Field:=1, Criteria1:=c '<<< filtro
          
              On Error Resume Next
              visibili = ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
              On Error GoTo 0
              
              If visibili = 0 Then
                  MsgBox "Nessuna corrispondenza trovata per '" & c & "'.", vbExclamation, "Filtro vuoto"
                  Range("A1").ClearContents
                  ActiveSheet.AutoFilterMode = False
              End If
              
              Application.Calculation = xlAutomatic
              Application.ScreenUpdating = True
              ActiveSheet.Protect "123456"
          Else
              MsgBox "devi inserire una posizione in A1!", vbInformation + vbOKOnly, "AVVISO"
          End If
      End Sub
      

      Inoltre nel Modulo di classe del Foglio4 (articoli) stavi anche scrivendo bene, aggiungendo la disabilitazione degli eventi quando modifichi qualcosa in A1. Dovevi solo sistemare meglio la sequenza delle azioni, così da evitare Loop continui e magari aggiungerci un controllo sulla cella che hai manipolato per evitare interventi inutili:

      Option Explicit
      
      Private Sub Worksheet_Change(ByVal Target As Range)
          If Target.Address <> "$A$1" Then Exit Sub
          
          If Range("A1") = "" Then
              Application.EnableEvents = False
              Range("A1") = "inserisci qui posizione da ricercare"
              Application.EnableEvents = True
         End If
      End Sub

       

      #53826 Score: 0 | Risposta

      Grazie aleps81 la macro per filtrare funziona.

      Ora il problema è per la macro per togliere i filtri

      Sub TogliFiltro3()

      và in errore nel metodo autofilter qui

      ActiveSheet.Range("$B$2:$B$4000").AutoFilter Field:=2 'per filtro 2

      non rimette tutti i filtri

      #53827 Score: 0 | Risposta

      alexps81
      Moderatore
        55 pts

        Di tutto quello che hai scritto in quella macro ti serve solo questo:

        Sub TogliFiltro3()
            ActiveSheet.Unprotect "123456"
            
            If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
            With Range("A1")
                .ClearContents
                .Select
            End With
            ActiveSheet.Protect "123456"
        End Sub
        #53829 Score: 0 | Risposta

        Grazie ancora alexps81, funziona

        Ora queste 2 nuove macro le devo inserire un' altro workbook con celle unite A1:B1 e mi dà errore qui

        If visibili = 0 Then
        MsgBox "Nessuna corrispondenza trovata per '" & c & "'.", vbExclamation, "AVVISO"
        Range("A1").ClearContents '<<<<<<<<<<<<<<<<
        ActiveSheet.AutoFilterMode = False
        End If
         

        e qui

         

        With Range("A1")
        .ClearContents '<<<<<<<<<<<<<<<
        .Select
        End With

        #53830 Score: 0 | Risposta

        alexps81
        Moderatore
          55 pts

          Ricorda però che il file che alleghi deve rispettare la stessa struttura di quello originale altrimenti non si finisce mai.

          Hao provato a scrivere:

          If visibili = 0 Then
          MsgBox "Nessuna corrispondenza trovata per '" & c & "'.", vbExclamation, "AVVISO"
          Range("A1:B1").ClearContents '<<<<<<<<<<<<<<<<
          ActiveSheet.AutoFilterMode = False
          End If

          e qui:

          With Range("A1:B1")
              .ClearContents '<<<<<<<<<<<<<<<
              .Select
          End With

          Ora scrivo da smartphone e non ho modo di verificare 

          #53831 Score: 0 | Risposta

          LukeReds
          Partecipante
            14 pts

            coao,

            per filtrare solo quanto contenuto in A1

            Sub Filtra()
            With Sheets("Articoli")
                .Unprotect Password:="123456"
                .Range("A2:D3000").AutoFilter Field:=1, Criteria1:="=" & .Range("A1")
                .Protect Password:="123456"
            End With
            End Sub

            #53832 Score: 0 | Risposta

            Alexps81 non vedo modifiche per le celle unite

            #53833 Score: 0 | Risposta

            Lukereds la tua macro funziona

            #53834 Score: 0 | Risposta

            LukeReds
            Partecipante
              14 pts

              bene, allora inserisco anche quella per togliere il filtro

              Sub TogliFiltro()
              With Sheets("Articoli")
                  .Unprotect Password:="123456"
                  .Range("A2:A3000").AutoFilter Field:=1
                  .Protect Password:="123456"
              End With
              End Sub

              #53835 Score: 0 | Risposta

              Lukereds anche la seconda macro funziona, solo un problema che toglie tutti i filtri presenti e lascia solo il filtro1.

              I filtri sono fino alla colonna D

              #53836 Score: 0 | Risposta

              LukeReds
              Partecipante
                14 pts

                non avevo fatto caso, allo a la riga

                 .Range("A2:A3000").AutoFilter Field:=1

                va sostituita con 

                .Range("A2:D3000").AutoFilter Field:=1

                E' possibile anche che il filtro parta in automatico appena cambi codice in A1

                #53838 Score: 0 | Risposta

                alexps81
                Moderatore
                  55 pts

                  Ciao Luke...solo per avvisarti che forse ti è rimasta una A in più nel filtro

                  LukeReds ha scritto:

                  .Range("A2:AD3000").AutoFilter Field:=1

                  #53839 Score: 0 | Risposta

                  LukeReds
                  Partecipante
                    14 pts

                    Ciao Alex grazie, ho corretto

                  Login Registrati
                  Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
                  Rispondi a: macro per filtrare
                  Gli allegati sono permessi solo ad utenti REGISTRATI
                  Le tue informazioni: