Ricerca data compleanno da elenco



  • Ricerca data compleanno da elenco
    di Pascà60 (utente non iscritto) data: 13/02/2015 10:12:49

    Buon giorno a tutti. Premetto che non conosco il linguaggio VBA e quando mi serve una piccola macro la creo con il registratore di Excel 2010, vengo a dirvi subito il mio problema.
    Ho un lungo elenco di nominativi con le date di nascita di ognuno. Poiché ho necessità di sapere chi alla data odierna compie gli anni, ho inserito, sul secondo foglio del file, la funzione CERCA.VERT per tale ricerca. Il problema, che non so risolvere, nasce quando in una data ci sono più persone che fanno il compleanno. La funzione mi riporta sempre il primo nominativo trovato. Come fare per evidenziare il 2°, il 3°, ecc.… Allego un file con un elenco ridotto, dove si capisce meglio ciò che volevo ottenere.
    P.S.: L’elenco varia periodicamente, per l’aggiunta di nuove persone o per l’eliminazione di nominativi che vanno via o che non interessano più.
    Grazie a tutti per l’aiuto che vorrete darmi. Pascà60.



  • di Lucas87 data: 13/02/2015 10:45:12

    Ciao
    Da mettere in ThisWorkbook (Questa_cartella_di_lavoro)

     
    Private Sub Workbook_Open()
    Set fin = Sheets(1).Columns(6).Find(what:=Date)
    If Not fin Is Nothing Then
        firstaddress = fin.Address
        r = 2
        Do
            Sheets(2).Cells(r, 1) = fin.Offset(0, -4)
            Sheets(2).Cells(r, 2) = fin.Offset(0, -3)
            Sheets(2).Cells(r, 3) = fin.Offset(0, -2)
            Sheets(2).Cells(r, 4) = fin.Offset(0, 1)
            r = r + 1
            Set fin = Sheets(1).Columns(6).FindNext(fin)
        Loop While Not fin Is Nothing And fin.Address <> firstaddress
        Sheets(2).Select
    End If
    End Sub
    



  • di Pascà60 (utente non iscritto) data: 13/02/2015 12:00:34

    Salve Lucas87, ho fatto come hai scritto. All'inizio sembra che funziona, ma poi ho provato a cancellare dall'elenco un nominativo tra quelli che oggi facevano il compleanno, ho salvato il file, l'ho chiuso e poi riaperto ed ho visto che il nominativo cancellato era ancora presente sul 2° foglio.
    Il mio elenco, come ho scritto, varia periodicamente.
    C'è qualcosa che non va?
    Grazie e saluti. Pascà60



  • di Lucas87 data: 13/02/2015 13:00:59

    Aggiungi questo come prima riga
     
    Sheets(2).Range("a2:d:" & Rows.Count).ClearContents
    



  • di Textomb data: 13/02/2015 13:29:26

    se vuoi lo puoi fare anche senza macro.
    rispetto al tuo file inserisci il serpentone e confermi con ctrl-shift-invio
    Allego il tuo file con la formula inserita.
    =SE.ERRORE(INDICE(Foglio1!$B$2:$G$17;PICCOLO(SE(GIORNO(OGGI())&"/"&MESE(OGGI())=GIORNO(Foglio1!$E$2:$E$17)&"/"&MESE(Foglio1!$E$2:$E$17);RIF.RIGA(Foglio1!$C$2:$C$17)-RIF.RIGA(Foglio1!$C$1));RIGHE(Foglio1!$A$1:A1));CONFRONTA(H$2;Foglio1!$B$1:$G$1;0));"")
    ciao



  • di Pascà60 (utente non iscritto) data: 13/02/2015 15:23:08

    Salve ragazzi, ho provato la soluzione di Lucas87, inserendo il codice che mi hai scritto alla prima riga, al riavvio del file mi da: “Errore di compilazione: Non valido all’esterno di una routine”.
    Pensando di aver capito male, l’ho poi inserito alla prima riga, ma dopo Private Sub Workbook_Open() ed al riavvio del file mi da: “Errore di run-time “1004”: Errore definito dall’applicazione o dall’oggetto”. Cliccando su debug vedo evidenziata la riga inserita.
    La soluzione di textomb sembra invece più alla mia portata. Ho scaricato il file e sembra funzionare. Ora mi studio il "serpentone” che mi ha scritto per cercare di capire come funziona.
    Saluti. Pascà60



  • di scossa data: 13/02/2015 15:29:03

    Ciao,

    ho qualche dubbio sulla formula di textomb perché il file che ha allegato Pascà è in formato .xls, quindi eXcel 2003 che non dispone della funzione SE.ERRORE().

    Comunque, la mia proposta:

    selezionare le celle A2:A7 del Foglio2 ed inserire questa formula:
    =SOSTITUISCI(INDICE(Foglio1!B$1:B$100;GRANDE(--(OGGI()=Foglio1!$F$2:$F$100)*RIF.RIGA($F$2:$F$100);RIF.RIGA(B1:B6)));Foglio1!B$1;"")
    matriciale da confermare con ctrl+maiusc+invio
    quindi trascinarla fino alla colonna C

    selezionare le celle D2:D7 del Foglio2 ed inserire questa formula:
    =TESTO(SOSTITUISCI(INDICE(Foglio1!G$1:G$100;GRANDE(--(OGGI()=Foglio1!$F$2:$F$100)*RIF.RIGA($F$2:$F$100);RIF.RIGA(E1:E6)));Foglio1!G$1;"");"#")
    sempre matriciale da confermare con ctrl+maiusc+invio.



    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)



  • di Vecchio Frac data: 13/02/2015 15:40:04

    cit. "Salve ragazzi, ho provato la soluzione di Lucas87, inserendo il codice che mi hai scritto alla prima riga, al riavvio del file mi da: “Errore di compilazione: Non valido all’esterno di una routine”.
    Pensando di aver capito male, l’ho poi inserito alla prima riga, "
    ---> Esatto. La "prima riga" di Lucas era riferita alla prima riga eseguibile della subroutine, dopo la sua firma. A volte (io sono il primo!!) diamo per scontate cose che in realtà non devono esserlo.

    E purtroppo si aggiunge a questo malinteso che il codice di Lucas presenta un piccolo errore di sintassi (ci sono due punti di troppo nella definizione del range), e va corretto così.

     
    Sheets(2).Range("a2:d" & Rows.Count).ClearContents
    






  • di Pscà60 (utente non iscritto) data: 13/02/2015 16:01:07

    Salve ragazzi, grazie per l'aiuto.
    Ora sto lasciando l'ufficio. Mi studio le soluzioni di Textomb e di Scossa a casa nel fine settimana.
    Buon giornata a tutti. Pascà60



  • di Pascà60 (utente non iscritto) data: 16/02/2015 11:40:44

    Salve, ragazzi. Ho provate le soluzioni che mi avete proposto e funzionano tutte e tre.
    Credo che adotterò quella di scossa, che mi sembra la più semplice.
    Grazie a tutti per l'aiuto.
    Pascà60.