Risultati da 1 a 25 di 25

Discussione: maschera in apertura



  1. #1
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    maschera in apertura

    salve a tutti,

    chiedo il vostro aiuto in merito ad un file che ho creato. Nulla di particolare, un semplicissimo file con il nome e la data di nascita.
    Accanto ho inserito la formula data.diff per il calcolo degli anni.

    Io, volevo realizzare una maschera in apertura al file excel che mi dica il nome della persona e gli anni che compie. La schematizzo sotto:

    apertura del file excel e in contemporanea si avvia questa finestra indicandomi i seguenti dati:

    Oggi è il compleanno di TIZIO 30 anni
    Domani è il compleanno di CAIO 25 anni
    tra 3 giorni è il compleanno di SEMPRONIO 20 anni.

    potete aiutarmi in merito?

    grazie anticipatamente

  2. #2

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: maschera in apertura

    Ciao,
    se ho capito bene vuoi una cosa così:

    Codice: 
    Private Sub Workbook_Open()
    Dim testo As String, data As String, nascita As Date, y As Integer
    nascita = CDate(Range("B2"))
    y = DateDiff("yyyy", nascita, Date)
        nome = Range("A2").Text
        Select Case Left(CDate(Range("B2")), 2) - Left(Now(), 2)
        Case Is < 0
        data = " ha già festeggiato il compleanno! Ha compiuto " & y & " anni!" & vbCrLf & "Scommetto che ti sei dimenticato di fare il regalo!!!"
        Case Is = 0
        data = "oggi!" & vbCrLf & " Compie " & y & " anni!"
        Case Is = 1
            data = " fa il compleanno domani!" & vbCrLf & "Compie " & y & " anni!"
       Case Is = 2
            data = " fa il compleanno dopodomani! " & vbCrLf & "Compie " & y & " anni!"
        Case Is = 3
            data = " fa il compleanno tra tre giorni! " & vbCrLf & "Compie " & y & " anni!"
        Case Is >= 4
            data = " fa il compleanno tra un po' e compie " & y & " anni! " & vbCrLf & "Hai pensato al regalo?"
        End Select
        MsgBox nome & " " & data, vbInformation, "PROMEMORIA!"
    End Sub
    File Allegati File Allegati
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  3. I seguenti utenti hanno dato un "Like"


  4. #3
    L'avatar di Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1125

    Re: maschera in apertura

    Ciao a tutti
    Anche se questa è la sezione VBA mi sono divertito lo stesso con le formule, perchè in molti casi le formule si possono sostituire ai codici.

    Ovviamente un approccio diverso ma comunque posso estrarre una lista di persone che fanno il compleanno oggi, domani e tra tre giorni con l'età corrispondente

    ipotizzando che nella colonna A:A ho tutte le date di nascita
    e nella colonna B:B ho i nomi corrispondenti, facendo le seguenti formule ottengo le liste delle persone che fanno il compleanno oggi, domani e tra tre giorn

    Oggi
    =SE.ERRORE(INDICE($B$2:$B$23;AGGREGA(15;6;(RIF.RIGA($A$2:$A$23)-RIF.RIGA($A$2)+1)/(GIORNO($A$2:$A$23)&"/"&MESE($A$2:$A$23)=GIORNO(OGGI())&"/"&MESE(OGGI()));RIGHE($E$2:E2)));"")

    Anni
    =SE.ERRORE(INDICE($C$2:$C$23;AGGREGA(15;6;(RIF.RIGA($B$2:$B$23)-RIF.RIGA($B$2)+1)/(($B$2:$B$23=E2)*(GIORNO($A$2:$A$23)&"/"&MESE($A$2:$A$23)=GIORNO(OGGI())&"/"&MESE(OGGI())));CONTA.SE($E$2:E2;E2)));"")

    e visto che è notte fonda buona notte a tutti
    File Allegati File Allegati
    Ultima modifica fatta da:Gerardo Zuccalà; 22/04/16 alle 03:31

  5. I seguenti utenti hanno dato un "Like"


  6. #4
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    Re: maschera in apertura

    Grazie mille per l'aiuto era proprio quello che cercavo. Ho provato a smanettare un pò solo che non riesco ad imparare il codice e amodificare i range. Mi spiego meglio, ho quattro colonne e 148 righe

    A B C D
    titolo nome cognome data di nascita

    il codice all'apertura deve selezionare titolo nome cognome e gli anni che compie solo che se selezioni il range, provando sul file che hai fatto, A2:A3 B2:B3 mi da errore.

  7. #5
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    Re: maschera in apertura

    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Ciao,
    se ho capito bene vuoi una cosa così:

    Codice: 
    Private Sub Workbook_Open()
    Dim testo As String, data As String, nascita As Date, y As Integer
    nascita = CDate(Range("B2"))
    y = DateDiff("yyyy", nascita, Date)
        nome = Range("A2").Text
        Select Case Left(CDate(Range("B2")), 2) - Left(Now(), 2)
        Case Is < 0
        data = " ha già festeggiato il compleanno! Ha compiuto " & y & " anni!" & vbCrLf & "Scommetto che ti sei dimenticato di fare il regalo!!!"
        Case Is = 0
        data = "oggi!" & vbCrLf & " Compie " & y & " anni!"
        Case Is = 1
            data = " fa il compleanno domani!" & vbCrLf & "Compie " & y & " anni!"
       Case Is = 2
            data = " fa il compleanno dopodomani! " & vbCrLf & "Compie " & y & " anni!"
        Case Is = 3
            data = " fa il compleanno tra tre giorni! " & vbCrLf & "Compie " & y & " anni!"
        Case Is >= 4
            data = " fa il compleanno tra un po' e compie " & y & " anni! " & vbCrLf & "Hai pensato al regalo?"
        End Select
        MsgBox nome & " " & data, vbInformation, "PROMEMORIA!"
    End Sub



    Grazie mille per l'aiuto era proprio quello che cercavo. Ho provato a smanettare un pò solo che non riesco ad imparare il codice e amodificare i range. Mi spiego meglio, ho quattro colonne e 148 righe


    A B C D
    titolo nome cognome data di nascita

    il codice all'apertura deve selezionare titolo nome cognome e gli anni che compie solo che se selezioni il range, provando sul file che hai fatto, A2:A3 B2:B3 mi da errore.

  8. #6

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: maschera in apertura

    Ciao Matteo,
    per evitare equivoci e fare il lavoro per nulla, ti chiedo se puoi allegare un file con solo qualche riga come esempio e nomi di fantasia.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  9. #7
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    Re: maschera in apertura

    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Ciao Matteo,
    per evitare equivoci e fare il lavoro per nulla, ti chiedo se puoi allegare un file con solo qualche riga come esempio e nomi di fantasia.

    ecco qui. Scusate se creo fastidio ma mi piacerebbe capire il funzionamento in modo tale da poter imparare nuove cose
    File Allegati File Allegati

  10. #8
    L'avatar di Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1125

    Re: maschera in apertura

    Ciao Matteo,
    intanto complimenti a ges per la sua soluzione in VBA, ma come tu ben sai con excel le soluzioni sono sempre più di una, in alternativa con le formule, che comunque potrebbe andare bene

    =SE.ERRORE(INDICE(A$1:A$4;AGGREGA(15;6;(RIF.RIGA($D$1:$D$4)-RIF.RIGA($D$1)+1)/(DATA(1900;MESE($D$1:$D$4);GIORNO($D$1:$D$4))=DATA(1900;MESE(OGGI());GIORNO(OGGI())));RIGHE($F$2:F2)));"")

    @Matteo tu scrivi:
    mi piacerebbe capire il funzionamento in modo tale da poter imparare nuove cose
    , mi fa piacere che vuoi imparare qualcosa anzichè chiedere semplicemente il pacchetto "chiavi in mano", tuttavia entrambi le soluzioni mie e di ges sono di un livello avanzato che richiede una conoscenza base, quindi ti consiglio di imparare step by step iniziando da qualcosa più semplice
    File Allegati File Allegati

  11. #9
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    Re: maschera in apertura

    Citazione Originariamente Scritto da Gerardo Zuccalà Visualizza Messaggio
    Ciao Matteo,
    intanto complimenti a ges per la sua soluzione in VBA, ma come tu ben sai con excel le soluzioni sono sempre più di una, in alternativa con le formule, che comunque potrebbe andare bene

    =SE.ERRORE(INDICE(A$1:A$4;AGGREGA(15;6;(RIF.RIGA($D$1:$D$4)-RIF.RIGA($D$1)+1)/(DATA(1900;MESE($D$1:$D$4);GIORNO($D$1:$D$4))=DATA(1900;MESE(OGGI());GIORNO(OGGI())));RIGHE($F$2:F2)));"")

    @Matteo tu scrivi:
    , mi fa piacere che vuoi imparare qualcosa anzichè chiedere semplicemente il pacchetto "chiavi in mano", tuttavia entrambi le soluzioni mie e di ges sono di un livello avanzato che richiede una conoscenza base, quindi ti consiglio di imparare step by step iniziando da qualcosa più semplice
    Grazie Gerardo, gentilissimo. Ho apprezzato anche il tuo aiuto e sto cercando di adattarlo in maniera diversa cercando di capire il funzionamento

  12. #10
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    Re: maschera in apertura

    Citazione Originariamente Scritto da Gerardo Zuccalà Visualizza Messaggio
    Ciao Matteo,
    intanto complimenti a ges per la sua soluzione in VBA, ma come tu ben sai con excel le soluzioni sono sempre più di una, in alternativa con le formule, che comunque potrebbe andare bene

    =SE.ERRORE(INDICE(A$1:A$4;AGGREGA(15;6;(RIF.RIGA($D$1:$D$4)-RIF.RIGA($D$1)+1)/(DATA(1900;MESE($D$1:$D$4);GIORNO($D$1:$D$4))=DATA(1900;MESE(OGGI());GIORNO(OGGI())));RIGHE($F$2:F2)));"")

    @Matteo tu scrivi:
    , mi fa piacere che vuoi imparare qualcosa anzichè chiedere semplicemente il pacchetto "chiavi in mano", tuttavia entrambi le soluzioni mie e di ges sono di un livello avanzato che richiede una conoscenza base, quindi ti consiglio di imparare step by step iniziando da qualcosa più semplice

    Gerlando, perdonami. Ho prelevato il tuo ultimo file ed ho notato che accanto al nome nella tabella oggi e domani appare la data di nascita e non l'età. Ho provato a modificare la formula con quella che hai inserito nel precedente file ma non mi appare nulla. dove sbaglio??

  13. #11
    L'avatar di Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1125

    Re: maschera in apertura

    opss!
    Sfruttando la formula esistente, metti nella cella I2 questa formula e copiala in basso
    vedi modifiche in rosso:

    =SE.ERRORE(INT(FRAZIONE.ANNO(INDICE(D$1:D$4;AGGREGA(15;6;(RIF.RIGA($D$1:$D$4)-RIF.RIGA($D$1)+1)/(DATA(1900;MESE($D$1:$D$4);GIORNO($D$1:$D$4))=DATA(1900;MESE(OGGI());GIORNO(OGGI())));RIGHE($F$2:I2)));OGGI()));"")

    Attenzione sicuramente dovrai modificare il formato della cella in "formato generale"

  14. I seguenti 2 utenti hanno dato un "Like" a Gerardo Zuccalà per questo post:


  15. #12

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: maschera in apertura

    Ciao a tutti,
    complimenti a Gerardo per le formule, ma mi sembra giusto concludere il discorso con il VBA, come da ultima richiesta.

    Riporto di seguito il codice
    Codice: 
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim testo As String, data As String, nascita As Date, y As Integer, i as Integer
        For i = 1 To 6
            If Not Intersect(Target, Range("A" & i)) Is Nothing Then
                nascita = CDate(Range("D" & i))
                y = DateDiff("yyyy", nascita, Date)
                nome = Range("B" & i) & " " & Range("C" & i)
                Select Case Left(CDate(Range("D" & i)), 2) - Left(Now(), 2)
                Case Is < 0
                    data = " ha già festeggiato il compleanno! Ha compiuto " & y & " anni!" & vbCrLf & "Scommetto che ti sei dimenticato di fare il regalo!!!"
                Case Is = 0
                    data = "festeggia il compleanno oggi!" & vbCrLf & " Compie " & y & " anni!"
                Case Is = 1
                    data = " fa il compleanno domani!" & vbCrLf & "Compie " & y & " anni!"
                Case Is = 2
                    data = " fa il compleanno dopodomani! " & vbCrLf & "Compie " & y & " anni!"
                Case Is = 3
                    data = " fa il compleanno tra tre giorni! " & vbCrLf & "Compie " & y & " anni!"
                Case Is >= 4
                    data = " fa il compleanno tra un po' e compie " & y & " anni! " & vbCrLf & "Hai pensato al regalo?"
                End Select
                MsgBox nome & " " & data
            End If
        Next
    End Sub
    Per attivare l'evento, basta selezionare il titolo (sig. , dott., prof., ecc.) nella colonna A.

    Matteo, ho previsto solo sei nominativi, se vuoi completare la tua lista con n nominativi - rimanendo invariata la struttura del foglio - basta solo che cambi il numero finale (in rosso) della seguente istruzione, che corrisponde alla riga:
    Codice: 
    For i = 1 To 6
    Allego il file.
    File Allegati File Allegati
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  16. #13
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    Re: maschera in apertura

    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Ciao a tutti,
    complimenti a Gerardo per le formule, ma mi sembra giusto concludere il discorso con il VBA, come da ultima richiesta.

    Riporto di seguito il codice
    Codice: 
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim testo As String, data As String, nascita As Date, y As Integer, i as Integer
        For i = 1 To 6
            If Not Intersect(Target, Range("A" & i)) Is Nothing Then
                nascita = CDate(Range("D" & i))
                y = DateDiff("yyyy", nascita, Date)
                nome = Range("B" & i) & " " & Range("C" & i)
                Select Case Left(CDate(Range("D" & i)), 2) - Left(Now(), 2)
                Case Is < 0
                    data = " ha già festeggiato il compleanno! Ha compiuto " & y & " anni!" & vbCrLf & "Scommetto che ti sei dimenticato di fare il regalo!!!"
                Case Is = 0
                    data = "festeggia il compleanno oggi!" & vbCrLf & " Compie " & y & " anni!"
                Case Is = 1
                    data = " fa il compleanno domani!" & vbCrLf & "Compie " & y & " anni!"
                Case Is = 2
                    data = " fa il compleanno dopodomani! " & vbCrLf & "Compie " & y & " anni!"
                Case Is = 3
                    data = " fa il compleanno tra tre giorni! " & vbCrLf & "Compie " & y & " anni!"
                Case Is >= 4
                    data = " fa il compleanno tra un po' e compie " & y & " anni! " & vbCrLf & "Hai pensato al regalo?"
                End Select
                MsgBox nome & " " & data
            End If
        Next
    End Sub
    Per attivare l'evento, basta selezionare il titolo (sig. , dott., prof., ecc.) nella colonna A.

    Matteo, ho previsto solo sei nominativi, se vuoi completare la tua lista con n nominativi - rimanendo invariata la struttura del foglio - basta solo che cambi il numero finale (in rosso) della seguente istruzione, che corrisponde alla riga:
    Codice: 
    For i = 1 To 6
    Allego il file.
    perdonami ges, invece di cliccare non si può attivare automaticamente la finestra all'apertura del file facendo comparire nella stessa i dati di oggi e domani?

  17. #14

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: maschera in apertura

    Citazione Originariamente Scritto da MatteoG Visualizza Messaggio
    perdonami ges, invece di cliccare non si può attivare automaticamente la finestra all'apertura del file facendo comparire nella stessa i dati di oggi e domani?
    Si può anche fare come dici ma mi sono attenuto alla tua richiesta:

    Citazione Originariamente Scritto da MatteoG Visualizza Messaggio
    .....
    il codice all'apertura deve selezionare titolo nome cognome e gli anni che compie "solo che se selezioni il range"......
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  18. #15
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    Re: maschera in apertura

    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Si può anche fare come dici ma mi sono attenuto alla tua richiesta:
    scusa, mi sono espresso male. Hai ragione, intendevo dire quanto scritto nell'ultimo post.
    avvio automatico all'apertura del file e visualizzazione dei dati di oggi e domani.

    ciò che avevo scritto in quel post era riferito al fatto che provavo a modificare la stringa ma mi dava errore.
    scusatemi.

  19. #16

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: maschera in apertura

    Nessun problema rimedio subito.

    Codice: 
    Private Sub Workbook_Open()
        Dim testo As String, data As String, nascita As Date, y As Integer, i As Integer, Z as Integer
        For i = 1 To 6
            If Left(CDate(Range("D" & i)), 2) - Left(Now(), 2) = 1 Then
                nascita = CDate(Range("D" & i))
                Z = DateDiff("yyyy", nascita, Date)
                nome1 = Range("B" & i) & " " & Range("C" & i)
                data1 = " fa il compleanno domani!" & vbCrLf & "Compie " & Z & " anni!"
            End If
        Next
        For y = 1 To 6
            If Left(CDate(Range("D" & y)), 2) - Left(Now(), 2) = 2 Then
                nascita = CDate(Range("D" & y))
                Z = DateDiff("yyyy", nascita, Date)
                nome2 = Range("B" & y) & " " & Range("C" & y)
                data2 = " fa il compleanno dopodomani! " & vbCrLf & "Compie " & Z & " anni!"
            End If
        Next
        MsgBox nome1 & " " & data1 & vbCrLf & " " & vbCrLf & nome2 & " " & data2, vbInformation, "PROMEMORIA!"
    End Sub
    File Allegati File Allegati
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  20. #17
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    Re: maschera in apertura

    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Nessun problema rimedio subito.

    Codice: 
    Private Sub Workbook_Open()
        Dim testo As String, data As String, nascita As Date, y As Integer, i As Integer, Z as Integer
        For i = 1 To 6
            If Left(CDate(Range("D" & i)), 2) - Left(Now(), 2) = 1 Then
                nascita = CDate(Range("D" & i))
                Z = DateDiff("yyyy", nascita, Date)
                nome1 = Range("B" & i) & " " & Range("C" & i)
                data1 = " fa il compleanno domani!" & vbCrLf & "Compie " & Z & " anni!"
            End If
        Next
        For y = 1 To 6
            If Left(CDate(Range("D" & y)), 2) - Left(Now(), 2) = 2 Then
                nascita = CDate(Range("D" & y))
                Z = DateDiff("yyyy", nascita, Date)
                nome2 = Range("B" & y) & " " & Range("C" & y)
                data2 = " fa il compleanno dopodomani! " & vbCrLf & "Compie " & Z & " anni!"
            End If
        Next
        MsgBox nome1 & " " & data1 & vbCrLf & " " & vbCrLf & nome2 & " " & data2, vbInformation, "PROMEMORIA!"
    End Sub

    Grazie ges. Con questo codice che mi hai inserito ho capito che la stringa vbCrLf serve per andare a capo. Smanettando ho modificato qualcosa mettendo gli avvisi in maniera diversa.
    Non mi è ancora chiaro come far apparire più nomi. Mi spiego meglio se metto più nomi con la stessa data ne appare uno solo:
    Maria 24/4/60
    marco 24/4/80
    tizio 24/4/63
    ne appare solo uno invece di tutti e tre.
    Stessa cosa per quelli di dopodomani. Ho provato a replicare il codice ma non accade nulla, ho provato a mettere For i 1 to 7/8/10 ma nulla, ho replicato il codice mettendo for k 1 to 8 ma nulla.

    If Left(CDate(Range("D" & i)), 2) - Left(Now(), 2) = 1 Then
    il numero dopo = cosa rappresenta?

    ti allego quello che ho modificato e quello che ho capito.
    File Allegati File Allegati

  21. #18

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: maschera in apertura

    Ciao Matteo,
    vista la tua ultima richiesta cambio impostazione (e con l'occasione uso un altro ciclo -> For each ... next - così ne impari un altro :90:)
    Ho usato due volte vbCr per avere più spazio tra le diverse frasi.
    Nel foglio ho usato la formattazione condizionale per colorare chi fa il compleanno con colori diversi in base alla distanza in giorni.
    Codice: 
    Private Sub Workbook_Open()
    Dim messaggio As String, Z As Integer, criterio As Integer
    Dim cella As Object, giorno As String, intervallo As Range
    Set intervallo = Range("A1:A10")
    For Each cella In intervallo
        nascita = CDate(cella.Offset(0, 3))
        Z = DateDiff("yyyy", nascita, Date)
        criterio = Left(nascita, 2) - Left(Now(), 2)
        If criterio = 1 Then
            giorno = "DOMANI"
        ElseIf criterio = 2 Then
            giorno = "DOPODOMANI"
        ElseIf criterio = 3 Then
            giorno = "TRA TRE GIORNI"
        End If
        If criterio = 1 Or criterio = 2 Or criterio = 3 Then
            messaggio = messaggio & cella & " " & cella.Offset(0, 1) & " " & cella.Offset(0, 2) & " " & giorno & " compie " & Z & " anni" & vbCr & vbCr
        End If
    Next
    MsgBox messaggio
    End Sub
    File Allegati File Allegati
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  22. I seguenti utenti hanno dato un "Like"


  23. #19
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    Re: maschera in apertura

    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Ciao Matteo,
    vista la tua ultima richiesta cambio impostazione (e con l'occasione uso un altro ciclo -> For each ... next - così ne impari un altro :90:)
    Ho usato due volte vbCr per avere più spazio tra le diverse frasi.
    Nel foglio ho usato la formattazione condizionale per colorare chi fa il compleanno con colori diversi in base alla distanza in giorni.
    Codice: 
    Private Sub Workbook_Open()
    Dim messaggio As String, Z As Integer, criterio As Integer
    Dim cella As Object, giorno As String, intervallo As Range
    Set intervallo = Range("A1:A10")
    For Each cella In intervallo
        nascita = CDate(cella.Offset(0, 3))
        Z = DateDiff("yyyy", nascita, Date)
        criterio = Left(nascita, 2) - Left(Now(), 2)
        If criterio = 1 Then
            giorno = "DOMANI"
        ElseIf criterio = 2 Then
            giorno = "DOPODOMANI"
        ElseIf criterio = 3 Then
            giorno = "TRA TRE GIORNI"
        End If
        If criterio = 1 Or criterio = 2 Or criterio = 3 Then
            messaggio = messaggio & cella & " " & cella.Offset(0, 1) & " " & cella.Offset(0, 2) & " " & giorno & " compie " & Z & " anni" & vbCr & vbCr
        End If
    Next
    MsgBox messaggio
    End Sub
    Grazie!

    su questo sto perdendo più tempo. Diciamo che mi sono perso un pò :).

    ammetto di essere una rottura di scatole e forse di abusare della tua e della vostra pazienza. T indico una rettifica:
    • apertura del file
    • appare l'avviso



    DOMANI
    sig. tizio caio compie xx anni
    sig.ra maria rossi compie xx anni
    dott mario bianchi compie xx anni

    DOPODOMANI
    xxx xxx xxxx compie yy anni
    xxx xxx xxxx compie yy anni
    xxx xxx xxxx compie yy anni

    in pratica tutti quelli che festeggiano il compleanno lo stesso giorno vanno sotto la scritta "domani" stessa cosa per quelli di "dopodomani".

    smanetto un pò per cercare di capire il funzionamento.

  24. #20

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: maschera in apertura

    Citazione Originariamente Scritto da MatteoG Visualizza Messaggio
    Grazie!

    ....
    ... T indico una rettifica:
    • apertura del file
    • appare l'avviso



    DOMANI
    sig. tizio caio compie xx anni
    sig.ra maria rossi compie xx anni
    dott mario bianchi compie xx anni

    DOPODOMANI
    xxx xxx xxxx compie yy anni
    xxx xxx xxxx compie yy anni
    xxx xxx xxxx compie yy anni

    in pratica tutti quelli che festeggiano il compleanno lo stesso giorno vanno sotto la scritta "domani" stessa cosa per quelli di "dopodomani".

    smanetto un pò per cercare di capire il funzionamento.
    Ok, modifico secondo la tua ultima richiesta.
    Comunque se hai capito come funziona il codice puoi ottenere tutte le condizioni che vuoi modificando solo le istruzioni presenti.
    Codice: 
    Option Explicit
    Private Sub Workbook_Open()
     Dim messaggio1 As String, messaggio2 As String, criterio As Integer
     Dim cella As Object, z As Integer, nascita As Date, intervallo As Range
     Set intervallo = Range("A1:A10")
        For Each cella In intervallo
            nascita = CDate(cella.Offset(0, 3))
            z = DateDiff("yyyy", nascita, Date)
            criterio = Left(nascita, 2) - Left(Now(), 2)
            If criterio = 1 Then
                messaggio1 = messaggio1 & cella & " " & cella.Offset(0, 1) & " " & cella.Offset(0, 2) & " " & " compie " & z & " anni" & vbCr
            End If
            If criterio = 2 Then
                messaggio2 = messaggio2 & cella & " " & cella.Offset(0, 1) & " " & cella.Offset(0, 2) & " " & " compie " & z & " anni" & vbCr
            End If
        Next
        MsgBox "DOMANI" & vbCr & messaggio1 & vbCr & vbCr & "DOPODOMANI" & vbCr & messaggio2, vbInformation, "PROMEMORIA"
    End Sub
    Edit: Ho messo in testa alla routine Option Explicit che mi obbliga a dichiarare correttamente tutte le variabili!
    File Allegati File Allegati
    Ultima modifica fatta da:ges; 24/04/16 alle 00:49
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  25. I seguenti utenti hanno dato un "Like"


  26. #21
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    Re: maschera in apertura

    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Ok, modifico secondo la tua ultima richiesta.
    Comunque se hai capito come funziona il codice puoi ottenere tutte le condizioni che vuoi modificando solo le istruzioni presenti.
    Codice: 
    Option Explicit
    Private Sub Workbook_Open()
     Dim messaggio1 As String, messaggio2 As String, criterio As Integer
     Dim cella As Object, z As Integer, nascita As Date, intervallo As Range
     Set intervallo = Range("A1:A10")
        For Each cella In intervallo
            nascita = CDate(cella.Offset(0, 3))
            z = DateDiff("yyyy", nascita, Date)
            criterio = Left(nascita, 2) - Left(Now(), 2)
            If criterio = 1 Then
                messaggio1 = messaggio1 & cella & " " & cella.Offset(0, 1) & " " & cella.Offset(0, 2) & " " & " compie " & z & " anni" & vbCr
            End If
            If criterio = 2 Then
                messaggio2 = messaggio2 & cella & " " & cella.Offset(0, 1) & " " & cella.Offset(0, 2) & " " & " compie " & z & " anni" & vbCr
            End If
        Next
        MsgBox "DOMANI" & vbCr & messaggio1 & vbCr & vbCr & "DOPODOMANI" & vbCr & messaggio2, vbInformation, "PROMEMORIA"
    End Sub
    Edit: Ho messo in testa alla routine Option Explicit che mi obbliga a dichiarare correttamente tutte le variabili!

    Buongiorno e buona domenica.

    Grazie mille per il file. sto studiando adesso la routine che hai inserito ed ho già modificato il msgbox .
    Ho notato però qualche malfunzionamento. Ho incollato una lista di nomi dalla riga 1 alla riga 148 e di conseguenza ho modificato il range A1:A148. Salvo il file, lo apro nuovamente e mi da una lista di compleanni che si, figurano in data 25 ma non nel mese corrente. Mi spiego meglio, mi fa apparire avvisi di gente che compie gli anni il 25 gennaio o il 25 maggio o il 26 di altro mese, come se lui considerasse il giorno e non l'attuale giorno e mese.
    il valore della colonna D ( quello delle date di nascita ) è impostato su Data in cifra.
    Probabile che con la funzione Cdate va in conflitto ?

  27. #22

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: maschera in apertura

    Hai ragione Matteo, mi sono dimenticato di prevedere la corrispondenza del mese, rimedio.

    Codice: 
      Dim messaggio1 As String, messaggio2 As String, criterio As Integer, mesecorrente As String
      Dim cella As Object, z As Integer, nascita As Date, intervallo As Range, mesenascita As String
      Set intervallo = Range("A1:A10")
        For Each cella In intervallo
            nascita = CDate(cella.Offset(0, 3))
            z = DateDiff("yyyy", nascita, Date)
            criterio = Left(nascita, 2) - Left(Now(), 2)
            mesecorrente = Mid(Date, 3, 4)
            mesenascita = Mid(nascita, 3, 4)
            If criterio = 1 And mesecorrente = mesenascita Then
                messaggio1 = messaggio1 & cella & " " & cella.Offset(0, 1) & " " & cella.Offset(0, 2) & " " & " compie " & z & " anni" & vbCr
            End If
            If criterio = 2 And mesecorrente = mesenascita Then
                messaggio2 = messaggio2 & cella & " " & cella.Offset(0, 1) & " " & cella.Offset(0, 2) & " " & " compie " & z & " anni" & vbCr
            End If
        Next
        MsgBox "DOMANI" & vbCr & messaggio1 & vbCr & vbCr & "DOPODOMANI" & vbCr & messaggio2, vbInformation, "PROMEMORIA"
    Cerco di spiegare il codice:
    Codice: 
    Dim messaggio1 As String, messaggio2 As String, criterio As Integer, mesecorrente As String ' dichiaro le variabili
    Dim cella As Object, z As Integer, nascita As Date, intervallo As Range, mesenascita As String
    Set intervallo = Range("A1:A10") ’ l’intervallo su cui agisce il codice 
        For Each cella In intervallo ‘ controllo per ogni cella dell’intervallo sopra indicato
            nascita = CDate(cella.Offset(0, 3)) ‘"nascita" è una data (CDate) che corrisponde a 0 righe e 3 colonne a destra di “cella”
            z = DateDiff("yyyy", nascita, Date) ‘ ricavo il mumero di anni facendo la differenza tra la data corrente(Date) e l’anno di nascita (nascita)
            criterio = Left(nascita, 2) - Left(Now(), 2) ’sottraggo i primi due numeri della data di nascita e della data corrente
            mesecorrente = Mid(Date, 3, 4) ’estraggo il mese della data corrente
            mesenascita = Mid(nascita, 3, 4) ‘estraggo il mese della data di nascita
            If criterio = 1 And mesecorrente = mesenascita Then ‘se il “criterio“ cioè la differenza tra il giorno della data di nascita e il giorno della data corrente, se è uguale a 1 manca 1 giorno ….e  se il mese corrente corrisponde a quello di nascita allora scelgo i messaggi sotto
                messaggio1 = messaggio1 & cella & " " & cella.Offset(0, 1) & " " & cella.Offset(0, 2) & " " & " compie " & z & " anni" & vbCr ' se i criteri sopra corrispondono allora attivo il messaggio1
            End If
            If criterio = 2 And mesecorrente = mesenascita Then 'stessa cosa del criterio sopra
                messaggio2 = messaggio2 & cella & " " & cella.Offset(0, 1) & " " & cella.Offset(0, 2) & " " & " compie " & z & " anni" & vbCr
            End If
        Next
        MsgBox "DOMANI" & vbCr & messaggio1 & vbCr & vbCr & "DOPODOMANI" & vbCr & messaggio2, vbInformation, "PROMEMORIA" 'messaggio 
    File Allegati File Allegati
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  28. #23

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2801
    Versione Office
    Excel 2013
    Likes ricevuti
    1019
    Likes dati
    977

    Re: maschera in apertura

    Un saluto a tutti in particolare a Ges.
    Per semplificare il criterio potresti usare:

    Codice: 
            criterio = DateDiff("d", Date, DateSerial(Year(Date), Month(nascita), Day(nascita)))
    così non sarai vincolato dalla formattazione della data (1/05/2016 non darà errore)

    Poi per non fare comparire l'avviso senza compleanni pensavo ad una cosa simile a questa:
    Codice: 
        If Len(Messaggio1) > 0 Then 'criterio=1
            Messaggio = Messaggio & "DOMANI" & vbCr & Messaggio1 & vbCr & vbCr
        End If
        If Len(Messaggio2) > 0 Then 'criterio=2
            Messaggio = Messaggio & "DOPODOMANI" & vbCr & Messaggio2 & vbCr & vbCr
        End If
        If Len(Messaggio3) > 0 Then 'criterio=-1
            Messaggio = Messaggio & "IERI" & vbCr & Messaggio3 & vbCr & vbCr
        End If
        If Len(Messaggio4) > 0 Then 'criterio=-2
            Messaggio = Messaggio & "L'ALTRO IERI" & vbCr & Messaggio4
        End If
        
        MsgBox Messaggio, vbInformation, "PROMEMORIA del " & Format(Date, "dd-mmm-yy")

  29. #24

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7108
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2059
    Likes dati
    1296

    Re: maschera in apertura

    Ciao Rubik, grazie del suggerimento, anche se penso che solo stravolgendo la formattazione potrà darà errore ... però meglio prevenire. :28:
    Per l'avviso senza compleanni ho pensato che sia più giusto lasciare comparire il messaggio con il campo vuoto così ci si rende conto che tutto funziona e non ci sono compleanni, nel tuo messaggio mette la data corrente e lascia il campo vuoto.... vediamo se anche per questo Matteo ci darà indicazioni.

    @ Matteo:Se tu sei d'accordo, a questo punto, dato che hai detto che stai studiando la routine, visto che ti è stato fornito quanto hai bisogno dovresti provarci da solo ad adattare il codice alle tue esigenze, per permetterti di impratichirti e imparare, fermo restando che per qualsiasi dubbio noi siamo qui. :90:
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  30. I seguenti utenti hanno dato un "Like"


  31. #25
    L'avatar di MatteoG
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Bronte
    Età
    30
    Messaggi
    35
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    8

    Re: maschera in apertura

    Scusa la lunga assenza ma impegni di lavoro mi hanno portato via a lungo dal forum.
    Ringrazio tutti coloro i quali sono intervenuti con le loro soluzioni, risolvendo così il mio problema.
    Il caso si può dire risolto !


    P.S. aprirò un nuovo post per un nuovo caso :167:

Discussioni Simili

  1. Maschera inserimento dati
    Di Enzokar nel forum Domande su Excel VBA e MACRO
    Risposte: 2
    Ultimo Messaggio: 04/03/17, 18:57
  2. [Risolto] apertura di una userform ad apertura del file
    Di raffaelealta nel forum Domande su Excel VBA e MACRO
    Risposte: 3
    Ultimo Messaggio: 09/02/17, 14:07
  3. [Risolto] Posizionamento campi in maschera
    Di KARLO16 nel forum Domande su Microsoft Access
    Risposte: 3
    Ultimo Messaggio: 24/10/16, 16:55
  4. [Risolto] Come aprire una maschera secondaria fleggando nella maschera principale
    Di ProgrammD69 nel forum Domande su Microsoft Access
    Risposte: 20
    Ultimo Messaggio: 19/09/16, 15:48
  5. [Risolto] Requery di una cbo in maschera: non funziona
    Di ProgrammD69 nel forum Domande su Microsoft Access
    Risposte: 6
    Ultimo Messaggio: 08/07/16, 22:15

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •