calculate su condizione



  • calculate su condizione
    di ire data: 23/10/2014 10:31:52

    Ciao a tutti! Sono nuova di VBA e sto lavorando con un foglio excel abbastanza complesso.
    A me servirebbe un codice per cui inserendo un numero di serie nelle celle della colonna c, partendo da c4, si vada a confrontare il contenuto della cella nella colonna R della stessa riga, in cui compare la "DATA di consegna", con la data odierna. Nel caso in cui la data (nellla colonna R) sia passata, mi si scateni una macro GIà impostata.
    Vorrei anche che il mio codice si fermi nel momento in cui nella mia colonna C non sia inserito nulla.
    Quindi il mio codice si dovrebbe scatenare nel momento in cui vado ad inserire uno ad uno il mio numero di serie e quindi la data da confrontare sarebbe risultato di una formula.
    Non so se mi sono spiegata sufficientemente!
    Se avessi omesso dei dettagli, vi prego di scrivermi. GRAZIE, gentilissimiiiiiii!

    il mio codice di base è questo, che dite?

     
    Private Sub Worksheet_calculate(ByVal Target As Range)
    Dim cella As Range
    For Each cella In Range("r4:r20")
    If cella.Value < Date Then
    Macro2
    End If
    Next
    
    End Sub


  • visualizzare il numero di riga
    di peppino (utente non iscritto) data: 23/10/2014 10:56:48

    Buon giorno a tutti,
    in un mio file già zeppo di formule e riferimenti, ho bisogno di visualizzare sempre in una stessa cella, il numero di riga della cella attiva, vi via che essa cambia.

    Avevo pensato di mettere la formula =cella("riga" ; ???) dove al posto dei punti interrogativi ci dovrebbe essere il riferimento alla cella attiva in un determinato momento, ma non so come fare e se si può fare.

    Come posso risolvere il problema?
    Grazie



  • di Zer0Kelvin data: 23/10/2014 17:23:28

    Ciao.
    Dal momento che hai chiesto tu , riguardo al tuo codice, ci sono diversi errori.
    1) la dichiarazione della routine Worksheet_Calculate è errata
    2) Worksheet_Calculate non è l'evento idoneo per gestire questo tipo di problematiche
    3) la routine cicla tutte le celle dell'intervallo R4:R20, quindi la macro potrebbe venir eseguita per un numero imprecisato di volte; la cella da controllare è una sola (colonna R e stessa riga della cella in cui hai inserito il codice)
    Sotto c'è il codice corretto (da inserire nel modulo di codice del foglio interessato).
    In questi casi si usa l'evento Worksheet_Change, che si verifica ogni volta che una cella del foglio viene modificata.
    Il codice controlla che:
    -la cella modificata sia una sola ( Target.Cells.Count = 1 )
    -nella cella sia stato inserito un valore ( Target(1) <> "" )
    -la cella appartenga all'intervallo in cui inserisci i codici ( Not Intersect(Target, Range("C4:C20")) Is Nothing )
    Dopo di questo, viene controllato che la relativa cella in colonna R ( Range("R" & Target.Row) ) contenga una data valida, se sì, controlla se la data è antecedente a oggi ed eventualmente esegue la macro...
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Cells.Count = 1 And Target(1) <> "" And Not Intersect(Target, Range("C4:C20")) Is Nothing Then
            If IsDate(Range("R" & Target.Row)) Then
                If Range("R" & Target.Row) < Date Then macro2
            End If
        End If
    End Sub



  • di Zer0Kelvin data: 23/10/2014 17:27:03

    PS:
    Peppino, ti sei erroneamente accodato ad un altro post.
    Devi aprire un nuovo thread; vai all'indice de forum e clicca sul tasto [Nuova discussione] a inizio pagina...


  • grande
    di ire.zazi (utente non iscritto) data: 23/10/2014 18:09:05

    Grande!!!! Domattina provo! Credo tu abbia centrato in pieno.
    Avevo pensato di utilizzare calculate perchè le mie date nella colonna R derivano da una formula legata alla mia cella nella colonna C.
    In realtà appena io inserisco manualmente il numero della commessa, automaticamente la data nella cella R si compila.
    Non so se mi sono spiegata.Domattina comunque provo!
    Ti ringrazio! =)



  • di ire data: 24/10/2014 12:15:02

    RAGAZZI! ho trovato il codice e sembra funzionare! :)
    Ve lo posto nel caso in cui potesse tornare utile a qualcuno..
    Avrei però un altro problemino da porvi, sempre per lo stesso foglio.
    Risolto ora il problema codice, Mi servirebbe una Macro che io ho chiamato 'PIPPO'.
    Vorrebbe esseere una macro tale per cui SULLA STESSA RIGA della cella attiva, mi compili le celle nelle colonne n,o ,p ,q secondo una formula.
    prima dichiaro i come parametro!
    La mia i che varia sarebbe il numero delle righe! Userei RANGE ("i & n ") dove i è la riga della mia cella attiva ela n è la colonna da considerare.
    Copio da excel la formula per ogni cella.
    Non so se sono stata sufficientemente chiara... GRAZIE MILLE!=)
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Integer
    If Target.Cells.Count = 1 And Target(1) <> "" And Not Intersect(Target, Range("C4:C20")) Is Nothing Then
    If IsDate(Range("R" & Target.Row)) Then
    If Range("R" & Target.Row) < Date Then
    I = ActiveCell.Row
    Call pippo(I)
    End If
    End If
    End If
    End Sub



  • di Zer0Kelvin data: 24/10/2014 12:39:25

    A questo punto è meglio se alleghi un file di esempio su cui lavorare con la descrizione dettagliata (e qualche esempio) del risultato desiderato.
    Cerca di essere piu esaustiva possibile...



  • di ire (utente non iscritto) data: 24/10/2014 16:38:35

    Ok, perfetto!
    Ora ti allego il foglio di lavoro semplificato.Unica cosa! non c'è nessun tipo di correlazione tra la macro PIPPO e il nome del cliente PIPPO. Per questioni di privacy, ho preferito omettere le informazioni personali.
    Grazie ancora della disponibilità.



  • di ire (utente non iscritto) data: 27/10/2014 08:54:11

    Ragazzi, io ho allegato due immagini, è quanto più sono riuscita a fare.
    Spero sia possibile capire e vedere bene le foto del mio file.
    Grazie.



  • di Arturo (utente non iscritto) data: 27/10/2014 10:27:10

    Allegare foto non serve a nulla.
    Meglio allegare un file (casomai fasullo sui dati-personali), ma veritiero sulle posizioni



  • di ire (utente non iscritto) data: 27/10/2014 10:38:58

    Se solo riuscissi sarebbe buona cosa! =(



  • di ire (utente non iscritto) data: 28/10/2014 09:49:15

    Ragazzi!
    Ho trovato il modo per allegare il mio file esempio!
    Vi chiedo un altro aiuto.
    www.filedropper.com/esempiofoglio

    Provo a rispiegare la macro che mi servirebbe.

    "partendo dalla cella attiva della colonna R (nel mio caso R4), mi sposto nella colonna N della stessa riga ( potrei usare Range("N" & I)), dove inserisco la data odierna.
    Mi sposto poi nella colonna O inserendo la formula "=SE($H4="distensione";$P4-$B$2;SE($H4="Taglio a 1/2";$P4-$C$2;SE($H4="distensione+Taglio";$P4-$D$2;$P4+0)))";
    Nella COLONNA P con la formula "=SE($U4="MORANDINI";SE(O(GIORNO.SETTIMANA($Q4)=6;GIORNO.SETTIMANA($Q4)=2);$Q4-4;SE(GIORNO.SETTIMANA($Q4)=3;$Q4-1;SE(O(GIORNO.SETTIMANA($Q4)=4;GIORNO.SETTIMANA($Q4)=7);$Q4-2;SE(O(GIORNO.SETTIMANA($Q4)=5;GIORNO.SETTIMANA($Q4)=1);$Q4-3;SE(GIORNO.SETTIMANA($Q4)=7;$Q4-1;SE(GIORNO.SETTIMANA($Q4)=1;$Q4-2))))));$Q4+0)";
    nella COLONNA Q con la formula : "=$R4-CERCA.VERT($C4;$A:$AF;32;FALSO).
    Alla fine della macro La mia cella attiva è nella colonna R nella riga successiva a quella precedente."
    Vi ringrazio enormemente per la disponibilità e la pazienza dimostrata! =)