FORMULA di calcolo 2



  • FORMULA di calcolo 2
    di Ermes (utente non iscritto) data: 08/12/2014 14:03:16

    A seguito del mio precedente messaggio FORMULE di calcolo risolto grazie al vostro aiuto... Vi chiedo...

    Eaiste la possibilità di creare... una formula o formattazione condizionale che evidenzi un errore nel caso vi fossero 7 giorni di lavoro consecutivi? Questa formula non deve considerare i giorni della settimana ma l'intero mese....
    Come nell'altro messaggio, i valori che determinano giornata di lavoro sono:
    C, 1, 2, 3, C+, 1+, 2+, 3+, C*, 1*, 2*, 3*, C**, 1**, 2**, 3**, F , DISP e DS
    I valori che determinano giornata di riposo sono:
    RC, RO, RFI e M

    ESEMPIO di ERRORE

    1, 1, RO, CR, 1, 1, 1, 1, 1, 1, 1, RO, CR, 1

    E... In caso di errore, mi evidenzi tutti e 7 i giorni...

    Grazie



  • di Mister_x (utente non iscritto) data: 08/12/2014 15:52:26

    ciao Ermes

    Studiati bene adesso la funzione dove ho apportato modifiche, prova a farle anche sulla tua gia inserita nel file, Attenzione alla posizione della tabella dato che la mia parte da colonna B e la tua non so dove in quale colonna e' posizionata

    ti segnalo le righe modificate e inserite

    inserisco sempre il Diverso

    ciao
     
    Option Explicit
    Function Cont_Sei(B_AC As Range) As Variant  ''MODIFICA
    Application.Volatile
    Dim Bac, Sei As Variant ''MODIFICA
    Dim uno, Ciclo As Long ''MODIFICA
    For Each Bac In B_AC
     Ciclo = Ciclo + 1
     If Bac Diverso "RC" And Bac Diverso "RO" And Bac Diverso "RFI" And Bac Diverso "M" Then uno = uno + 1
     If Ciclo = 7 Then
       If uno = 6 Then
          Sei = Sei + 1
                                ''INSERITO
       ElseIf uno = 7 Then
        MsgBox "Inseriti 7 giorni Validi dal giorno " & Bac.Column - 7 & " al Giorno " & Bac.Column - 1
        Sei = Bac.Column - 7 & " To " & Bac.Column - 1
        Exit For
                         ''INSERITO
       End If
      uno = 0
      Ciclo = 0
     End If
    Next
    Cont_Sei = Sei






  • di Mister_x (utente non iscritto) data: 08/12/2014 16:52:37

    Riciao ermes

    non avevo considerato la seguente frase

    Questa formula non deve considerare i giorni della settimana ma l'intero mese....
    quindi qui volevi precisare 7 giorni consecutivi anche a cavallo di una settimana all'altra

    quindi la funzione che ho modificato non e' valida per questo calcolo ma ne va aggiunta una seconda indipendentemente dalla prima che tu hai nel tuo file

    utilizzo =Sette_G(B2:AC2)
    ti riposto il file di prova con la seconda funzione e inseriti due utilizzi di tutte e due

    Riciao
     
    Function Sette_G(B_AC As Range) As String
    Application.Volatile
    Dim Bac, G_Sette As Variant
    Dim sette, col_ini As Long
    G_Sette = "Regolare"
    For Each Bac In B_AC
    sette = sette + 1
     If Bac = "RC" Or Bac = "RO" Or Bac = "RFI" Or Bac = "M" Then
       sette = 0
       col_ini = Bac.Column
     End If
     If sette >= 7 Then
       G_Sette = "errore dal " & col_ini & " al " & Bac.Column
       Exit For
     End If






  • di Ermes (utente non iscritto) data: 08/12/2014 16:54:07

    Grazie Mister x...

    Indubbiamente proverò a studiarla e capire il funzionamento mah.... Nin è facile capire da zero...

    Dove posso trovare una guida con le.formule / sintassi da applicare???

    Appena riesco provo ad applicarla

    Non devo sostituirla all'altra ma aggiungere una nuova formula... Giusto???

    Non vanno in conflitto dopo vero????

    Mi rendo conto di saper proprio poco mah.... Voglio imparare xche' mi sta appassionando molto la cosa



  • di Mister_x (utente non iscritto) data: 08/12/2014 18:54:32

    ciao

    vanno inserite nello stesso modulo, vedi il mio file
    NO non vanno in conflitto, vanno in conflitto se le nominiamo con lo stesso Nome o se diamo un nome uguale a quelle standar di excel, ess
    SOMMA() e una funzione di excel , se vogliamo ciamare anche la nostra Somma ma perche' deve fare un altro tipo di calcolo, la chiameremo S_OMMA() o SOMM_A()
    per i manuali se giri in internet ne trovi molti, il consiglio che ti dico pero' e' di seguire i forum, oltre ai manuali, in questi troverai molti esempi che nei manuali non verranno mai elencati o adottati, e quando sei in difficolta' posta sempre la domanda giusta e inerente al problema, che ti verra' sempre data una risposta o tante risposte riconducibili sempre al risultato che vuoi ottenere
    tanto per dirti
    le due funzioni che usi le potevo integrare in una sola, ma cosi' facendo ti complicavo la vita a capire il suo funzionamento. ma non era piu' maleabile come le due che utilizzi, essendo queste non vincolate una all'altra , mentre una sola era vincolata al dato fisso

    comunque se vuoi, fai sapere, ti creo questa per farti vedere il funzionamento di una sola funzione in due
    ciao






  • di Ermes (utente non iscritto) data: 08/12/2014 20:40:11

    Ciao Mister

    ho creato un nuovo modulo e ho incollato ciò che mi hai passato... ma mi dice errore di compilazione....



  • di Ermes (utente non iscritto) data: 08/12/2014 21:38:16

    Ho provato e riprovato ma non va... Mi.continua a date errore di compilazione.

    Una domanda...

    Questa formula.mi dovrebbe dare se ho capito giusto il valore 1 nella colonna errore...

    Sarebbe possibile rendere l'errore più evidente??? Tipo evidenziando in automatico i 7 o più valori consecutivi di lavoro???



  • di Mister_x (utente non iscritto) data: 08/12/2014 23:35:42

    ciao ermes

    le funzioni se ai visto il mio file fanno proprio quello che tu dici
    tu parli di colonne ma il file che postato da te i dati vanno in riga e non in colonna

    Righe da sinistra a destra ( Row )
    Colonne dall'alto in basso ( Column )

    Ora a questo punto sarebbe utile avere il tuo file per capire cosa e dove sbagli ad inserire e a utilizzare tali funzioni, perche' se utilizzo il file che tu hai postato in precedenza non si riuscira' mai a combaciare i vari fattori anche con mille spiegazioni a riguardo

    in attesa

    ciao







  • di Ermes (utente non iscritto) data: 09/12/2014 10:48:46

    Ciao Mister sei daqvvero gentile...


    Ho provato per benino... e ti chiedo scusa... va e va anche bene... ma... nel mio caso le date che riporta in caso di errore sono sbagliate.

    Aggiungendo colonne prima della tabella anche nel file allegato da lo stesso errore...

    Ho cercato di capire dove intervenire per correggere l'errore mah.... non ho capito come fare...




  • di Mister_x (utente non iscritto) data: 09/12/2014 11:54:12

    ciao

    cambia la funzione Sette_g() con questa qui' nuova
    si intende sostituiscila tutta
    nel file postato troverai anche quella che fa tutto denominata Due_in_Uno() e situata nel modulo2 per non farti confondere con quelle che stai utilizzando

    vedi nel file le varie possibilita' di utilizzo e il risultato

    ciao
     
    Function Sette_G(B_AC As Range) As String
    Application.Volatile
    Dim Bac, G_Sette, Col_ini As Variant
    Dim sette As Long
    G_Sette = "Regolare"
    For Each Bac In B_AC
    sette = sette + 1
     If Bac = "RC" Or Bac = "RO" Or Bac = "RFI" Or Bac = "M" Then
       sette = 0
       Col_ini = Bac.Address(0, 0)
     End If
     If sette >= 7 Then
       G_Sette = "errore dal " & Col_ini & " al " & Bac.Address(0, 0)
       Exit For
     End If
    Next
    Sette_G = G_Sette
    End Function






  • di Ermes (utente non iscritto) data: 09/12/2014 15:08:03

    Mister_X...

    Tu non te ne fai un'idea del bene che ti voglio!!!!!

    Come posso sdebitarmi con te???

    Sei gentile, veloce nelle risposte e disponibilissimo..... Posso chiederti di dove sei??

    Sono ad un ottimo punto con i miei fogli...

    Ora "mi" rimane solo da fare la macro che mi copi i servizzi settimanali in automatico sulla tabella mensile...

    Io ci ho provato a farlo... Mah... Non capisco come dare la ciclicità alla cosa... Con la mia macro continua a copiare sempre la stessa settimana nello.stesso punto della tabella mensile



  • di Mister_x (utente non iscritto) data: 09/12/2014 16:28:37

    ciao ermes

    a questo punto serve veramante il tuo file , con le spiegazioni di quello che vuoi fare e ottenere a riguardo.
    se in questo ci sono nominativi cambiali con Pippo Pluto o altri nomi ma devi lasciare la struttura e tutti i fogli con i dati tuoi senza modificarli

    ciao






  • di Ermes (utente non iscritto) data: 09/12/2014 17:22:45

    Ciao Mister... Eccomi....

    Ho allegato i file originali omettendo loghi e nomi come da te suggerito. I file sono settimanale mensile 1 e mensile 2.
    Ciò che ora dovrebbe fare automaticamente copiare le celle AD13:AJ13 + AD17: AJ34 del file settimanale nel file mensile 2 rispettando la settimana e il mese.
    I dati che vedi già scritto li ho copiati tenendo aperti i fogli e facendo copia incolla.
    Allo stesso modo, deve copiare le celle AD40:AJ46 nel file mensile 1 naturalmente rispettando sempre la settimana.
    In ogni foglio del file settimanale associero' ho un tasto alla macro che in automatico mi coppiera poi l'intero servizio della settimana che sto visualizzando nei file mensile 1 è mensile 2.
    P.S. Ai fogli 1, 2 e 3, non ho ancora messo i tasti ma lo farò a breve....



  • di Ermes (utente non iscritto) data: 10/12/2014 08:56:04

    Ho forse chiesto qualcosa di irrealizzabile



  • di Mister_x (utente non iscritto) data: 10/12/2014 14:39:24

    ciao ermes

    ho visto adesso i tuoi file, e ho dato un'occhiata sintetica al problema
    la cosa e' fattibilissima, lunico inconveniente e' mio, in quanto non mi sono mai,fino a questo momento, incontrato in questo problema di gestire 2 o piu' file contemporaneamente con VBA di excel,
    in passato questo lavoro lo facevo tranquillamente quando utilizzavo prg di clipper, dove alcuni programmi gestivano e gesticono ancora piu' file contemporaneamente,
    quindi a questo punto provero' se ci riesco sperando che qualche buon cuore in linea ci possa dare a sua volta un aiutino per il mio sapere e per il tuo programma

    la sintassi del programma lo intesa
    tu crei settimanalmente una scheda,(settimanale) quando questa e' stata svolta e non ci sono state variazioni a riguardo, con una semplice sub() apri prima il (mensile 2) e copi una parte di questa scheda in 2015, chiudi il mensile 2 e apri il (mansile 1) copi sempre dalla scheda (settimanale) unaltra parte di questa e alla fine chiudi il file
    e' questa parte che non ho mai fatto, si intende che questo sullo stesso file lo fatto tranquillamente con allegato si intende nel tuo caso Mensile1 e Mensile2
    giusto la procedura???

    ciao





  • di Ermes (utente non iscritto) data: 10/12/2014 15:08:13

    Esattamente Mister...

    è proprio ciò che vorrei ottenere...

    P.S. Se è un problema far aprire gli altri due file, va bene ugualmente creare 2 fogli da tenere sempre alla fine nonostante vengano aggiunte nuove settimane di lavoro denomimati Mensile 1 e Mensile 2.



    Grazie dell'aiuto che mi stai dando... Non mi hai ancora risposto xo' alla domanda più facile.... Di dove sei???



  • di MIster_x (utente non iscritto) data: 10/12/2014 18:48:15

    ciao ermes

    ho messo tutto la cosa in un file
    inserito foglio Mensile_1 e Mensile_2 e messo pulsanti gia' in 1,2,3
    PS attenzione alle date Molto importanti per caricare le settimane al posto esatto

    la sub in Modulo1 e questa

    allego il file

    ciao

     
    Option Explicit
    Option Compare Text
    Sub Da_set_a_mese1_2()
    Dim colMens, RigMens As Long
    Dim Datamese As Range
    Dim mens1, mens2 As Range
    Dim NomeSh As String
    Dim cella, DataSet As Variant
    Dim i, o1, o2 As Long
    NomeSh = ActiveSheet.Name ''nome del foglio attivo
    If NomeSh = "Mensile_1" Or NomeSh = "Mensile_2" Then
      MsgBox " Questa Sub() non puo' essere eseguita in questo foglio -->> " & NomeSh
      Exit Sub
    End If
    Application.EnableEvents = False
    Application.Calculation = xlManual
    For i = 4 To 16 Step 2
      DataSet = Cells(11, i)
    Set mens1 = Range(Cells(40, i), Cells(46, i))
    Set mens2 = Range(Cells(17, i), Cells(34, i))
    '''------Mesnsile_1------------------
    Set Datamese = Sheets("Mensile_1").Range("E6:AT50")
      For Each cella In Datamese
        If cella = DataSet Then
           colMens = cella.Column
           RigMens = cella.Row
           Exit For
        End If
      Next
        If colMens = 0 Or RigMens = 0 Then
          MsgBox "Attenzione in Mensile_1 non esiste questa data " & Format(DataSet, "dd mm yyyy")
          Exit Sub
        End If
      For Each cella In mens1
        Sheets("Mensile_1").Cells(RigMens + 2, colMens) = cella
        RigMens = RigMens + 1
      Next
    '''-------Mensile_2----
    Set Datamese = Sheets("Mensile_2").Range("E6:AT50")
      For Each cella In Datamese
        If cella = DataSet Then
           colMens = cella.Column
           RigMens = cella.Row
           Exit For
        End If
      Next
        If colMens = 0 Or RigMens = 0 Then
          MsgBox "Attenzione in Mensile_2 non esiste questa data " & Format(DataSet, "dd mm yyyy")
          Exit Sub
        End If
      Sheets("Mensile_2").Cells(RigMens + 2, colMens) = Cells(13, i)
      For Each cella In mens2
        Sheets("Mensile_2").Cells(RigMens + 3, colMens) = cella
        RigMens = RigMens + 1
      Next
    Next i
    Application.Calculation = xlAutomatic
    Calculate
    Application.EnableEvents = True
    Set mens1 = Nothing
    Set mens2 = Nothing
    Set Datamese = Nothing
    End Sub
    






  • di Ermes (utente non iscritto) data: 10/12/2014 19:58:30

    MAGNIFICOLAVOROOOOO!!!!

    È perfetto... Se non fosse per piccolo problemino...

    Ora se dal foglio 6 clicco su " CREA NUOVO TURNO.settimanale" mi crea il foglio 9 e non 7 e per di più crea una copia del mensile 2




  • di Mister_x (utente non iscritto) data: 10/12/2014 23:19:55

    ciao ermes

    bastava portare il Mensile_1 e 2 in prima e seconda sulla ribbon di comando dei fogli
    apportare due righe alla tua sub() che adesso o danominata Crea_Settimana()
    e non parola bruttissima Macro????

    ti riallego il file modificato

    ciao

    PS zona varese como
     
    Sub Crea_Settimana()
    Application.EnableEvents = False
    Application.Calculation = xlManual
        Set lastsh = Sheets(Sheets.Count)
        lastsh.Copy After:=lastsh
        Sheets(Sheets.Count).Name = Str(Sheets.Count) - 2 
        Range("S2").Value = Sheets(Sheets.Count).Name
        Range("D11").Value = Range("D11").Value + 7
        Range("AD40:AJ46").Copy Range("U40")
        Range("AD17:AJ34").Copy Range("U17")
        Range("AD41:AJ46").Copy Range("AD40")
        Range("AD18:AJ34").Copy Range("AD17")
        Range("U40:AA40").Copy Range("AD46")
        Range("U17:AA17").Copy Range("AD34")
        Application.CutCopyMode = False
        Set lastsh = Nothing
    Set mens1 = Nothing
    Set mens2 = Nothing
    Set Datamese = Nothing
    Application.Calculation = xlAutomatic
    Calculate






  • di Mister_x (utente non iscritto) data: 10/12/2014 23:28:01

    riciao ermes

    guarda la tua macro in quanto ho postato quella sbagliata
    quella giusta e' questa

    ciao
     
    Sub Crea_Settimana()
    Application.EnableEvents = False
    Application.Calculation = xlManual
        Set lastsh = Sheets(Sheets.Count)
        lastsh.Copy After:=lastsh
        Sheets(Sheets.Count).Name = Str(Sheets.Count) - 2
        Range("S2").Value = Sheets(Sheets.Count).Name
        Range("D11").Value = Range("D11").Value + 7
        Range("AD40:AJ46").Copy Range("U40")
        Range("AD17:AJ34").Copy Range("U17")
        Range("AD41:AJ46").Copy Range("AD40")
        Range("AD18:AJ34").Copy Range("AD17")
        Range("U40:AA40").Copy Range("AD46")
        Range("U17:AA17").Copy Range("AD34")
        Application.CutCopyMode = False
    Set lastsh = Nothing
    Application.Calculation = xlAutomatic
    Calculate
    Application.EnableEvents = True
    End Sub
    
    






  • di Ermes (utente non iscritto) data: 11/12/2014 04:48:04

    Mister_x....

    GRAZIE di vero cuore... Sei stato gentilissimo e vorrei davvero trovare il modo di sdebitarmi con te.

    Ho provato e ora va alla grande

    Io sono di Mantova... Non distantissimi mah... Nemmeno vicini....

    Grazie ancora di tutto Mister_x!