Buongiorno a tutti,
ho questo file di excel (qui), dove un collega andato ormai in pensione mi aveva inserito una macro per copiare la formattazione condizionale (quella con il set di icone).

Quando lavoro questo file, (ogni decade devo inserire una colonna con i nuovi valori), ho la necessità di inserire la formattazione condizionale in una colonna, subordinata al confronto della colonna precedente…e tutto questo lo devo fare manualmente, cioè:

1. Inserisco la colonna con i nuovi valori
2. Applico la formattazione condizionale alla prima cella della nuova colonna
3. Eseguo la macro che copia la formattazione condizionale su tutte le restanti celle della nuova colonna


questo è il codice VBA
Codice: 
Sub FormattaSetIcone()
 Dim rSource As Range, rTarget As Range, rCell As Range
 Dim lRowOffs1 As Long, lColOffs1 As Long, lRowOffs2 As Long, lColOffs2 As Long
 
  On Error Resume Next
     Set rSource = Application.InputBox( _
                   "Seleziona la cella contenente i criteri di formattazine condizionale da copiare", _
                   "Copia Criteri Formattazione", , , , , , 8)
     If rSource Is Nothing Then Exit Sub
     If rSource.Cells.Count > 1 Then
       Call MsgBox("E' possibile selezionare solamente una cella!", vbCritical + vbOKOnly, "Copia Criteri Formattazione")
       Exit Sub
     End If
 
    Set rTarget = Application.InputBox( _
                   "Seleziona il range di destinazione dei criteri di formattazione condizionale", _
                   "Copia Criteri Formattazione", , , , , , 8)
     If rTarget Is Nothing Then Exit Sub
   On Error Resume Next
 
  With rSource.FormatConditions(1)
     If Err.Number = 9 Then
       Call MsgBox("La cella selezionata non contiene criteri di formattazione condizionale!", _
                   vbCritical + vbOKOnly, "Copia Criteri Formattazione")
       Exit Sub
     End If
     With .IconCriteria(2)
       lRowOffs1 = Range(Replace(.Value, "=", vbNullString)).Row - rSource.Row
       lColOffs1 = Range(Replace(.Value, "=", vbNullString)).Column - rSource.Column
     End With
     With .IconCriteria(3)
       lRowOffs2 = Range(Replace(.Value, "=", vbNullString)).Row - rSource.Row
       lColOffs2 = Range(Replace(.Value, "=", vbNullString)).Column - rSource.Column
     End With
   End With
 
  rSource.Copy
   For Each rCell In rTarget
     With rCell
       .FormatConditions.Delete
 
      .PasteSpecial xlPasteFormats
       With .FormatConditions(1)
         .IconCriteria(2).Value = "=" & rCell.Offset(lRowOffs1, lColOffs1).Address
         .IconCriteria(3).Value = "=" & rCell.Offset(lRowOffs2, lColOffs2).Address
       End With
     End With
   Next
 End Sub
Questo è il risultato che ottengo:




Siccome la formattazione condizionale è sempre la stessa, e il confronto è sempre riferito alla colonna precedente, vorrei chiedere cortesemente se è possibile velocizzare e automatizzare il processo di cui sopra, anche perchè le colonne contengono molti più valori dell'esempio in questione.

Grazie a tutti.