Je suis capable de mettre en surbrillance des cellules vides en jaune, mais je ne peux pas comprendre comment souligner également la ligne entière. L'objectif final est d'avoir la ligne en surbrillance jaune et le spectacle de cellules vierges comme rouge. Je ne sais pas si cela sera problématique si une ligne a plusieurs cellules rouge / vierge - je ne voudrais pas mettre en évidence la ligne complète en jaune et risquer de perdre les globules rouges. Ce que je suis jusqu'à présent n'est pas grand chose - il a été reconstitué à travers Googling et Reddit, donc je m'excuse si cela est négligé ou toutes les lignes sont inutiles. Je ne connais pas VBA en dehors de ce que j'ai pu venir chercher de nécessité. Je cherche des forums mais je n'ai pas beaucoup trouvé sur cette question spécifique. J'ai des exigences supplémentaires - Colonnes L & K ne sont pas les seuls champs qui auront besoin de vérification. Je devrai vérifier les valeurs en double, les dates d'expiration, les valeurs incorrectes connues, etc., mais je pense qu'une fois que j'ai eu cette base de référence, je pourrai modifier et personnaliser une macro plus robuste. Toute aide sur cela serait grandement appréciée.
3 Réponses :
Vous pouvez le faire directement avec le formatage conditionnel: P>
Ici, j'ai mis en évidence une rangée jaune manuellement. Vous pouvez transformer le jaune en surbrillance sur / off selon les besoins. Vous pouvez également définir des plages de colonne spécifiques nécessaires ou plusieurs lignes si nécessaire. P>
Voici la règle: p>
@ kms5549 Ce est i> la meilleure solution - que ce soit par l'intermédiaire de l'interface utilisateur Excel ou de manière programmatique, vous voulez un formatage conditionnel pour faire face à tout cela. Envisagez de coder le formatage conditionnel au lieu d'évaluer les valeurs cellulaires et de l'application explicitement des formats de cellules - effectuera beaucoup mieux et contribuera beaucoup mieux à la puissance de calcul d'Excel.
Vous pouvez faire quelque chose comme ceci:
Sub StatusReportQA()
Const MAX_COLS As Long = 20 'for example
Dim sht As Worksheet, rw As Long
Dim LR As Long, rngRed As Range, rngRow As Range
Set sht = Sheets("Page1_1")
sht.Rows("1:4").Delete Shift:=xlUp 'delete cognos headers
LR = sht.Range("A" & Rows.Count).End(xlUp).Row
For rw = 2 To LR
Set rngRed = Nothing 'reset range for problem cells
With sht.Rows(rw)
Set rngRow = .Cells(1).Resize(1, MAX_COLS) 'the row of data
'clear any previous fill
rngRow.Interior.ColorIndex = xlNone
'perform your checks
If Len(.Cells(1, "K").Value) = 0 Then BuildRange rngRed, .Cells(1, "K")
If Len(.Cells(1, "L").Value) = 0 Then BuildRange rngRed, .Cells(1, "L")
'done checking
If Not rngRed Is Nothing Then
'found some problems, so color the row and then the problem cells
rngRow.Interior.Color = vbYellow
rngRed.Interior.Color = vbRed
End If
End With
Next rw
End Sub
'utility sub for building a range
Sub BuildRange(ByRef rngTot As Range, rngAdd As Range)
If rngTot Is Nothing Then
Set rngTot = rngAdd
Else
Set rngTot = Application.Union(rngTot, rngAdd)
End If
End Sub
Wow c'est plus que je m'attendais à ce que cela fonctionne parfaitement, merci beaucoup !! Vous venez de m'a sauvé beaucoup de temps que j'apprécie vraiment cela.
Sub StatusReportQA()
Dim LR As Long
Dim cell As Range
Dim WS As Worksheet
'delete cognos headers
Rows("1:4").Delete Shift:=xlUp
Set WS = Worksheets("Page1_1")
LR = WS.UsedRange.SpecialCells(xlCellTypeLastCell).Row
For Each cell In Range("K2:K" & LR)
If cell = vbNullString Or cell.Offset(0, 1) = vbNullString Then
cell.EntireRow.Interior.ColorIndex = 6
If cell = vbNullString Then cell.Interior.ColorIndex = 3
If cell.Offset(0, 1) = vbNullString Then cell.Offset(0, 1).Interior.ColorIndex = 3
End If
Next cell
End Sub
Above is some code that gives the expected outcome. The first thing is that when working with objects in excel (worksheets, cells, ranges, etc) rarely is it required to .Select them, and if possible, selecting them should be avoided to get the desired outcome you have to think about the order in which things need to happen. First you have to check to see if the cell in either of the columns you are interested in are blank If cell = vbNullString Or cell.Offset(0, 1) = vbNullString Then if either of those are blank, you make the highlight the entire row using cell.EntireRow to set the color index value. Then check for which cell is empty and set it's color index value
Essayez
lignes (cell.row) .interior.colorindex = 6 code>. Cela dit, y a-t-il une raison pour laquelle vous ne pouvez pas utiliser de formatage conditionnel pour cela?