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

10 réponses

  1. 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
  2. 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
  3. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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