Sviluppare funzionalita su Microsoft Office con VBA ALLARME DATA SCADUTA CON MACRO

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

    mflauto
    Partecipante
      1 pt

      Buongiorno a tutti,

      ho una tabella Excel dove all'interno ci sono delle date di scadenza (colonne: H e J), io vorrei che la macro mi confrontasse le date presenti nelle colonne con la data odierna collocata nella cella N4 e ad ogni apertura del file mi segnalasse tramite text box se la data di scadenza è => alla data odierna, ed inoltre un tasto per interrompere l'allert ed un'altro per riattivare la macro, in allegato il file di esempio.

      Grazie per il Vs,. prezioso aiuto.

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

      patel
      Moderatore
        51 pts

        Lo scopo del forum è insegnare a fare e non fare per altri, allega un xlsm con i tuoi tentativi di risoluzione e verrai aiutato

        #32689 Score: 0 | Risposta

        mflauto
        Partecipante
          1 pt

          Hai ragione Patel,  mi spiego meglio vorrei trasferire la routine anche alla colonna con range di celle: (J26:J42) con rispettivi msg box  e colorando le celle con la data scaduta con sfondo rosso.

          Public Sub Data()
          
              Dim sh As Worksheet
              Dim rng As Range
              Dim c As Range
              Dim d As Range
             
              Set sh = ThisWorkbook.Worksheets("Controllo")
             
              With sh
                  Set rng = .Range("J5:J21")
                  For Each c In rng
                      If Date - CDate(c.Value) = 0 Then
                          MsgBox c.Offset(0, -1).Value & "-" & " Attenzione Controllo Scaduto!"
                      End If
                
                      Set c = Nothing
                 Next
              End With
             
              Set sh = Nothing
              Set rng = Nothing
            
          End Sub
          
          Allegati:
          You must be logged in to view attached files.
          #32691 Score: 0 | Risposta

          alfrimpa
          Partecipante
            33 pts

            E non basta scrivere

            Set rng = .Range("J5:J21, j26:j42")
            #32692 Score: 0 | Risposta

            mflauto
            Partecipante
              1 pt

              Buonasera Alfredo,

              mi indichi l'istruzione che contestualmente al msg box mi indica la cella? basta magari che si posiziona sopra.

               

              #32693 Score: 1 | Risposta

              Marius44
              Moderatore
                58 pts

                Ciao

                Prova a modificare il codice in questo modo

                `'....
                    With sh
                        Set rng = .Range("J5:J21,J26:J42")
                        For Each c In rng
                            If Date - CDate(c.Value) = 0 Then
                                MsgBox c.Offset(0, -1).Value & "-" & " Attenzione Controllo Scaduto!" & vbLf & "cella " & c.Address
                            End If
                            Set c = Nothing
                       Next
                    End With
                '....`

                Ciao,

                Mario

                #32695 Score: 0 | Risposta

                mflauto
                Partecipante
                  1 pt

                  Buongiorno Mario,

                  come faccio ad impostare manualmente il numero di giorni prima della scadenza; potrei utilizzare una cella di riferimento in cui scrivo a quanti giorni prima voglio essere avvertito? ed inoltre, Mario, se in una cella non è presente una data mi va in loop 🙁

                   

                  Grazie.

                  Massimiliano

                  #32698 Score: 0 | Risposta

                  Marius44
                  Moderatore
                    58 pts

                    Ciao Max (non ti offendi, vero! Così è molto più breve   )

                    Mi sono attenuto al codice pubblicato dove non c'è alcun riferimento all'inserimento di un numero di giorni nè se la cella della data fosse vuota.

                    Per controllare se la cella è vuota può inserire una condizione subito dopo l'inizio del ciclo For Each

                    per es. If c = "" then .... e metti quello che vorresti facesse in questo caso

                    Per il numero di giorni puoi fare come da te proposto.

                     

                    Ciao,

                    Mario

                    #32701 Score: 0 | Risposta

                    Max

                      Buonasera Mario,

                      Puoi tranquillamente chiamarmi Max, avrei bisogno del tuoi aiuto per capire quale istruzione utilizzare per usare una cella in cui inserire il numero di giorni da io deve partire il mio allert ( inserisco il valore 3 - il messaggio mi apparirà 3 giorni prima della scadenza.

                      Grazie.

                      #32706 Score: 0 | Risposta

                      Max

                        Buonasera Mario,

                        Puoi tranquillamente chiamarmi Max, avrei bisogno del tuo aiuto per capire quale istruzione utilizzare per usare una cella in cui inserire il numero di giorni da cui deve partire il mio allert ( inserisco il valore 3 - il messaggio mi apparirà 3 giorni prima della scadenza.

                        Grazie.

                        #32707 Score: 1 | Risposta

                        albatros54
                        Moderatore
                          89 pts

                          SE ho capito:

                          Public Sub Data()
                          
                              Dim sh As Worksheet
                              Dim rng As Range
                              Dim c As Range
                              Dim d As Range
                          
                              Set sh = ThisWorkbook.Worksheets("Controllo")
                          
                              With sh
                                  Set rng = .Range("J5:J21,J26:J42")
                                  For Each c In rng
                                      giorni = DateDiff("d", sh.Range("k4"), c) 'differenza giorni tra le date(sh.Range("k4")
                                      'contiene la data da confrontare
                                      If giorni > 3 Then 'se è maggiore di 3
                                          c.Interior.ColorIndex = 3 ' colora la cella di rosso
                                          MsgBox c.Offset(0, -1).Value & "-" & " Attenzione Controllo Scaduto! fra giorni " & giorni
                                      End If
                          
                                      Set c = Nothing
                                  Next
                              End With
                          
                              Set sh = Nothing
                              Set rng = Nothing
                          
                          End Sub
                          

                          prova cosi

                           

                          Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                          Sempre il mare, uomo libero, amerai!
                          ( Charles Baudelaire )
                          #32709 Score: 1 | Risposta

                          Marius44
                          Moderatore
                            58 pts

                            Ciao

                            Scegli una cella vuota (io ho scelto L2) ed inserisci il numero di giorni che vuoi. Poi modifica la tua macro così

                            Public Sub Data()
                            
                                Dim sh As Worksheet
                                Dim rng As Range
                                Dim c As Range
                                Dim d As Range
                                Dim gg as Integer
                               
                                Set sh = ThisWorkbook.Worksheets("Controllo")
                                gg = Cells(2, 12).Value
                                With sh
                                    Set rng = .Range("J5:J21")
                                    For Each c In rng
                                      If c.Value <> "" Then
                                        If Date + gg >= CDate(c.Value) Then
                                            MsgBox c.Offset(0, -1).Value & "-" & " Attenzione Controllo Scaduto!" & vbLf & "cella " & c.Address
                                        End If
                                      End If
                                        Set c = Nothing
                                   Next
                                End With
                               
                                Set sh = Nothing
                                Set rng = Nothing
                              
                            End Sub

                            Per avere un immediato riscontro nella cella L2 inserisci 5 e modifica la data in J5 come 8-dic-21 (modifica anche la formattazione della cella per una migliore visibilità)

                             

                            Fai sapere. Ciao,

                            Mario

                            #32724 Score: 0 | Risposta

                            mflauto
                            Partecipante
                              1 pt

                              Buonasera a Karma e Mario,

                              che ringrazio per il loro prezioso aiuto, nelle due soluzioni, ho trovato quello di Mario più intuitiva ( quella di Karma mi da un errore sul messaggio nella parte del calcolo dei giorni; praticamente credo che mi conti le date future 🙂

                              Comunque ho fatto una sorta di fusion dei due codici.

                              Max

                              Public Sub Data()
                              
                                  Dim sh As Worksheet
                                  Dim rng As Range
                                  Dim c As Range
                                  Dim d As Range
                                  Dim gg As Integer
                                 
                                  Set sh = ThisWorkbook.Worksheets("Controllo")
                                  gg = Cells(2, 12).Value
                                  With sh
                                      Set rng = .Range("J5:J21,J26:J42")
                                      For Each c In rng
                                        If c.Value <> "" Then
                                          If Date + gg >= CDate(c.Value) Then
                                          If giorni = gg Then 'se è maggiore di 3
                                              c.Interior.ColorIndex = 3 ' colora la cella di rosso
                                              MsgBox " Attenzione Controllo Scaduto!" & vbLf & "cella " & c.Address
                                        End If
                                        End If
                                        End If
                                          Set c = Nothing
                                     Next
                                  End With
                                 
                                  Set sh = Nothing
                                  Set rng = Nothing
                                
                              End Sub
                            Login Registrati
                            Stai vedendo 13 articoli - dal 1 a 13 (di 13 totali)
                            Rispondi a: ALLARME DATA SCADUTA CON MACRO
                            Gli allegati sono permessi solo ad utenti REGISTRATI
                            Le tue informazioni: