Ricerca date con formule in Agenda Digitale

di il
21 risposte

Ricerca date con formule in Agenda Digitale

Buongiorno a tutti, spero che qualcuno possa aiutarmi perchè sono circa 20 ore che
impazzisco per cercare una soluzione.
Ho creato una cartella di lavoro in cui, tramite formule, ho creato una vera e propria
agenda. Ho creato, in seconda istanza, una Userform che serve per facilitare l'inserimento
delle informazioni nell'agenda stessa. Chiaramente, per cercare la colonna esatta (in cui è
contenuto il giorno della settimana), per inserire l'informazione nel giorno desiderato,
utilizzo in vba il metodo .find. Il problema è che, visto che i numeri sono scaturiti
da formule, non trova la cella richiesta. Faccio un esempio:

Contenuto Cella A6 : ='Vista Annuale'!BX1-'Vista Annuale'!BX3+1 - Cioè la differenza
tra il valore contenuto nella cella BX1 e la cella BX3+1 contenute nel fogio 'Vista Annuale'

Contenuto Cella A7 : =A6+1 - Cioè il giorno della cella A6 + 1, cioè il giorno successivo
a quello della cella A6.

Come faccio a trovare con il metodo .find la cella A6 piuttosto che la cella A7?

Spero di essere stato chiaro.

21 Risposte

  • Re: Ricerca date con formule in Agenda Digitale

    Il metodo Range.Find prevede anche il parametro opzionale [LookIn]. Hai provato ad esplicitarlo a [xlValues]?
    La guida dice chiaramente che
    The settings for LookIn, LookAt, SearchOrder, and MatchByte are saved each time you use this method. If you don't specify values for these arguments the next time you call the method, the saved values are used.
    Quindi se hai già effettuato una ricerca diversa, da codice o manualmente, il valore di quel parametro si modifica e permane per le ricerche successive...
  • Re: Ricerca date con formule in Agenda Digitale

    Allora ho letto le proprietà di LookIn e non le conoscevo onestamente. Ti ringrazio per la dritta. Ma in ogni caso, provando non mi funziona lo stesso. Allego il codice, magari sbaglio qualcosa:

    Sub Pulsante2_Click()

    Dim rngTrovato As Range
    Dim rngArea As Range
    Dim Speriamochelotrova As String


    Set rngArea = Sheets("Gennaio").Range("A6:E23")
    Speriamochelotrova = Sheets("Gennaio").Range("G2").Value

    Set rngTrovato = rngArea.find(Speriamochelotrova, LookIn:=xlFormulas)
    rngTrovato.Select

    End Sub

    Dove nel foglio “Gennaio” nella cella G2 ho scritto una formula che è contenuta all’interno dell’area di ricerca.

    rngTrovato però, nonostante abbia inserito LookIn, mi risulta sempre Nothing e quindi non me lo seleziona!
    Cosa sbaglio?
  • Re: Ricerca date con formule in Agenda Digitale

    Assicurati che:
    1) La formula scritta in G2 sia esattamente uguale, compreso il simbolo [=] all'inizio
    --OPPURE--
    2) Specifica anche il parametro [LookAt:= xlPart]
  • Re: Ricerca date con formule in Agenda Digitale

    Salve a tutti
    
    Sub Pulsante2()
    
    Dim rngTrovato As Range
    Dim rngArea As Range
    Dim Speriamochelotrova As String
    
    
    Set rngArea = Sheets("Foglio1").Range("A6:E23")
    Speriamochelotrova = Sheets("Foglio1").Range("G2").Value
    
    Set rngTrovato = rngArea.Find(Val(Speriamochelotrova), LookIn:=xlFormulas)
    Stop
    rngTrovato.Select
    Stop
    Set rngTrovato = rngArea.Find(Val(Speriamochelotrova), LookIn:=xlValues)
    rngTrovato.Select
    End Sub
    
    Come puoi vedere ho "costruito" la tua idea ed ho apportato alcune modifiche.
    Primo: ho premesso la Funzione VAL a Speriamochelotrova per ottenere un valore
    Secondo: @Sgrubak (che saluto) ti aveva suggerito xlValues e non xlFormulas

    Prova e fai sapere.
    Ciao,
    Mario
  • Re: Ricerca date con formule in Agenda Digitale

    Adesso ci provo, ma in ogni caso, se io volessi cercare la risultante della formula, come faccio?
    Ad esempio se una formula mi fa uscire nella cella A7 il valore 28, però nella cella non è scritto esattamente”28” ma “=A6+1”, come si fa?
  • Re: Ricerca date con formule in Agenda Digitale

    Ciao
    Ragioniamo un attimo. Se nella cella c'è scritto =A6+1 il risultato è, comunque, un numero.
    La Funzione Find, per come è scritta, cerca quel numero ma come stringa, quindi prima modificalo in numero con la funz.VAL

    Ciao,
    Mario
  • Re: Ricerca date con formule in Agenda Digitale

    Andiamo con calma:
    Stai cercando una formula o un valore? A seconda del caso devi impostare il parametro LookIn:
    1)Se in G2 hai [CODE]'='Vista Annuale'!BX1-'Vista Annuale'!BX3+1 Bada che il primo apostrofo non è un refuso. Così facendo, nella cella vedi: ='Vista Annuale'!BX1-'Vista Annuale'!BX3+1 e non il risultato della formula Allora, specificando xlFormulas, ti trova A6.

    2) Se in G2 hai digitato [28] ed il risultato della formula in A7 è uguale a 28, allora ti trova A7 ammesso che sia la prima cella nel Range con quel valore.

    NOTA BENE: Se c'è prima un'altra cella che corrisponde al criterio (sia caso 1 che caso 2), restituisce quella. E per "prima" bisogna fare attenzione anche alla logica di ricerca ricerca e capire se avviene per righe o per colonne, ma questo si può specificare nel Find, valorizzando opportunamente il parametro [SearchOrder]
    [OT]
    Ciao Mario!
    [/OT]
  • Re: Ricerca date con formule in Agenda Digitale

    Allora innanzitutto grazie per le numerose risposte. Scrivendo il codice di Marius44, comincia a funzionare. Almeno riconosce la risultante della formula come metodo di ricerca, anche se c’è ancora un problema, avrei preferito allegarvi il file così che avreste potuto darci un occhio ma non ci riesco.

    In ogni caso...

    Il codice "incriminato è questo"
    Private Sub cmd_Inserisci_Click()
    
    If Me.cbo_Mese = "" Then
        MsgBox "Inserire Mese in cui prenotare il paziente", vbCritical, "Errore Irreversibile"
        Exit Sub
    Else
        If Me.cbo_Giorni = "" Then
         MsgBox "Inserire Giorno in cui prenotare il paziente", vbCritical, "Errore Irreversibile"
         Exit Sub
        End If
    End If
    
    Dim sh As Worksheet
    Dim rngTrovato As Range
    Dim rngArea As Range
    Dim Speriamochelotrova As String
    
    Set sh = ThisWorkbook.Worksheets(cbo_Mese.Value)
    Set rngArea = sh.Range("A6:G6")
    Speriamochelotrova = cbo_Giorni.Value
    
        Set rngTrovato = rngArea.find(Val(Speriamochelotrova), LookIn:=xlFormulas)
        Set rngTrovato = rngArea.find(Val(Speriamochelotrova), LookIn:=xlValues)
        rngTrovato.Select
        
    End Sub
    Tutto ciò che ho chiesto faceva parte di una prova che stavo effettuando ma in realtà a me servirebbe che, impostando nella Userform nella cbo_Mese e cbo_Giorno, mi si selezioni automaticamente nella cartella di lavoro in cui ci sono tanti fogli rinominati come mesi , la cella corrispondente nel foglio (cioè mese) e nel giorno indicato.
    Applicando questa prova solo al foglio di Gennaio e selezionando come intervallo di ricerca solo la prima riga ("A6:G6"), nel caso in cui inserissi il 27 (anche se so che si riferisce a dicembre, eventualmente utilizzerò in un secondo momento il FindNext impostandolo a dovere) correttamente seleziona il 27; anche per il 28, 29, 30 e 31 non ci sono problemi; il problema nasce quando seleziono nella cbo giorno 1 (e dovrebbe selezionarmi nel foglio F6) e mi seleziona il 31 (E6) mentre selezionando nella cbo il 2 (e dovrebbe selezionarmi nel foglio G6) mi seleziona il 28 (B6) e non so il perché!

    Spero di essere stato chiaro, allegando il file sarebbe stato più semplice da spiegare.
  • Re: Ricerca date con formule in Agenda Digitale

    Ciao
    Non mi è chiaro lo scenario.
    Nell'intervallo A6:G6 cosa ci sta? Il dato da cercare riviene da una ComboBox? oppure da due ComboBox (mese e giorno) combinate? Stai attento che tutto ciò che viene fuori da TextBox, ComboBox, ecc è "String". Tienilo presente.

    Ciao,
    Mario
  • Re: Ricerca date con formule in Agenda Digitale

    Si scusa allora nel Range A6:G6 ci sono le formule che permettono che il giorno cambi in base all’anno che si imposta, quindi, ad esempio, nella cella A6 di Gennaio 2022 ho Lunedì 27 Dicembre; giorno 1 è nella cella F6 (io vedo solo i numeri perché ho impostato il formato data “dd”). Cambiando anno, nella cella A6 di Gennaio 2023 mi trovo lunedì 26Dicembre 2023. È un calendario dinamico insomma.
    Nella UserForm ci sono 2 cbo; una cbo_Mesi in cui ci sono elencati i mesi, un’altra cbo_giorni in cui sono elencati i giorni! Selezionando da cbo_Mesi si seleziona in pratica il foglio quindi qualcosa tipo:
     Dim sh As Worksheet
    Set sh = ThisWorkbook.Worksheets(cbo_Mese.Value)
    Selezionando invece la cbo_giorni vorrei che mi selezionasse i giorni contenuti nel foglio “Mese” richiesto. Come dici te, la cbo mi rilascia una string, pertanto come faccio a fargli capire quale cella deve evidenziarmi visto che in quest’ultime ci sono delle formule?
    Provando quel codice che mi hai dato funziona in parte, quando provo a selezionare nella cbo giorno 1 Gennaio ad esempio (e dovrebbe selezionarmi nel foglio Gennaio F6), mi seleziona invece il 31 (E6) mentre selezionando nella cbo il 2 di Gennaio, (e dovrebbe selezionarmi nel foglio G6) mi seleziona il 28 (B6). Riscrivo qui come ho impostato il codice in quel benedetto cmd_Inserisci_Click
     Private Sub cmd_Inserisci_Click()
    
    If Me.cbo_Mese = "" Then
        MsgBox "Inserire Mese in cui prenotare il paziente", vbCritical, "Errore Irreversibile"
        Exit Sub
    Else
        If Me.cbo_Giorni = "" Then
         MsgBox "Inserire Giorno in cui prenotare il paziente", vbCritical, "Errore Irreversibile"
         Exit Sub
        End If
    End If
    
    Dim sh As Worksheet
    Dim rngTrovato As Range
    Dim rngArea As Range
    Dim Speriamochelotrova As String
    
    Set sh = ThisWorkbook.Worksheets(cbo_Mese.Value)
    Set rngArea = sh.Range("A6:G6")
    Speriamochelotrova = cbo_Giorni.Value
    
        Set rngTrovato = rngArea.find(Val(Speriamochelotrova), LookIn:=xlFormulas)
        Set rngTrovato = rngArea.find(Val(Speriamochelotrova), LookIn:=xlValues)
        rngTrovato.Select
        
    End Sub
    Spero adesso di essere stato esaustivo nella mia spiegazione!
  • Re: Ricerca date con formule in Agenda Digitale

    Ciao
    Supponendo che i Fogli abbiano il nome del mese e che in col.A di ogni Foglio ci siano i giorni, per selezionare la cella desiderata prova questa macro (ATTENTO: ho iniziato dalla riga 3 quindi ho aggiunto lo "scostamento")
    
    ....
    Sheets(cboMese.Value).Select
    rg = Val(cboGiorno) + 3
    Sheets(cboMese.Value).Range("A" & rg).Select
    ....
    
    Ciao,
    Mario
  • Re: Ricerca date con formule in Agenda Digitale

    Ma scusa, se nelle celle hai le date calcolate, crea la data nella Form e cerca quella tra i valori
    
    Set sh = ThisWorkbook.Worksheets(cbo_Mese.Value)
    Set rngArea = sh.Range("A:G")
    
    Dim dt as Date
    dt = DateValue(Me.cbo_Mese & "/" Me.cbo_Giorno & "2022")
    Set rngTrovato = rngArea.find(dt, LookIn:=xlValues)
    rngTrovato.Select
    Per forza il codice di prima non funzionava! Non troverà mai solo il giorno, dato che è un numero mentre nella cella c'è una data... Che tu veda solo le cifre del giorno, dipende dal formato. Ricorda che quel che vedi in una cella non necessariamente coincide con il valore che esse possiede, proprio per via della formattazione.

    Nel [rngArea] metti anche tutte le righe... A questo punto non serve controllare una riga per 7 colonne e basta...

    EDIT: Modificato [Set rngArea = sh.Range("A:G")] così da comprendere le colonne per intero
  • Re: Ricerca date con formule in Agenda Digitale

    Ciao
    @Sgrubak ha ragione!
    Io credevo che i "giorni" stessero in colonna A come numeri e non come data di cui si vede solo il giorno.

    Ciao,
    Mario
  • Re: Ricerca date con formule in Agenda Digitale

    Allora ragazzi, continuo a ringraziarvi per la pazienza e la disponibilità, ma ancora non ci siamo. L'osservazione di Sgrubak è corretta! è vero che nelle celle sono presenti dei numeri ma non sono tali, sono formato data, pertanto io nel metodo .find devo ricercare una data! Il codice scritto da lui però non era del tutto attinente con quello di cui ho bisogno. adesso vi allego delle immagini così che possa spiegarmi meglio...

    1. Immagine 1 l'Agenda con il mese di Gennaio 2022 Aperto (Da notare sotto tutti i mesi)
    2. Immagine 2 Userform che si autocompila quando la cbo_AppenaAccettati è popolata dai vari nomi. Le 2 Cbo in basso (Mesi
    & Giorni) sono quelle di cui vi parlavo. Io ho pensato che la cbo_Mesi vada a discriminare il foglio (Quindi
    ThisWorkbook.Worksheets(cbo_Mese.Value) ) quella del giorno la cella in cui è contenuta la data.
    3. Immagine 3 la prima cella del mese evidenziata così che si possa leggere la funzione all'interno (che fa riferimento ad un
    altro foglio "Vista Annuale". Le celle situate accanto, quelle in cui si legge 28 e 29 per intenderci, sono semplicemente un
    cella precedente +1.
    4. Immagine 4 Le celle del foglio "Vista Annuale" a cui fa riferimento la prima cella del mese di Gennaio.

    Ho provato ad adattare il codice che mi ha scritto Sgrubak ma il risultato è Nothing e quindi, chiaramente, non seleziona nulla.

    L'ho adattato così:
    Private Sub cmd_Inserisci_Click()
    
    If Me.cbo_Mese = "" Then
        MsgBox "Inserire Mese in cui prenotare il paziente", vbCritical, "Errore Irreversibile"
        Exit Sub
    Else
        If Me.cbo_Giorni = "" Then
         MsgBox "Inserire Giorno in cui prenotare il paziente", vbCritical, "Errore Irreversibile"
         Exit Sub
        End If
    End If
    
    Dim sh As Worksheet
    Dim rngArea As Range
    Dim dt As Date
    Dim rngTovato As Range
    
    Set sh = ThisWorkbook.Worksheets(cbo_Mese.Value)
    sh.Select
    Set rngArea = sh.Range("A:G")
    dt = DateValue(Me.cbo_Giorni)
    
        Set rngTrovato = rngArea.find(dt, LookIn:=xlValues)
        rngTrovato.Select
        
    End Sub
    così non trova nulla, se per caso inserissi
    dt = DateValue(Me.cbo_Giorni.value)
    Giustamente mi da errore tipo non corrispondente perchè la cbo, come abbiam detto prima, rilascia un valore String e non Date!

    Colgo l'occasione di ringraziarvi ancora per la cortesia, davvero!
    Allegati:
    30855_d7cc9ce6de78fcbc61291aaff0dd7cd1.jpg
    30855_d7cc9ce6de78fcbc61291aaff0dd7cd1.jpg

    30855_8bb58803b0d509dad3517e8c276b1141.jpg
    30855_8bb58803b0d509dad3517e8c276b1141.jpg

    30855_34cbf56ad6748135c658504ca2c0aada.jpg
    30855_34cbf56ad6748135c658504ca2c0aada.jpg

    30855_42898bbc09699052ddbebda6de74d270.jpg
    30855_42898bbc09699052ddbebda6de74d270.jpg
Devi accedere o registrarti per scrivere nel forum
21 risposte