2

Tentative d'appliquer une mise en forme conditionnelle via VBA à une feuille de calcul contenant 25K + lignes. Il n'y a pas de set lastcolumn ou last row donc avoir de la difficulté à appliquer le code ci-dessous pour une raison quelconque. Lorsque je vérifie le format de condition sur chaque ligne, il continue à se référer à la ligne 3 tout le temps. Si je mets RC » & lastCol +3 & « = FALSE » il reconnaît cela comme RC25 cellulaire par exemple:.Mise en forme conditionnelle avec la formule xlR1C1

Range(Cells(3, FoundCol), Cells(lastrowRecon, FoundCol)).Select 
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=R[]C" & lastCol + 3 & "=FALSE" 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .Color = 255 
     .TintAndShade = 0 
    End With 

Répondre

1

Quand je vérifie la condition mise en forme sur chaque ligne, il répète sans cesse à la ligne 3 tout le temps ... Si je mets RC » & lastCol +3 & « = FALSE » il recon Ceci est la cellule RC25 par exemple

RC25 est une référence de cellule de style xlA1. C'est la 25ème rangée dans la colonne RC.

Vous ne pouvez pas mettre une formule xlR1C1 dans une règle de mise en forme conditionnelle lorsque Application.ReferenceStyle est xlA1; inversement, vous ne pouvez pas mettre une formule de style xlA1 dans un système exécutant actuellement un style de formule xlR1C1. Cependant, il est assez facile de basculer entre les deux ou d'utiliser Application.ConvertFormula pour changer la formule pour vous. Il n'y a aucun paramètre Formula1R1C1 à la méthode .FormatConditions.Add.

Je pense que votre formule xlR1C1 serait meilleure que "=NOT(RC" & (lastCol + 3) & ")".

Sub wqewqwew() 
    Dim lastCol As Long, xlA1formula As String 
    lastCol = 22 
    With Selection 
     .FormatConditions.Delete 
     Application.ReferenceStyle = xlA1 
     'when Application.ReferenceStyle = xlA1 
     xlA1formula = Application.ConvertFormula("=NOT(RC" & (lastCol + 3) & ")", xlR1C1, xlA1, , .Cells(1)) 
     With .FormatConditions.Add(Type:=xlExpression, Formula1:=xlA1formula) 
      .Interior.Color = 255 
      .SetFirstPriority 
     End With 

     .FormatConditions.Delete 
     Application.ReferenceStyle = xlR1C1 
     'when Application.ReferenceStyle = xlR1C1 
     With .FormatConditions.Add(Type:=xlExpression, Formula1:="=NOT(RC" & (lastCol + 3) & ")") 
      .Interior.Color = 255 
      .SetFirstPriority 
     End With 

     'switch back 
     Application.ReferenceStyle = xlA1 
    End With 
End Sub 
+0

Dans le style R1C1, RC25 signifie la colonne Y avec la rangée de cellules de formule. Donc, si vous mettez = RC25 dans A1, cela signifie que dans le style xlA1, cela équivaut à $ Y1. – sktneer

+0

@sktneer - Uniquement si 'Application.ReferenceStyle = xlR1C1'. Si 'Application.ReferenceStyle = xlA1' alors' = RC25' signifie la 471ème colonne, ligne 25. – Jeeped

+0

Ouais absolument correct. Je parlais avec la référence du titre de la question seulement. – sktneer

0

lastcol n'a pas reçu de valeur il va toujours être zéro

de même avec lastrowrecon et FoundCol

+0

Salut, Oui, je l'ai dans le code plus haut. La formule conditionnelle prend le bon Col. Juste des problèmes avec la ligne. Ci-dessous le code que j'ai utilisé pour obtenir lastCol: lastCol = ActiveSheet.Cells (2, Columns.Count) .End (xlToLeft) .Column – Conor

+0

Et les valeurs sont? –

+0

lastCol = 25 dans ce cas – Conor