VBA EXCEL utilisation variable dans condition
Résolu/Fermé
vbatta16
Messages postés
11
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
24 janvier 2016
-
28 janv. 2011 à 13:04
Info - 28 janv. 2011 à 19:13
Info - 28 janv. 2011 à 19:13
A voir également:
- VBA EXCEL utilisation variable dans condition
- Excel cellule couleur si condition texte - Guide
- Notice d'utilisation - Guide
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
10 réponses
Bonjour,
Quelque chose du genre ?
Info
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
vbatta16
Messages postés
11
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
24 janvier 2016
1
28 janv. 2011 à 14:16
28 janv. 2011 à 14:16
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
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
re:
Malheureusement, je ne suis pas expert de formule dans xl.
J'ai tenté de remodeler votre code et ça me donne ceci :
Sinon, un autre plus expert en formule que moi devra vous venir en aide.
INfo
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
vbatta16
Messages postés
11
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
24 janvier 2016
1
28 janv. 2011 à 15:08
28 janv. 2011 à 15:08
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
vbatta16
Messages postés
11
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
24 janvier 2016
1
28 janv. 2011 à 15:55
28 janv. 2011 à 15:55
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
="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
vbatta16
Messages postés
11
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
24 janvier 2016
1
28 janv. 2011 à 16:00
28 janv. 2011 à 16:00
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
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
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
vbatta16
Messages postés
11
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
24 janvier 2016
1
28 janv. 2011 à 19:00
28 janv. 2011 à 19:00
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
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
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)
Info
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