Grandezza dei caratteri condizionale



  • Grandezza dei caratteri condizionale
    di MAV57 data: 28/03/2014 01:14:09

    Buonasera a tutti,
    mi presento sono Marcello da Napoli; un po' per passione e per divertimento, per il resto per impegni professionali, sono a contatto con questo programma che non finisce mai di stupirmi.
    Ben trovati a tutte e a tutti.

    Voglio sottoporre un quesito per un problema che sto cercando di affrontare: in un foglio ho alcune celle che al verificarsi di una condizione si riempiono con del testo.
    Ho provveduto a rendere il testo più sintetico possibile ma non è stato sufficiente; neanche con una dimensione ridotta preventivamente del carattere ho risolto il problema perché non più leggibile.

    Domanda:
    posso in modo condizionale variare la grandezza dei caratteri in virtù della lunghezza del testo contenuto?
    Esempio: con 45 caratteri la dimensione del testo può essere 12, oltre 45 devo ridurre.

    La mia idea sarebbe quella di dimensionare il carattere, al variare della lunghezza del contenuto, lasciando inalterata la dimensione della cella. Se non ricordo male qualcosa di simile è presente in Publisher o software simile.

    *********
    Grazie!
    Marcello
    *********



  • di Lucas87 data: 28/03/2014 08:03:51

    Certo che c'è.
    Tasto DX sulla cella o sul gruppo di celle
    Formato cella
    Scheda allineamento
    Spunta "riduci e adatta"
    Viene modificata la dimensione del carattere mantenendo fissa la dimensione della cella



  • di MAV57 data: 28/03/2014 11:51:12

    Grazie per la puntuale e sollecita risposta!

    Questa soluzione è utile. La mia intenzione era quella di utilizzare una macro o una soluzione condizionale per verificare di volta in volta se le celle interessate (purtroppo non contigue) dovessero avere come grandezza il carattere 12 oppure ridursi di conseguenza: in sintesi impostare il carattere 12 solo se la lunghezza del testo lo consente.
    *********
    Grazie!
    Marcello
    *********



  • di Mister_x (utente non iscritto) data: 28/03/2014 15:51:53

    ciao

    sub da mettere nel foglio

    ciao
     
    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Len(Target.Value) > 45 Then
      Cells(Target.Row, Target.Column).ShrinkToFit = True
    End If
    End Sub
    






  • di MAV57 (utente non iscritto) data: 29/03/2014 03:25:58

    Grazie per la soluzione!
    Ne faccio subito tesoro!

    *********
    Grazie!
    Marcello
    *********



  • di lepat (utente non iscritto) data: 29/03/2014 08:04:53

    un'altra soluzione che modifica la dimensione dei caratteri invece di adeguare la larghezza della colonna
     
    Sub Adatta1()
    Dim nWidth As Single, nHeigth As Single, cell As Range
    Const nMin As Single = 7   'dimensione minima scelta
    For Each cell In Range("A1:A10")
      With cell
        nWidth = .ColumnWidth
        .Columns.AutoFit
        Do While .ColumnWidth > nWidth
          If .ColumnWidth <= nWidth Then
            .ColumnWidth = nWidth
          Else
            .Font.Size = Application.WorksheetFunction.Max(nMin, .Font.Size - 1)
            .Columns.AutoFit
          End If
        Loop
        .ColumnWidth = nWidth
      End With
    Next
    End Sub
    



  • di MAV57 (utente non iscritto) data: 29/03/2014 19:06:45

    Grazie per questa soluzione!
    Era quella che in verità speravo di ottenere per semplificarmi la vita.
    La provo subito!

    *********
    Grazie!
    Marcello
    *********



  • di MAV57 data: 29/03/2014 20:41:29

    Buonasera!
    Ho provato entrambe le soluzioni.
    Premesso che sono a digiuno di vba, non so dove metter le mani.

    Riguardo la prima riconosco che oltre a mettere il codice nel foglio non riesco a vedere dove verificarne il funzionamento.
    Riguardo la seconda mi son reso conto che qualcosa non va ma non so cosa. Sembra che vada in loop.

    Questo è il file campione.
    www.dropbox.com/sh/d2sw1xo2v57waf7/fY9UcTlTJ1
    *********
    Grazie!
    Marcello
    *********



  • di lepat (utente non iscritto) data: 30/03/2014 06:13:43

    prova così
     
    Sub Adatta1()
    Dim nWidth As Single, nHeigth As Single, cell As Range
    Const nMin As Single = 7   'dimensione minima scelta
    For Each cell In Range("F3:F40")
       If Len(cell.Text) > 45 Then cell.Font.Size = 7
    Next
    End Sub



  • di Mister_x (utente non iscritto) data: 30/03/2014 16:12:10

    ciao

    scaricato il tuo file, e fatto alcune prove ho dedotto di effettuare la riduzione del font in base a step di lunghezza superiore a 45 dato che tu ai gia' inserito le celle a ritorno a capo automatico
    questi valori li puoi variare in base alle tue esigenze
    la sub() in questione va inserita nel foglio di utilizzo

    ciao
     
    Sub ridimensiona()
    Dim cell As Range
    For Each cell In Range("F3:F" & Cells(Rows.Count, "F").End(xlUp).Row)
       If Len(cell.Text) < 44 Then
        cell.Font.Size = 14
       ElseIf Len(cell.Text) < 50 Then
        cell.Font.Size = 12
        ElseIf Len(cell.Text) < 56 Then
        cell.Font.Size = 10
        Else
        cell.Font.Size = 8
       End If
    Next
    End Sub
    






  • di MAV57 (utente non iscritto) data: 01/04/2014 11:01:08

    Buongiorno!
    Ho provato entrambe le soluzioni. Funzionano come speravo.
    Le devo adattare al foglio su cui devo lavorare (non quello dell'esempio): penso di usare un pulsante per avviare la macro prima di avviare la stampa del report ogni volta che termina la nuova elaborazione.
    Che ne pensate dell'associazione al pulsante? O c'è un'altra soluzione?

    *********
    Grazie!
    Marcello
    *********