VBA EXCEL utilisation variable dans condition

Résolu
vbatta16 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
 Info -
Bonjour,


Donc je cherche à utiliser une variable dans une formule de conditionnement dans VBA excel, genre :
(je lis chaque ligne : si la cellule à gauche est alimenté à "OK", je surligne la celulle (ligne, colonne) en vert). En l'état ci-dessous, cela ne fonctionne pas.. Qqun pourrait m'aider ? Encore une histoire d'apostrophe ??
Merci bcp

For Ligne = 4 To iMax

Cells(Ligne, Colonne).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=SI(RC[-1] =""OK"";VRAI;FAUX)"
Selection.FormatConditions(1).Interior.ColorIndex = 4

Next
A voir également:

10 réponses

Info
 
Bonjour,

Quelque chose du genre ?

Sub Test2() 

    Dim Ligne As Integer 
    Dim iMax As Integer 
    Dim Colonne As Integer 
         
    iMax = 10: Colonne = 4 
     
    With ActiveSheet 
        For Ligne = 4 To iMax 
            ActiveSheet.Cells(Ligne, Colonne).Select 
            Selection.EntireRow.Interior.ColorIndex = xlNone 
            If (.Cells(Ligne, Colonne).Offset(0, -1).Value = "OK") Then 
                Selection.EntireRow.Interior.ColorIndex = 4 
            End If 
        Next Ligne 
    End With 


End Sub 


Info
0
vbatta16 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour
Merci pour la réponse, mais petite précision qui a son importance, je voudrai que cela reste une "mise en forme conditionnelle" car l'alimentation à "OK" se fera par l'utilisateur directement dans EXCEL, donc après le présent traitement batch
D'où mon utilisation de la formule :
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= etc..

Merci
0
Info
 
re:

Malheureusement, je ne suis pas expert de formule dans xl.

J'ai tenté de remodeler votre code et ça me donne ceci :

Sub Test3()

    Dim Ligne As Integer
    Dim iMax As Integer
    Dim Colonne As Integer
         
    iMax = 10: Colonne = 4
     
    With ActiveSheet
        For Ligne = 4 To iMax
            .Cells(Ligne, Colonne).Select
            Selection.Interior.ColorIndex = xlNone
            Selection.FormatConditions.Delete
            Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
                "=""SI(RC[-1] = """"OK"""";VRAI;FAUX]"""
            Selection.FormatConditions(1).Interior.ColorIndex = 4
        Next Ligne
    End With


End Sub


Sinon, un autre plus expert en formule que moi devra vous venir en aide.

INfo
0
vbatta16 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   1
 
En fait, je ne comprends pas trop pourquoi le code ci-dessous ne fonctionne pas

For Ligne = 4 To iMax

Cells(Ligne, Colonne).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=SI(RC[-1] =""OK"";VRAI;FAUX)"
Selection.FormatConditions(1).Interior.ColorIndex = 4

Next

Est ce la fonction FormatConditions qui ne supporte pas les variables ? ou il y a juste une erreur de syntaxe.. ?

Merci
Vincent
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Info
 
re:

Une chose est clair pour moi !

La syntaxe : "=SI(RC[-1] =""OK"";VRAI;FAUX)" me génère une erreur
lors de l'exécution.

À l'aide de l'enregistreur de macro, j'ai recréé la syntaxe suivante
qui est reconnu par VBA :

"=""SI(RC[-1] = """"OK"""";VRAI;FAUX]"""

Info
0
vbatta16 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   1
 
Je viens de tester mais le pble ,c'est qu'il écrit dans la forme conditionnelle dans excel :
="SI(RC[-1]=""OK"";VRAI;FAUX)"

=> alors que voudrai que ce soit : ="SI(K6="OK";VRAI;FAUX)" par exemple si je suis à la ligne 6
En gros, il ne m'a pas traduit RC[-1] en position relative, mais il l'a gardé en caractère

Merci pour ton aide néanmoins

Qqun d'expert a t-il une idée ?

Merci
0
vbatta16 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   1
 
Sinon, ta formule avec Cells(Ligne, Colonne).Offset(0, -1).Value = "OK" du début me plaisait bien, mais je n'arrive pas à la combiner avec la fonction FormatConditions.add
0
Info
 
re:

Je crois connaître une autre solution en traduisant la procédure
en fonction volatile qui opère seulement lors d'un changement de l'utilisateur.

Je vais tenter de construire cette fonction et de la déposer ici.

Info
0
vbatta16 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour

En fait, j'ai réussis à partir de ta formule :

For Ligne = 4 to iMax

Cells(Ligne, F05_ControleCRA).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=SI(" & Cells(Ligne, F05_ControleCRA).Offset(0, 0).Address(RowAbsolute:=False) & "=""OK"";VRAI;FAUX)"
Selection.FormatConditions(1).Interior.ColorIndex = 4

Next

Par contre, j'ai un autre problème, quand j'applique un tri sur ces données par la suite : les valeurs des champs sont triées mais pas les mises en forme conditionnelles !!!
Cela signifie que l'on ne peut pas trier des mises en forme conditionnelles dans EXCEL ??
Qqun a une idée ?

Merci
0
Info
 
re:

J'ai aussi trouvé une solution sans formule qui fonctionne très bien.

Place le code suivant derrière la feuille en adaptant les plages (Range)

Option Explicit
'

Private Sub Worksheet_Change(ByVal Target As Range)

    'Désactiver les évènements pour éviter la récursivité
    Application.EnableEvents = False

    If (Target.Column = 3) Then
        
        Dim Plage As Range, Cible As Range
    
        Set Plage = Range("C4:C10")
                
        For Each Cible In Plage
            If (Target.Value = "OK") Then
                Target.Offset(0, 1).Interior.ColorIndex = 4
            Else
                Target.Offset(0, 1).Interior.ColorIndex = xlNone
            End If
        Next Cible
    
    End If
    
    ' Réactiver les évènements
    Application.EnableEvents = True

End Sub


Info
0