+ Rispondi al Thread
Pagina 1 di 4 123 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31

Discussione: Excel2010: celle ricompilate, ritrovare formato %

  1. #1
    LuDo non è in linea Scolaretto
    Luogo
    Parigi
    Post
    149

    Excel2010: celle ricompilate, ritrovare formato %

    Buongiorno a tuti.
    Ho fatto un foglio Excel per fare le buste paga.
    Per ogni busta paga viene generata, in un foglio "Storico", una riga di dati la cui prima cella contiene un valore che la individua inequivocabilmente, tipo "PALLINO-Pinco-2018-01"; le celle successive contengono "tutti" i dati, ma proprio tutti: adesso mi spiego.

    Lavoro in un'amministrazione "strana" (fuori dal territorio nazionale), in cui le rubriche delle buste paga rischiano di cambiare in funzione di regolamentazioni locali volatili.
    Si rischiano da un anno all'altro o da un mese all'altro cambi di denominazione, cambi di tasso, aggiunte o soppressioni di righe.
    Quindi, per il recupero dei dati (in un foglio "Ristampe") ho preferito recuperare non solo il titolo di ogni rubrica (p.es.: "Assegni familiari") ma anche far precedere ogni valore dalla posizione che deve prendere nello statino per fare una ristampa fedele all'originale quando serve.
    Mi ritrovo quindi con dei valori come "C,123:0,004", dove tutto ciò che precede i due punti ":" è la posizione (cella C123) e tutto ciò che segue è il valore.
    L'immissione dei dati funziona perfettamente.
    Nulla da eccepire neanche nel meccanismo di recupero dei dati, che è un po' complicato ma efficace: la riga viene copiata nel foglio "Ristampe", dove c'è un range dedicato al recupero, nel quale con un gioco di STRINGA.ESTRAI() separo posizione e valore; infine, di nuovo con VBA, mando i soli valori nell'area di stampa nella posizione appropriata.

    Ecco, il problema si verifica proprio qui.
    Infatti, tutti i formati di percentuale, saltano.
    Quel "0,004" dell'esempio di prima dovrebbe apparire sotto forma di "0,40 %" e invece appare come un brutto "0,004".
    Ho riformattato tutte le celle come si deve... niente! Ogni volta che carico una busta paga, il formato torna in quel modo.
    Mi sono accorto però che entrando con F2 in ogni cella e battendo Invio, il formato si rimette in percentuale come lo voglio io (si vede che la formattazione della cella, da qualche parte è registrata). Allora ho pensato di usare il comando Calculate nel VBA.
    Ma anche questo non funziona. Ecco qui sotto la macro.
    Qualcuno saprebbe dirmi come riottenere il formato originario di ogni cella?
    Grazie per qualsiasi suggerimento!
    codice:
    Sub DaOrigADest()
    ' a partire dall'area di recupero tramite formule, copia i dati nell'area di stampa (2 pgs)
    Range("StampaPg1").ClearContents
    Range("StampaPg2").ClearContents 'questi due ranges sono l'area di stampa
    
    ' pagina1:
    co = Range("InizPrepPg1").Column
    ro = Range("InizPrepPg1").Row
    cd = Range("InizSt1").Column
    rd = Range("InizSt1").Row
    For i = 0 To 64
        For j = 0 To 7
            If Cells(ro + i, co + j) <> "" Then
            Cells(rd + i, cd + j).Value = Cells(ro + i, co + j)
            'Cells.Calculate 'non funziona
            End If
        Next j
    Next i
    
    ' pagina2:
    co = Range("InizPrepPg2").Column
    ro = Range("InizPrepPg2").Row
    cd = Range("InizSt2").Column
    rd = Range("InizSt2").Row
    For i = 0 To 64
        For j = 0 To 7
            If Cells(ro + i, co + j) <> "" Then Cells(rd + i, cd + j).Value = Cells(ro + i, co + j)
        Next j
    Next i
    'Range("StampaPg1").Calculate
    'Range("StampaPg2").Calculate
    'Range("e8").Value = "Fatto."
    ActiveSheet.Calculate
    MsgBox ("Le aree di stampa 1 e 2 sono state compilate. Se necessario, modificare direttamente nelle aree di stampa.")
    End Sub

  2. #2
    GiuseppeMN non è in linea Scribacchino
    Post
    745
    Buona sera, LuDo;
    non ho potuto eseguire test approfonditi, ma potresti provare con:
    codice:
     Cells(ro + i, co + j).NumberFormat = "0.00%"
    Per cortesia, fai sapere se può esserti d'aiuto.



    A disposizione.

    Buona serata.

    Giuseppe

  3. #3
    LuDo non è in linea Scolaretto
    Luogo
    Parigi
    Post
    149
    Ciao, GiuseppeMN, e grazie per l'interessamento.
    Purtroppo non va bene.

    L'ho provato in diversi modi: innanzitutto, siccome il tuo suggerimento agisce sulla cella di provenienza del dato, ho messo la riga di comando prima di recuperare il dato (così rimetto per prima cosa la cella di provenienza nel formato giusto, poi acchiappo il dato e lo mando alla sua destinazione). Poi, ho provato anche a mettere il tuo comando dopo aver recuperato il dato, agendo stavolta sulla cella di destinazione. Infine, mi sono assicurato di aver rimesso manualmente (non in vba, ma in Formato celle) un formato percentuale in tutte le celle in cui transitano dei dati in questione (non ero sicuro di averlo fatto prima).
    Ebbene, nessuno di questi tentativi ha avuto successo.

    Preciso, a margine, che il formato percentuale mi serve solo in una certa parte dell'area di stampa, mentre altre parti devono restare nel formato numero.
    E insisto anche sul fatto che in ognuna delle celle col formato sbagliato, quando premo successivamente F2 e poi Invio (quindi confermo il dato che già c'è dentro), il formato torna ad essere quello giusto, che ho preimpostato nella finestra Formato Celle. (Quindi secondo me la soluzione sta qui: perché il comando Calculate non funziona?).

    Purtroppo, nel mio file ci sono praticamente solo dati sensibili, quindi esito a postarlo; se lo vuotassi dai dati sensibili non funzionerebbe più niente...

  4. #4
    GiuseppeMN non è in linea Scribacchino
    Post
    745
    Buona giornata, LuDo;
    @LuDo, scrive:
    ... siccome il tuo suggerimento agisce sulla cella di provenienza del dato ...
    hai perfettamente ragione, la mia era solo una prova che volevo proporti indipendentemente dalla Cella sulla quale applicare il Formato.

    Non saprei che altro dirti se non che, sul Foglio di lavoro che ho utilizzato per i miei Test, il Formato risulta corretto; voglio dire, partendo da un Formato numerico con tre decimali (Esempio 0,004), dopo l'esecuzione del Codice VBA il Valore proposto è 0,40%


    A disposizione

    Giuseppe

  5. #5
    LuDo non è in linea Scolaretto
    Luogo
    Parigi
    Post
    149
    Era un ottimo suggerimento, comunque.
    Ci deve essere qualcosa che non lo fa funzionare, come non funzionano gli altri tentativi miei...
    Vediamo se a qualcun'altro vengono in mente altre soluzioni...

  6. #6
    Marius44 non è in linea Scolaretto
    Luogo
    Catania
    Post
    286
    Ciao
    ho ripreso il suggerimento di GiuseppeMN (un saluto) al quale ho aggiunto la Funzione CDbl e sembra funzionare.
    Nelle mie prove (poche in verità) il dato risultate, anche se scritto come stringa) è in grado di sopportare operazioni.
    Ho inserito il dato in A1 per ottenere il risultato in B1 (a te adeguarlo alle tue necessità, se funziona)

    Cells(1, 2) = Format(CDbl(Cells(1, 1)), "0.00%")

    Ciao,
    Mario

  7. #7
    LuDo non è in linea Scolaretto
    Luogo
    Parigi
    Post
    149
    Ciao Marius44 e grazie anche a te per l'interessamento.
    Ho ripresola tua riga di comando, l'ho fatta diventare:

    codice:
            Cells(rd + i, cd + j).Value = Format(CDbl(Cells(ro + i, co + j)), "0.00%")
    ma mi si blocca e su CDbl mi dice: tipo non corrispondente...
    Puoi commentare questo CDbl, per favore?

  8. #8
    Marius44 non è in linea Scolaretto
    Luogo
    Catania
    Post
    286
    Ciao
    Forse dipende dalla versione di Excel? Io ho la 2010 e non si blocca.
    Ti riporto cosa dice la Guida di VBA

    Esempio di funzione CDbl
    In questo esempio la funzione CDbl viene utilizzata per convertire un'espressione in Double.
    Dim MyCurr, MyDouble
    MyCurr = CCur(234.456784) ' MyCurr è di tipo Currency.
    MyDouble = CDbl(MyCurr * 8.2 * 0.01) ' Converte il risultato in Double.

    Ciao,
    Mario

  9. #9
    Angelo_Tbp non è in linea Novello
    Post
    17
    Quote Originariamente inviato da LuDo Visualizza il messaggio
    Ciao Marius44 e grazie anche a te per l'interessamento.
    Ho ripresola tua riga di comando, l'ho fatta diventare:

    codice:
            Cells(rd + i, cd + j).Value = Format(CDbl(Cells(ro + i, co + j)), "0.00%")
    ma mi si blocca e su CDbl mi dice: tipo non corrispondente...
    Puoi commentare questo CDbl, per favore?
    Magari è banale, ma da un semplice test di registrazione macro ho ottenuto:

    codice:
    Cells(rd + i, cd + j).Style = "Percent"
    Cells(rd + i, cd + j).NumberFormat = "0.00%"
    funge?

  10. #10
    LuDo non è in linea Scolaretto
    Luogo
    Parigi
    Post
    149
    Marius44, grazie per il commento
    Angelo_Tbp grazie anche a te per il suggerimento.

    Purtroppo non ci siamo.
    Qualsiasi azione da vba sul formato delle celle non ha effetto. Anzi, per meglio dire non ha effetto immediato. Perché in realtà il formato si applica alla cella, in quanto se poi (come già detto prima) vado a fare F2 e Invio confermando il dato che ci si trova, la cella ritrova miracolosamente il formato giusto, cioè quello che, manualmente o attraverso vba, gli è stato attribuito.
    Per inciso, succede la stessa cosa con le date: in una cella c'è scritto "data di pagamento" e in quella accanto "43159". Se in quest'ultima faccio F2 e Invio, diventa "28/02/2018".
    Insomma, è come se ci fossero due livelli di visualizzazione: uno "grezzo", nativo, insomma non so come dire, in cui il dato viene copiato dalla mia macro fregandosene alla grande dei formati che posso decidere. L'altro è il formato "vero", che ho deciso io, ma che non prende effetto senza un'azione di riconferma.
    Secondo me, questa riconferma si fa con Cells(...).Calculate, ma non funziona. Come avete potuto vedere dal codice nel mio primo post, ho tentato anche uno Sheets(...).Calculate alla fine della macro: sempre niente...

+ Rispondi al Thread
Pagina 1 di 4 123 ... ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi