Je souhaite colorer les cellules qui ont la valeur "# N/A" dans la feuille de courant. Pour ce faire, j'utilise la macro suivante:
Sub ColorCells()
Dim Data As Range
Dim cell As Range
Set currentsheet = ActiveWorkbook.Sheets("Comparison")
Set Data = currentsheet.Range("A2:AW1048576")
For Each cell In Data
If cell.Value = "#N/A" Then
cell.Interior.ColorIndex = 3
End If
Next
End Sub
Mais la ligne If cell.Value = "#N/A" Then
donne une erreur: incompatibilité de type. Peut-être que quelqu'un peut aider à comprendre où est l'erreur? Merci
Solution non VBA:
Utilisez la règle de mise en forme conditionnelle avec la formule suivante: =ISNA(A1)
(pour mettre en surbrillance les cellules avec toutes les erreurs - pas seulement #N/A
, utilisez =ISERROR(A1)
)
Solution VBA:
Votre code parcourt 50 mln cellules. Pour réduire le nombre de cellules, j'utilise .SpecialCells(xlCellTypeFormulas, 16)
et .SpecialCells(xlCellTypeConstants, 16)
pour ne renvoyer que les cellules contenant des erreurs (note, j'utilise If cell.Text = "#N/A" Then
).
Sub ColorCells()
Dim Data As Range, Data2 As Range, cell As Range
Dim currentsheet As Worksheet
Set currentsheet = ActiveWorkbook.Sheets("Comparison")
With currentsheet.Range("A2:AW" & Rows.Count)
.Interior.Color = xlNone
On Error Resume Next
'select only cells with errors
Set Data = .SpecialCells(xlCellTypeFormulas, 16)
Set Data2 = .SpecialCells(xlCellTypeConstants, 16)
On Error GoTo 0
End With
If Not Data2 Is Nothing Then
If Not Data Is Nothing Then
Set Data = Union(Data, Data2)
Else
Set Data = Data2
End If
End If
If Not Data Is Nothing Then
For Each cell In Data
If cell.Text = "#N/A" Then
cell.Interior.ColorIndex = 4
End If
Next
End If
End Sub
Remarque , pour mettre en surbrillance les cellules sans erreur (pas seulement "#N/A"
), remplacez le code suivant
If Not Data Is Nothing Then
For Each cell In Data
If cell.Text = "#N/A" Then
cell.Interior.ColorIndex = 3
End If
Next
End If
avec
If Not Data Is Nothing Then Data.Interior.ColorIndex = 3
UPD: (comment ajouter une règle des FC via VBA)
Sub test()
With ActiveWorkbook.Sheets("Comparison").Range("A2:AW" & Rows.Count).FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:="=ISNA(A1)"
.Item(1).Interior.ColorIndex = 3
End With
End Sub
Utilisez la mise en forme conditionnelle au lieu de VBA pour mettre en évidence les erreurs.
L'utilisation d'une boucle VBA telle que celle que vous avez publiée prendra beaucoup de temps.
l'instruction If cell.Value = "#N/A" Then
ne fonctionnera jamais. Si vous insistez pour utiliser VBA pour mettre en évidence les erreurs, essayez plutôt ceci.
Sub ColorCells ()
Dim Data As Range
Dim cell As Range
Set currentsheet = ActiveWorkbook.Sheets("Comparison")
Set Data = currentsheet.Range("A2:AW1048576")
For Each cell In Data
If IsError(cell.Value) Then
cell.Interior.ColorIndex = 3
End If
Next
End Sub
Préparez-vous à une longue attente, car la procédure parcourt 51 millions de cellules.
Il existe des moyens plus efficaces de réaliser ce que vous voulez faire. Mettez à jour votre question si vous avez un changement d’esprit.
Vous devez utiliser cell.Text = "# N/A" au lieu de cell.Value = "# N/A". L'erreur dans la cellule est en réalité juste le texte stocké dans la cellule.