0
votes

Sélection de la ligne d'une couleur et d'une cellule vierge d'une autre couleur

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. XXX


1 commentaires

Essayez lignes (cell.row) .interior.colorindex = 6 . Cela dit, y a-t-il une raison pour laquelle vous ne pouvez pas utiliser de formatage conditionnel pour cela?


3 Réponses :


3
votes

Vous pouvez le faire directement avec le formatage conditionnel:

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.

 Entrez la description de l'image ici

Voici la règle:

 Entrez la description de l'image ici


1 commentaires

@ kms5549 Ce est 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.



2
votes

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


1 commentaires

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.



0
votes
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

0 commentaires