2017-10-18 9 views
0

Je cherche à mettre en évidence certaines cellules dans une feuille de calcul lorsqu'une valeur est entrée dans une colonne différente. Je réalise que cela peut être fait avec un formatage conditionnel mais, en raison des circonstances au sein de l'entreprise, je dois utiliser VBA. (La feuille de calcul est passé sur un autre programme qui ne peut pas lire la mise en forme conditionnelle)VBA Mettre en surbrillance des cellules lorsqu'une autre valeur est présente

Je suis en train de mettre en évidence 11 colonnes différentes dans ma gamme de valeurs chaque fois RIEN est entré dans la colonne L. Par exemple, lorsqu'une date entré dans L2, puis C2, J2, K2, etc. sont surlignés en jaune.

Voici ce que j'ai trouvé ... malheureusement, quand je lance la macro, rien ne se passe. Je le vois fonctionner, mais je n'obtiens aucun résultat - pas même un message d'erreur. Merci d'avance pour le temps que vous prenez pour m'aider!

Dim rng As Range, r As Range 

Set wb = ThisWorkbook 
Set sht1 = wb.Sheets("From GIS") 
Set sht2 = wb.Sheets("To MapCall") 

Set rng = Intersect(sht2.UsedRange, Range("L:L")).Cells 


For Each r In rng 
    If r.Value = "" Then 
     Cells(r.Row + 1, "C,J,K,Q,AI,AV,AW,AX,AY,AZ,BR").Interior.Color = RGB(255, 255, 0) 

    End If 
Next r 
+0

Vous devez utiliser 'Cells (r.Row + 1," C ")' etc - soit des lignes individuelles ou configurer une boucle. Dans votre ligne 'rng', vous devez également spécifier une feuille. – SJR

Répondre

1

S'il vous plaît donner à ce essayer et changer r.Value = « » à r.Value <> « » que vous souhaitez appliquer une couleur si quelque chose est entré dans la plage pas quand il est vide. Tweak selon ce dont vous avez réellement besoin. Je ne suis pas sûr pourquoi avez-vous utilisé r.Row + 1? Ce n'est pas ce que vous voulez, remplacez i = r.Row + 1 dans le code ci-dessous avec i = r.Row.

De même, il est recommandé de déclarer toutes les variables utilisées dans le code.

Dim wb As Workbook 
Dim sht1 As Worksheet, sht2 As Worksheet 
Dim rng As Range, r As Range, clrRng As Range 
Dim i As Long 
Set wb = ThisWorkbook 
Set sht1 = wb.Sheets("From GIS") 
Set sht2 = wb.Sheets("To MapCall") 

Set rng = Intersect(sht2.UsedRange, Range("L:L")).Cells 
For Each r In rng 
    If r.Value = "" Then 
     i = r.Row + 1 
     Set clrRng = Union(Range("C" & i), Range("J" & i & ":K" & i), Range("Q" & i), Range("AI" & i), Range("AV" & i & ":AZ" & i), Range("BR" & i)) 
     clrRng.Interior.Color = RGB(255, 255, 0) 
    End If 
Next r 
+0

Super! Cela fait juste ce que je cherchais! Pour plus de clarté, j'utilise r.Row + 1 parce que je veux qu'il saute la rangée d'en-têtes. S'il y a un moyen plus facile de le faire, je suis tout ouïe. Je n'utilise pas VBA dans mon travail mais on m'a demandé de l'apprendre pour ce projet. Ce site a été inestimable! Je vous remercie. – Rmoore

+0

@Rmoore Vous êtes les bienvenus! Content que ça a marché. Stick avec si cela fonctionne pour vous de cette façon. – sktneer

0

Une méthode consisterait à create a union of ranges.

Sub test() 

    Dim Rng As Range, r As Range, uRng As Range, row As Long 

    Set wb = ThisWorkbook 
    Set sht1 = wb.Sheets("From GIS") 
    Set sht2 = wb.Sheets("To MapCall") 

    Set Rng = Intersect(sht2.UsedRange, Range("L:L")).Cells 

    For Each r In Rng 
     If r.Value <> "" Then 
      row = r.row 

      Set uRng = Union(Cells(row, "C"), Cells(row, "J")) 'Etc... Keep going with each column 
      uRng.Interior.Color = RGB(255, 255, 0) 

     End If 
    Next r 

End Sub 
+0

Alors ça se rapproche de ce que je cherche! Au moins, je reçois des cellules en surbrillance! Il semble que ce n'est que la mise en surbrillance des cellules PAST la zone de gamme .. donc si J2 à J10 dans la gamme, J11 est mis en évidence seulement. – Rmoore

+0

Passé, comme dans la rangée suivante? Si c'est le cas, c'est parce que votre code a appelé r.row + 1. Vous pouvez supprimer le +1. J'ai mis à jour le code pour 'row = r.row' plutôt que' row = r.row + 1'. Voyez si cela aide. –

+0

Je viens de relire votre question aussi. Vous vouliez mettre en évidence des cellules lorsque 'L' n'était pas vide. Donc j'ai mis à jour votre partie du code de 'If r.Value =" "Then' à' If r.Value <> "" Then' –