Cerca e posiziona



  • Cerca e posiziona
    di Perry (utente non iscritto) data: 27/01/2014 15:22:55

    Salute a tutti
    Nel file allegato ho la necessità di cercare l' argomento attualmente in cella A753 (variabile) nella tabella sovrastante e di posizionarmi sulla riga trovata.
    Ora in cella B753 gira e funziona la formula SE+Cerca Verticale che mi ritorna "titolo non trovato" se questo non esiste o il titolo (se trovato) ma non si posiziona.
    Vorrei posizionarmi sulla riga trovata come con la macro associata al pulsante "Cerca Titolo" generata con il generatore di macro, ovviamente con i riferimenti alle celle variabili.
    Grazie 1k



  • di patel data: 27/01/2014 16:07:35

    modifica la formula in B753 in
    =SE(VAL.NON.DISP(CERCA.VERT(A753;Excel_Campi;2;FALSO)) = VERO; "Titolo non esiste"; CERCA.VERT(A753;Excel_Campi;2;FALSO) )
    e poi prova questa macro
     
    Sub Cerca_Titolo()
    Dim titolo
    titolo = Range("B753")
    Range("B:B").Find(titolo, after:=Range("B1")).Select
    End Sub






  • di Perry (utente non iscritto) data: 27/01/2014 17:05:10

    OK, ho notato che esegui la ricerca per uguale TESTO titolo togliendo l' aggiunta del (codice) che avevo incluso nel titolo risultante,
    se però aggiungo un riga alla tabella il Testo di ricerca non è più in "B753" (deve diventare una variabile tipo "Range("B" & Lr + 4 ") o sbaglio ?

    E volendo fare una ricerca per Codice valgono le stesse regole ?
    Grazie



  • di patel data: 27/01/2014 17:24:35

    cit.
    deve diventare una variabile tipo "Range("B" & Lr + 4 ")
    direi che va bene, basta provare

    ho provato a fare la ricerca sul Codice, ma non funziona, forse perché è dato da una formula, però tu hai partalo di titolo





  • di patel data: 27/01/2014 17:25:53

    non Range("B" & Lr + 4 ")
    ma
    Range("B" & Lr + 4)





  • di Perry (utente non iscritto) data: 27/01/2014 18:38:39

    Non riesco a referenziare Lr dato che ListRows deve appartenere alla tabella :

    Sub Cerca_Titolo()
    Dim titolo, Lr As Long
    Lr = .ListRows.Count <--- riferimento non valido o non qualificato
    titolo = Range("B" & Lr + 4)
    Range("B:B").Find(titolo, after:=Range("B1")).Select
    End Sub



  • di patel data: 27/01/2014 19:17:37

    non puoi scrivere .ListRows.Count senza un with





  • di Perry (utente non iscritto) data: 27/01/2014 20:47:29

    Dove la metto ?? potresti darmi la soluzione ?



  • di patel data: 27/01/2014 20:51:14

    basta che tu modifichi la sub per aggiungere una riga





  • di Perry (utente non iscritto) data: 28/01/2014 14:10:02

    Ci ho provato, ho copiato alcune parti della sub di aggiunta righe ma mi da errore, ecco il codice (mi illumini ? please):

    Sub Cerca_Titolo2()
    Dim Titolo, E_oTbl As ListObject, Lr As Long
    Set E_oTbl = ActiveSheet.ListObjects("Excel_Tab")

    Application.EnableEvents = False
    With E_oTbl
    Lr = .ListRows.Count
    Titolo = Range("B" & Lr + 4)
    Range("B:B").Find(Titolo, after:=Range("B1")).Select <-- errore
    End With

    Application.EnableEvents = True
    Set E_oTbl = Nothing
    End Sub



  • di patel data: 28/01/2014 15:49:49

    basta cambiare il 4 in 3 e funziona, non fai mai il debug con F8 ? alias run step by step ?





  • di perry (utente non iscritto) data: 28/01/2014 16:06:24

    Ho cambiato strategia, assegnando un nome (Excel_Titolo) alla cella di ricerca, ecco il codice più semplice e funzionante :
    Sub E_Cerca_Titolo()
    Dim E_Titolo
    E_Titolo = Range("Excel_Titolo")
    Range("B:B").Find(E_Titolo, after:=Range("B1")).Select
    End Sub

    ho anche assegnato ad un altro Bottone la sub per la ricerca nel testo del titolo:
    Sub E_Cerca_Testo()
    Dim E_Testo
    E_Testo = Range("Excel_Testo")
    Range("B:B").Find(E_Testo, after:=Range("B1")).Select
    Range("Excel_Testo") = "Inserisci qui il Testo"
    End Sub

    L' unica cosa che mi lascia perplesso è il Range("B:B") che avrei voluto limitare alle righe della Tabella Excel_Tab, ma che non so come fare.

    Comunque grazie 1k



  • di patel data: 28/01/2014 16:47:24

    prova con
     
    Range("B1:B" & LR + 1)






  • di Perry (utente non iscritto) data: 30/01/2014 16:00:39

    Come si fa ad impostare Lr (records della tabella Excel_tab) ?
    grazie 1k



  • di patel data: 30/01/2014 16:14:41

    me lo hai insegnato tu, sta nel codice che hai allegato sopra
     
    Set E_oTbl = ActiveSheet.ListObjects("Excel_Tab")
    With E_oTbl
    Lr = .ListRows.Count 
    end with






  • di Perry (utente non iscritto) data: 30/01/2014 17:13:15

    OK, ma come avrai capito non era farina del mio sacco !

    ho completato il codice ma mi segnala errore1004.:

    Sub E_Cerca_Titolo()
    Dim E_oTbl As ListObject, Titolo, Lr As Long
    Set E_oTbl = ActiveSheet.ListObjects("Excel_Tab")
    With E_oTbl
    Lr = .ListRows.Count
    End With
    Titolo = Range("Excel_Titolo")
    Range("B:B" & Lr + 1).Find(Titolo, after:=Range("B1")).Select
    <-- ERRORE metodo 'Range' dell' oggetto '_Global' non riuscito

    Set E_oTbl = Nothing
    End Sub



  • di patel data: 30/01/2014 17:30:53

    non capisco perché cambi sempre le carte in tavola
     
    Sub Cerca_Titolo()
    Dim Titolo, E_oTbl As ListObject, Lr As Long
    Set E_oTbl = ActiveSheet.ListObjects("Excel_Tab")
    With E_oTbl
      Lr = .ListRows.Count
      Titolo = Range("B" & Lr + 3)
      Range("B3:B" & Lr).Find(Titolo, after:=Range("B3")).Select
    End With
    Set E_oTbl = Nothing
    End Sub






  • di Perry (utente non iscritto) data: 31/01/2014 15:30:10

    Non sto cambiando le carte in tavola, ho solo voluto referenziare con NOME il titolo da cercare per non correre il rischio che aggiungendo righe al di fuori della tabella non valesse più la regola : Titolo = Range("B" & Lr + 3)
    Inserisco il codice definitivo. e ringrazio per la pazienza e cortesia.

    Sub E_Cerca_Titolo()
    Dim Titolo, E_oTbl As ListObject, Lr As Long
    Set E_oTbl = ActiveSheet.ListObjects("Excel_Tab")
    Titolo = Range("Excel_Titolo")

    With E_oTbl
    Lr = .ListRows.Count
    Range("B1:B" & Lr).Find(Titolo, after:=Range("B1")).Select
    End With

    Set E_oTbl = Nothing
    End Sub