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

    giulioc
    Partecipante

      Buongiorno. Nella colonna Q del foglio pazienti vi sono delle date corrispondenti alla fine di progetto es Rossi (i cognomi sono nella colonna B) fine progetto 26/12/2022. Se fosse possibile all'apertura del file sarebbe utile che comparisse una msgbox che elenca gli utenti che finiscono colorando anche l'intera riga. ES aprendo il file il 26/12/2022 compare il messaggio msgbox "rossi finisce il 26/12/2022" contemporaneamente evidenziando colorando la riga ad esempio di verde; ovviamente l'evidenziazione deve sparire se apro il file il 27/12/2022. Vi ringrazio della cortese attenzione. 

      #35725 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        271 pts

        Puoi sfruttare a questo scopo l'evento Open del Workbook, eseguendo un controllino sulla data attuale in confronto al range di date della scadenza del progetto (sempre col metodo Find del Range dove trovansi le date di scadenza). Naturalmente stabilirei un criterio e mi farei mostrare solo gli utenti che finiscono, poniamo, a tre giorni da oggi, altrimenti avresti un msgbox lunghissimo che elenca tutte le scadenze di tutti. Colorare la riga è un corollario di questo calcolo della scadenza.

        Prova a codificare qualcosa e vediamo cosa ne esce.

        #35736 Score: 0 | Risposta

        giulioc
        Partecipante

          Private Sub Workbook_Open()
          Dim giorni As String
          Dim scadenza As String
          Dim rng As Range
          Dim cella As Range
          Dim ur As Long

          ur = Range("i" & Rows.Count).End(xlUp).Row

          Set rng = Range("i7:i" & ur)
          For Each cella In rng
          scadenza = cella.Value
          cella.Interior.ColorIndex = 3
          cella.Offset(, 1).Value = "SCADUTO"
          Next cella

          Set rng = Nothing

          End Sub

          Praticamente mi colora di rosso da "i 7" e mi scrive scaduto ma non riesco a far di più. Ma non è proprio quello che vorrei.

          #35737 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            271 pts

            Non hai mai codificato un confronto con la data di scadenza, però.

            Qualcosa di simile a:

            Private Sub Workbook_Open()
            Dim giorni As String
            Dim scadenza As String
            Dim rng As Range
            Dim cella As Range
            Dim ur As Long
            Dim diff as long
            
                ur = Range("i" & Rows.Count).End(xlUp).Row
                Set rng = Range("i7:i" & ur)
                For Each cella In rng
                    scadenza = cella.Value
                    diff = scadenza - Date()
                    if diff > 0 and diff < 3 then
                        cella.Interior.ColorIndex = 3
                        cella.Offset(, 1).Value = "SCADE FRA 3 GIORNI O MENO"
                    elseif diff <= 0 then
                        cella.Interior.ColorIndex = 3
                        cella.Offset(, 1).Value = "SCADUTO"
                    end if
                Next cella
                Set rng = Nothing
            End Sub
            #35738 Score: 0 | Risposta

            giulioc
            Partecipante

              a diff = scadenza - Date mi dà tipo non corrispondente. Ti ringrazio sempre della cortese attenzione. Ho sostituito con  diff = DateDiff("d", Date, scadenza) e funziona. grazie!!!!! Nel mio file di prova funziona nel mio file di lavoro  scadenza = cella.Value non si valorizza perché alcune celle sono vuote, non ho alcuna idea di come risolvere questo problema.

              #35742 Score: 0 | Risposta

              giulioc
              Partecipante

                Spero che sia di facile soluzione

                #35744 Score: 0 | Risposta

                giulioc
                Partecipante

                  Private Sub Workbook_Open()
                  Dim giorni As String
                  Dim scadenza As String
                  Dim rng As Range
                  Dim cella As Range
                  Dim ur As Long
                  Dim diff As Long

                  ur = Range("q" & Rows.Count).End(xlUp).Row 'conteggia le celle piene
                  Set rng = Range("q2:q" & ur)
                  For Each cella In rng

                  scadenza = cella.Value
                  If scadenza = "" Then GoTo a:

                  ' diff = scadenza - Date 'mi valorizza la data
                  'diff = DateDiff(gg, scadenza, Date)
                  diff = DateDiff("d", Date, scadenza)
                  If diff > 0 And diff < 3 Then
                  cella.Interior.ColorIndex = 3
                  cella.Offset(, 1).Value = "SCADE FRA 3 GIORNI O MENO"
                  ElseIf diff <= 0 Then
                  cella.Interior.ColorIndex = 3
                  cella.Offset(, 1).Value = "SCADUTO"
                  End If
                  a:
                  Next cella
                  Set rng = Nothing
                  End Sub

                  Ho risolto cosi ... non è elegante ma funzionante

                  #35745 Score: 0 | Risposta

                  giulioc
                  Partecipante

                    Sarebbe utile un msgbox che indichi il numero della riga e il cognome degli utenti che stanno per scadere. Grazie sempre dell'attenzione

                    #35755 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      271 pts

                      giulioc ha scritto:

                      a diff = scadenza - Date mi dà tipo non corrispondente

                      Eh già, la variabile "scadenza" è dichiarata come stringa ma deve essere una data. Alternativa alla tua soluzione è diff = CDate(scadenza) - Date.
                      Sono contento comunque che ci hai messo la testa e trovato una soluzione 🙂

                      giulioc ha scritto:

                      cella.Value non si valorizza perché alcune celle sono vuote

                      Puoi testare la condizione con Trim e se il risultato è vuoto, eviti la conversione (tu hai testato solo scadenza = "" ma se la cella contiene uno spazio vuoto ti dà errore comunque).

                      Ti prego evitiamo Goto 🙂

                      giulioc ha scritto:

                      If scadenza = "" Then GoTo a:

                       

                      giulioc ha scritto:

                      Sarebbe utile un msgbox che indichi il numero della riga e il cognome degli utenti che stanno per scadere

                      La variabile cella identifica la riga in scadenza. Siccome si riferisce alla colonna Q, puoi spostarti di tot colonne avanti o indietro con Offset per recuperare il valore della medesima riga e della determinata colonna. Ad esempio:

                      ElseIf diff <= 0 Then
                      cella.Interior.ColorIndex = 3
                      cella.Offset(, 1).Value = "SCADUTO"

                      mostra il valore della cella in cui la scadenza si è verificata; Offset sposta di una colonna a destra il riferimento e quindi (poiché cella punta al range Q) mostra il contenuto della riga in scadenza, colonna R.

                      Con cella.Row puoi ottenere il numero della riga "incriminata". Il cognome ni che colonna sta rispetto a Q? conta le colonne e metti questo numero in cella.Offset (0, ...) al posto dei tre puntini; un numero negativo se devi spostarti indietro e positivo se in avanti rispetto a Q. Attento allo zero che è importante e indica lo scostamento di riga (siccome non vuoi spostarti di riga, lo lasci a zero).

                    Login Registrati
                    Stai vedendo 9 articoli - dal 1 a 9 (di 9 totali)
                    Rispondi a: allarme fine progetto
                    Gli allegati sono permessi solo ad utenti REGISTRATI
                    Le tue informazioni: