Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 30 di 32

Discussione: Raggruppare nominativi in base a certe condizioni



  1. #1
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49

    Raggruppare nominativi in base a certe condizioni

    Ciao a tutti.
    Ho un problema che, forse per stanchezza :179:, non riesco a venirne a capo.
    Il problema è il seguente :

    Ho una cartella con 2 fogli uno con i dati da elaborare ed uno dove scrivere i risultati
    l'elaborazione consiste nel raggruppare e contare i records per nominativo che abbiano però :
    blank nella colonna "J" il valore della colonna "G" maggiore di 2
    il record così elaborato va scritto nell'altro foglio aggiungendo nell'ultima colonna il numero dei record.
    allego un file excel dove nel foglio "Scontare" c'è scritto ciò che devo ottenere dall'elaborazione
    Spero di essere stato chiaro nella spiegazione
    Grazie anticipatamente a chi mi risolve il problema o abbia tentato di risolvermelo :222:

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  2. #2
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Dopo lunghe peripezie sono arrivato al dunque.
    Ho risolto il 99% del problema l'1% è questo :

    ActiveCell.FormulaLocal = "=CONTA.VUOTE(Dati!J2:Dati!J11)"

    questa riga mi sta facendo impazzire perchè J2 e J11 devono essere delle variabili e non so come inserirle.

    Allego il file con il codice scritto così potrete vedere come l'ho risolto e nello stesso tempo spero che qualcuno mi risolva il problema delle due variabili.

    Grazie.

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  3. #3
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da Baloon_50 Visualizza Messaggio
    Dopo lunghe peripezie sono arrivato al dunque.
    Ho risolto il 99% del problema l'1% è questo :

    ActiveCell.FormulaLocal = "=CONTA.VUOTE(Dati!J2:Dati!J11)"

    questa riga mi sta facendo impazzire perchè J2 e J11 devono essere delle variabili e non so come inserirle.

    Allego il file con il codice scritto così potrete vedere come l'ho risolto e nello stesso tempo spero che qualcuno mi risolva il problema delle due variabili.

    Grazie.
    Ho risolto il problema mancante (conteggio celle vuote con variabili)

    Grazie comunque a chi si sta interessando al mio problema.

    Direi che la discussione si può chiudere.

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  4. #4

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Ho risolto il problema mancante (conteggio celle vuote con variabili)
    Ciao,

    purtroppo non ho ancora potuto esaminare il file, lo farò senz'altro a casa.

    Ti invito, cortesemente, a descrivere come hai risolto, magari allegando il file con la correzione, in modo che altri utenti, con problema simile, trovino già la soluzione.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  5. #5
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,

    purtroppo non ho ancora potuto esaminare il file, lo farò senz'altro a casa.

    Ti invito, cortesemente, a descrivere come hai risolto, magari allegando il file con la correzione, in modo che altri utenti, con problema simile, trovino già la soluzione.
    Tranquillo non c'è problema.
    Allego il file con annesso codice VBA commentato il più possibile.

    P.S.
    se ci sono scorciatoie al mio VBA, ben vengano perchè essendo io un ex programmatore COBOL utilizzo tecniche che si rifanno al vecchio ma solido linguaggio; in particolare la "IF"
    :299:

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  6. #6

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Ciao,

    ho visto il file ma non mi è chiaro il contenuto delle righe: hai messo valori ripetuti per comodità o ci sono realmente righe uguali?
    Perché non capisco come aggreghi i dati sul foglio di destinazione; mi pare non ci sia "coerenza" in quei dati o, almeno a me, riesce difficile capirne la logica.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  7. #7
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,

    ho visto il file ma non mi è chiaro il contenuto delle righe: hai messo valori ripetuti per comodità o ci sono realmente righe uguali?
    Perché non capisco come aggreghi i dati sul foglio di destinazione; mi pare non ci sia "coerenza" in quei dati o, almeno a me, riesce difficile capirne la logica.
    i dati sono realmente duplicati.
    se un giocatore ha più di un giorno di squalifica, vengono riprodotte n righe per quante sono le giornate, dopodichè ogni giornata scontata viene evidenziata con la data della gara a cui non ha partecipato fino ad esaurimento.
    A fine campionato chi ha più di due gare ancora da scontare si trascina questo residuo all'anno calcistico successivo.
    La mia macro non fa altro che cercare questi soggetti e portarli sul foglio di destinazione dove sono evidenziati le giornate totali di squalifica e quelle ancora da scontare

    Spero di avere chiarito i tuoi dubbi :92:

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  8. #8
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,

    ho visto il file ma non mi è chiaro il contenuto delle righe: hai messo valori ripetuti per comodità o ci sono realmente righe uguali?
    Perché non capisco come aggreghi i dati sul foglio di destinazione; mi pare non ci sia "coerenza" in quei dati o, almeno a me, riesce difficile capirne la logica.
    Non sono un fenomeno con i tutorial (è il primo che faccio) ma ho fatto un piccolo video in cui spiego succintamente quanto ho scritto nel mio precedente post.
    Spero ti sia utile

    https://www.dropbox.com/s/wfxg39zo9h...sidui.avi?dl=0

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  9. #9

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Citazione Originariamente Scritto da Baloon_50 Visualizza Messaggio
    i dati sono realmente duplicati.
    se un giocatore ha più di un giorno di squalifica, vengono riprodotte n righe per quante sono le giornate, dopodichè ogni giornata scontata viene evidenziata con la data della gara a cui non ha partecipato fino ad esaurimento.
    Ok, mi sembra di avere capito, però c'è ancora una cosa che non mi quadra:
    Citazione Originariamente Scritto da Baloon_50 Visualizza Messaggio
    ...
    l'elaborazione consiste nel raggruppare e contare i records per nominativo che abbiano però :
    blank nella colonna "J" il valore della colonna "G" maggiore di 2
    allora perché non riporti PINCO PALLINO che ha in colonna G il valore 4 ed una riga con la cella J vuota?
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  10. #10
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ok, mi sembra di avere capito, però c'è ancora una cosa che non mi quadra:


    allora perché non riporti PINCO PALLINO che ha in colonna G il valore 4 ed una riga con la cella J vuota?
    Perchè Pinco Pallino ha un residuo inferiore a 2 (1 giornata ancora da scontare)

    Forse nel mio primo intervento non avevo specificato bene che il residuo deve essere > 2 a parità delle altre condizioni ("G" > 2 "J" blank)

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  11. #11

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Ho visto il tuo codice e, se mi permetti, ti darei qualche suggerimento.

    Perdona se uso un linguaggio semplificato, ma così magari vengo compreso anche dai meno eseprti.

    Usare il metodo .Select e la proprietà .Selection ed .ActiveSheet o .ActiveCell è quasi sempre inutile e spesso pericoloso.
    Inutile: perché ci si può riferire direttamente agli oggetti con cui dobbiamo interagire, creando delle istanze (variabili oggetto) o specificandone la paternità.

    Pericoloso: perché non puoi mai essere sicuro al 100% di quale sia realmente la sua paternità (l'oggetto a cui appartiene: per un range è il foglio, per un foglio è la cartella etc...)

    Ti posto il codice di una sub che fa quello che fa la tua ma senza usare .Select, .Selection etc ...
    Ho cercato di farlo il più comprensibile possibile, creando un ciclo per ogni operazione e commentando quasi tutte le righe:

    Codice: 
    Sub Riporta()
    
    
      Dim wsFrom As Worksheet
      Dim wsTo As Worksheet
      Dim rngFrom As Range
      Dim rngTo As Range
      Dim rRow As Range
      Dim bCalc As XlCalculation
      Dim nLR As Long
      Dim j As Long
      Dim nRes As Long
        
      
      With Application
        bCalc = .Calculation                'memorizzo lo stato attuale della modalità di calcolo
        .Calculation = xlCalculationManual  'disabilito il calcolo automatico
        .ScreenUpdating = False             'disabilito l'aggiornamento dello schermo
      End With
      
      On Error GoTo Exit_here_              'in caso di errore il codice va all'etichetta Exit_here_
      
      Set wsFrom = ThisWorkbook.Worksheets("Dati")    'creo l'istanza del foglio di origine dei dati
      Set wsTo = ThisWorkbook.Worksheets("Scontare")  'creo l'istanza del foglio di destinazione
      
      nLR = wsFrom.Cells(Rows.Count, 7).End(xlUp).Row 'calcolo l'ultima riga di dati utile (colonna G)
      Set rngFrom = wsFrom.Range("A2:K" & nLR)        'creo l'istanza del range di origine dei dati
      
      With wsTo     'nelle righe successive, le proprietà precedute dal punto (es: .Range) si riferiscono
                    'al foglio di destinazione
        
        'creo l'istanza del range di destinazione per ripulirla dai dati presenti
        Set rngTo = Intersect(.Range("A6").CurrentRegion, .Range("A6").CurrentRegion.Offset(2))
        rngTo.ClearContents
        rngFrom.Copy rngTo(1, 1) 'copio il range di origine e lo incollo
                                 'a partire dalla prima cella del range di destinazione (A6)
                                 
        'riassegno l'istanza del range di destinazione per riferirsi all'intervallo appena incollato
        Set rngTo = Intersect(.Range("A6").CurrentRegion, .Range("A6").CurrentRegion.Offset(2))
        nLR = rngTo.Rows.Count  'conto quante righe ha rngTo
        
        'con questo ciclo elimino le righe con giornate già scontate
        For j = nLR To 1 Step -1
          Set rRow = rngTo.Rows(j)                      'assegno ad rRow la riga j di RngTo (Aj:Lj)
          If rRow.Cells(1, "J").Value2 <> vbEmpty Then  'se la cella "Jj" non è vuota
            rRow.Delete                                 'elimino le celle Aj:Lj
          End If
        Next
        
        'riassegno l'istanza del range di destinazione per riferirsi
        'al nuovo intervallo ripulito dalle giornate già scontate
        Set rngTo = Intersect(.Range("A6").CurrentRegion, .Range("A6").CurrentRegion.Offset(2))
        
        'rimuovo i valori duplicati
        rngTo.RemoveDuplicates _
          Columns:=Array( _
                          1, 2, 3, 4, 5, 6, _
                          7, 8, 9, 10, 11, 12), _
          Header:=xlNo
        
        'riassegno l'istanza del range di destinazione per riferirsi
        'al nuovo intervallo ripulito dai duplicati
        Set rngTo = Intersect(.Range("A6").CurrentRegion, .Range("A6").CurrentRegion.Offset(2))
        nLR = rngTo.Rows.Count
        
        'con questo ciclo memorizzo in L le giornate di squalifica residue
        'ed elimino le righe con meno di 3 giornate residue
        For j = nLR To 1 Step -1
          Set rRow = rngTo.Rows(j)    'assegno ad rRow la riga j di RngTo (Aj:Lj)
          
          'assegno a nRes il risultato della formula che conta quante sono le giornate
          'ancora da scontare, esempio riferito a B10:
          '=MATR.SOMMA.PRODOTTO((Dati!$B$2:$B$41=Scontare!$B$10)*(Dati!$C$2:$C$41=Scontare!$C$10)*(Dati!$J$2:$J$41=""))
          nRes = Evaluate("SUMPRODUCT((" & rngFrom.Columns(2).Address(1, 1, 1, 1) & "=" & rRow.Cells(1, 2).Address(1, 1, 1, 1) & ")*(" & rngFrom.Columns(3).Address(1, 1, 1, 1) & "=" & rRow.Cells(1, 3).Address(1, 1, 1, 1) & ")*(" & rngFrom.Columns(10).Address(1, 1, 1, 1) & "=""""))")
          
          If nRes < 3 Then                      'se le giornate sono meno di 3
            rRow.Delete                         'elimino la riga
          Else                                  'altrimenti
             rRow.Cells(1, "L").Value2 = nRes   'scrivo il residuo in L
          End If
        Next
    
    
      End With
      
      
    
    
    Exit_here_: 'da qui comincia il codice che viene eseguito prima di uscire dalla sub
      
      With Application
        .Calculation = bCalc    'ripristino il ricalcolo come in origine
        .ScreenUpdating = True  'riabilito l'aggiornamento dello schermo
      End With
      
      If Err.Number <> 0 Then   'se si è verificato un errore
        MsgBox Err.Description  'mostro un messaggio con la descrizione
      End If
      'distruggo le isatnze degli oggetti precedentemente create
      Set rngFrom = Nothing
      Set rngTo = Nothing
      Set wsFrom = Nothing
      Set wsTo = Nothing
      
    End Sub
    Per ogni dubbio chiedi pure.
    Ultima modifica fatta da:scossa; 29/08/15 alle 17:44
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  12. #12
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ti posto il codice di una sub che fa quello che fa la tua ma senza usare .Select, .Selection etc ...
    Ho cercato di farlo il più comprensibile possibile, creando un ciclo per ogni operazione e commentando quasi tutte le righe:
    ti ringrazio per il codice e per il consiglio (quest'ultimo molto apprezzato) adesso lo guardo con calma e comunque ti farò sapere sia per dubbi che per altro :261:

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  13. #13
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Scusami Scossa, credo ci sia un piccolo errore sul codice perchè il primo atleta me lo ripete 5 volte e gli altri sono ok
    io mi sto prodigando a trovare dove non va ma credo che tu ci arrivi prima
    .

    Grazie ciao

    P.S. il file è sempre lo stesso non ho fatto altro che fare copia e incolla della tua routine.

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  14. #14

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Citazione Originariamente Scritto da Baloon_50 Visualizza Messaggio
    P.S. il file è sempre lo stesso non ho fatto altro che fare copia e incolla della tua routine.
    A me funziona bene.
    Ti allego il file (il tuo a cui ho aggiunto la mia sub in Modulo1):
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  15. #15
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    A me funziona bene.
    Ti allego il file (il tuo a cui ho aggiunto la mia sub in Modulo1):
    Perfetto molto probabilmente quello che avevo io era bacato :)
    Per quanto riguarda il codice all'80% ci sono. Adesso un po' di riposo mentale perchè sono due giorni che mi trovo davanti al pc (non so se hai notato ma il post in cui dico che ho risolto al 99% è delle 2:31 di notte).
    Ti ringrazio ancora - Ciao

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  16. #16
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Scusami Scossa ma prima della partita del Milano, ho fatto un controllo con l'aggiunta di altri dati e, purtroppo, la routine non funziona :223:
    Ti allego il file tramite dropbox (è più grande di 30Kb).

    A rigrazie :87:_

    https://www.dropbox.com/s/093lgvd9ap...iduo.xlsm?dl=0

    P.S.
    Adesso chiudo veramente il rubinetto e lo riapro domattina

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  17. #17

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Citazione Originariamente Scritto da Baloon_50 Visualizza Messaggio
    Scusami Scossa ma prima della partita del Milano, ho fatto un controllo con l'aggiunta di altri dati e, purtroppo, la routine non funziona :223:
    Ciao,
    la routine funziona bene, solo che dal precedente esempio avevo dedotto che il numero del Comunicato relativo ad una squalifica fosse sempre uguale e non che potesse cambiare (vedi Cavalcanti Dilillo Andrea):

    B
    C
    D
    E
    F
    G
    14
    CAVALCANTI DILILLO ANDREA
    14
    20/06/2015
    17/06/2015
    1
    15
    CAVALCANTI DILILLO ANDREA
    18
    20/06/2015
    17/06/2015
    1
    16
    CAVALCANTI DILILLO ANDREA
    25
    20/06/2015
    17/06/2015
    1
    17
    CAVALCANTI MARCON DOMENICO ENRICO
    14
    20/06/2015
    17/06/2015
    1


    E' giusto che ci siano 3 Comunicati con la stessa data per la stessa squalifica?

    Se confermi sistemo la sub.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  18. #18
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    E' giusto che ci siano 3 Comunicati con la stessa data per la stessa squalifica?

    Se confermi sistemo la sub.
    per n giorni di squalifica il record lo duplico e quindi sia il numero che la data sono uguali.
    Vedo da quanto mi hai inserito il numero del comunicato è diverso con data uguale e ciò non è possibile; il comunicato e la data devono essere sempre insieme non capisco come ci sia il numero diverso per stessa data
    Ultima modifica fatta da:Baloon_50; 30/08/15 alle 15:27

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  19. #19

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Citazione Originariamente Scritto da Baloon_50 Visualizza Messaggio
    il comunicato e la data devono essere sempre insieme non capisco come ci sia il numero diverso per stessa data
    Non saprei, ma è così nel file che hai allegato.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  20. #20
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3354
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Non saprei, ma è così nel file che hai allegato.
    Hai perfettamente ragione ho preso io un granchio mettendo dati non congruenti.
    Con i dati esatti funziona tutto _:214:

    Grazie ancora anche della tua pazienza :98:

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  21. #21

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Grazie a te per il riscontro.

    Alla prossima.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  22. #22
    L'avatar di Salvy
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    chivasso
    Messaggi
    28
    Versione Office
    2007 e 2010
    Likes ricevuti
    0
    Likes dati
    3
    Ciao Scossa, ho seguito con interesse la tua discussione con Baloon_50.
    ho scaricato e provato il tuo file Residuo.xlsm funzione benissimo, m
    a se lo rinomino ad esempio con: Calcolo Residuo Squalifiche.xlsm,
    quando eseguo la macro si blocca e mi dà il seguente Messaggio "Tipo non corrispondente"
    potresti aiutarmi capire e risolvere questo problemino?
    grazie

  23. #23

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Citazione Originariamente Scritto da Salvy Visualizza Messaggio
    quando eseguo la macro si blocca e mi dà il seguente Messaggio "Tipo non corrispondente"
    Ciao,

    dovresti precisare su quale istruzione (riga) si blocca.

    P.S.: non è che hai cambiato nome ai fogli?
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  24. #24
    L'avatar di Salvy
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    chivasso
    Messaggi
    28
    Versione Office
    2007 e 2010
    Likes ricevuti
    0
    Likes dati
    3
    No non ho cambiato nome ai fogli.
    volevo mandarti una schermata catturata di 13 kb ma non lo riconosce e non lo carica,
    comunque la segnalazione "Tipo non corrispondente" è identica a quella creata con msgbox
    scusa il disturbo e grazie per la tua cortese disponibilità

  25. #25
    L'avatar di Salvy
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    chivasso
    Messaggi
    28
    Versione Office
    2007 e 2010
    Likes ricevuti
    0
    Likes dati
    3
    Ciao Scossa ti invio il link del file rinominato così puoi verificare di persona cosa succede
    https://drive.google.com/open?id=0Bw...nlmMmtlbTA1WUk

    grazie
    buona serata

  26. #26

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Citazione Originariamente Scritto da Salvy Visualizza Messaggio
    Ciao Scossa ti invio il link del file rinominato così puoi verificare di persona cosa succede
    https://drive.google.com/open?id=0Bw...nlmMmtlbTA1WUk
    Ciao,

    devi aver messo il file in una cartella privata perché non mi fa accedere.

    Comunque prova a commentare la riga
    On Error GoTo Exit_here_
    in modo che l'esecuzione si interrompa e così vedi su quale istruzione interviene il debugger.

    P.S.: se riesci a mettere il file tanto meglio.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  27. #27
    L'avatar di Salvy
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    chivasso
    Messaggi
    28
    Versione Office
    2007 e 2010
    Likes ricevuti
    0
    Likes dati
    3
    ho provato a caricare il file anche se è di 42 kb non so se lo ha preso anche se apparentemente non mi ha dato errori. grazie

  28. #28
    L'avatar di Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4937
    Versione Office
    2013
    Likes ricevuti
    1122
    Likes dati
    1131
    Citazione Originariamente Scritto da Salvy Visualizza Messaggio
    ho provato a caricare il file anche se è di 42 kb non so se lo ha preso anche se apparentemente non mi ha dato errori. grazie
    Ciao Salvy ho alzato il limite massimo per l'inserimento degli allegati a 50 kb ciao

  29. #29
    L'avatar di Salvy
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    chivasso
    Messaggi
    28
    Versione Office
    2007 e 2010
    Likes ricevuti
    0
    Likes dati
    3

    msg Errore "tipo non corrispondente"

    Grazie Gerardo, provo a rispedire il file in caso prima, non lo abbia preso correttamente.
    buona giornata

  30. #30

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Citazione Originariamente Scritto da Salvy Visualizza Messaggio
    ma se lo rinomino ad esempio con: Calcolo Residuo Squalifiche.xlsm,
    quando eseguo la macro si blocca e mi dà il seguente Messaggio "Tipo non corrispondente"
    Il problema è dovuto alla lunghezza del nome del file, infatti se rinomini il file "Calcolo Residuo Squali.xlsm" funziona.
    Questo è dovuto al fatto che il metodo Evaluate accetta una stringa lunga al massimo 255 caratteri.

    Comunque, visto che le formule sono tutte sullo stesso file, ho risolto eliminando il nome del file dalla formula.

    Sostituisci il codice nel tuo file con questo:


    Codice: 
    Sub Riporta()
      Dim wsFrom As Worksheet
      Dim wsTo As Worksheet
      Dim rngFrom As Range
      Dim rngTo As Range
      Dim rRow As Range
      Dim bCalc As XlCalculation
      Dim nLR As Long
      Dim j As Long
      Dim nRes As Long
      Dim sEval As String
        
      
      With Application
        bCalc = .Calculation                'memorizzo lo stato attuale della modalità di calcolo
        .Calculation = xlCalculationManual  'disabilito il calcolo automatico
        .ScreenUpdating = False             'disabilito l'aggiornamento dello schermo
      End With
      
      On Error GoTo Exit_here_              'in caso di errore il codice va all'etichetta Exit_here_
      
      Set wsFrom = ThisWorkbook.Worksheets("Dati")    'creo l'istanza del foglio di origine dei dati
      Set wsTo = ThisWorkbook.Worksheets("Scontare")  'creo l'istanza del foglio di destinazione
      
      nLR = wsFrom.Cells(Rows.Count, 7).End(xlUp).Row 'calcolo l'ultima riga di dati utile (colonna G)
      Set rngFrom = wsFrom.Range("A2:K" & nLR)        'creo l'istanza del range di origine dei dati
      
      With wsTo     'nelle righe successive, le proprietà precedute dal punto (es: .Range) si riferiscono
                    'al foglio di destinazione
        
        'creo l'istanza del range di destinazione per ripulirla dai dati presenti
        Set rngTo = Intersect(.Range("A6").CurrentRegion, .Range("A6").CurrentRegion.Offset(2))
        rngTo.ClearContents
        rngFrom.Copy rngTo(1, 1) 'copio il range di origine e lo incollo
                                 'a partire dalla prima cella del range di destinazione (A6)
                                 
        'riassegno l'istanza del range di destinazione per riferirsi all'intervallo appena incollato
        Set rngTo = Intersect(.Range("A6").CurrentRegion, .Range("A6").CurrentRegion.Offset(2))
        nLR = rngTo.Rows.Count  'conto quante righe ha rngTo
        
        'con questo ciclo elimino le righe con giornate già scontate
        For j = nLR To 1 Step -1
          Set rRow = rngTo.Rows(j)                      'assegno ad rRow la riga j di RngTo (Aj:Lj)
          If rRow.Cells(1, "J").Value2 <> vbEmpty Then  'se la cella "Jj" è non è vuota
            rRow.Delete                                 'elimino le celle Aj:Lj
          End If
        Next
        
        'riassegno l'istanza del range di destinazione per riferirsi
        'al nuovo intervallo ripulito dalle giornate già scontate
        Set rngTo = Intersect(.Range("A6").CurrentRegion, .Range("A6").CurrentRegion.Offset(2))
        
        'rimuovo i valori duplicati
        rngTo.RemoveDuplicates _
          Columns:=Array( _
                          1, 2, 3, 4, 5, 6, _
                          7, 8, 9, 10, 11, 12), _
          Header:=xlNo
        
        'riassegno l'istanza del range di destinazione per riferirsi
        'al nuovo intervallo ripulito dai duplicati
        Set rngTo = Intersect(.Range("A6").CurrentRegion, .Range("A6").CurrentRegion.Offset(2))
        nLR = rngTo.Rows.Count
        
        'con questo ciclo memorizzo in L le giornate di squalifica residue
        'ed elimino le righe con meno di 3 giornate residue
        For j = nLR To 1 Step -1
          Set rRow = rngTo.Rows(j)    'assegno ad rRow la riga j di RngTo (Aj:Lj)
          
          'assegno a nRes il risultato della formula che conta quante sono le giornate
          'ancora da scontare, esempio riferito a B10:
          '=MATR.SOMMA.PRODOTTO((Dati!$B$2:$B$41=Scontare!$B$10)*(Dati!$C$2:$C$41=Scontare!$C$10)*(Dati!$J$2:$J$41=""))
          sEval = "SUMPRODUCT((" & rngFrom.Columns(2).Address(1, 1, 1, 1) & "=" & rRow.Cells(1, 2).Address(1, 1, 1, 1) & ")*(" & rngFrom.Columns(3).Address(1, 1, 1, 1) & "=" & rRow.Cells(1, 3).Address(1, 1, 1, 1) & ")*(" & rngFrom.Columns(10).Address(1, 1, 1, 1) & "=""""))"
          sEval = Replace(sEval, "[" & ThisWorkbook.Name & "]", "")
          nRes = Evaluate(sEval)
          
          If nRes < 3 Then                      'se le giornate sono meno di 3
            rRow.Delete                         'elimino la riga
          Else                                  'altrimenti
             rRow.Cells(1, "L").Value2 = nRes   'scrivo il residuo in L
          End If
        Next
      End With
      
      
    Exit_here_: 'da qui comincia il codice che viene eseguito prima di uscire dalla sub
      
      With Application
        .Calculation = bCalc    'ripristino il ricalcolo come in origine
        .ScreenUpdating = True  'riabilito l'aggiornamento dello schermo
      End With
      
      If Err.Number <> 0 Then   'se si è verificato un errore
        MsgBox Err.Description  'mostro un messaggio con la descrizione
      End If
      'distruggo le isatnze degli oggetti precedentemente create
      Set rngFrom = Nothing
      Set rngTo = Nothing
      Set wsFrom = Nothing
      Set wsTo = Nothing
      
    End Sub
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

Discussioni Simili

  1. [Risolto] Raggruppare righe e colonne in base a formattazione
    Di gabrig nel forum Domande su Excel VBA e MACRO
    Risposte: 19
    Ultimo Messaggio: 06/03/17, 15:34
  2. [Risolto] Formattazione condizionale in base a più condizioni
    Di nick0573 nel forum Domande su Excel in generale
    Risposte: 3
    Ultimo Messaggio: 03/02/17, 11:59
  3. Eliminare righe sotto certe condizioni
    Di saturn87 nel forum Domande su Excel in generale
    Risposte: 14
    Ultimo Messaggio: 13/08/16, 14:19
  4. Estrapolare valore in base a più condizioni
    Di superpioix nel forum Domande su Excel in generale
    Risposte: 28
    Ultimo Messaggio: 30/07/16, 17:05
  5. Restituire dei valori in base a piu condizioni
    Di Ale64 nel forum Domande su Excel in generale
    Risposte: 7
    Ultimo Messaggio: 05/07/16, 22:36

Tag per Questa Discussione

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
  •