Se connecter avec
S'enregistrer | Connectez-vous

Mise en forme conditionnelle des cellules d'une plage de données

Dernière réponse : dans Programmation

Bonsoir à tous,

Dans mon programme, j’ai introduit dans la colonne « H » une fonction qui test à la fois la colonne « B » et « G » et met en conclusion dans « H » des observations (Texte)..
1- Reco
2- Test
3- Demo
En fonction de ces observations j’ai programmé une couleur sur toute la ligne allant de (B :H)
Par ailleurs, la formule renvoi des erreurs dans la collonne « H » #VALEUR! Si elle ne trouve rien dans la colonne « b » (le premier test), c’est normal..
J’ai pensé donc, de mettre une couleur de fond « Blanc »pour ces erreurs de formules afin de les dissimulées et parfaire l’affichage.
Le programme fonctionne à merveille sur mon PC sous Excel 2010, mais sur d’autres (sous Excel 2007 & 97) sa beug, il renvoi une erreur ‘1004’.. ?? à la ligne 28 :.ThemeColor = xlThemeColorDark1

Ci-après le code:

  1. Range("H2").Select
  2. ActiveCell.FormulaR1C1 = _
  3. "=IF(SEARCH(""total"",C[-6], 1), IF(RC[-1]=0, ""Reco "", IF(RC[-1]>0, ""TEST"",""Demo"")))"
  4. Do While Not (IsEmpty(ActiveCell))
  5. Cells(ActiveCell.Row, 8).Formula = "=IF(SEARCH(""total"",C[-6], 1), IF(RC[-1]=0, ""Reco "", IF(RC[-1]>0, ""TEST"",""Demo"")))"
  6. Selection.Offset(1, 0).Select
  7. Loop
  8. Sheets("Feuil5").Select
  9. lig = Cells.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
  10. col = Cells.Find("*", , xlFormulas, , xlByColumns, xlPrevious).Row
  11. Dim derlig As Long
  12. derlig = Range("A65536").End(xlUp).Row
  13. Range(Cells(1, 2), Cells(derlig, 8)).Select
  14. With Selection
  15. .FormatConditions.Delete
  16. .FormatConditions.Add Type:=xlExpression, Formula1:="=$H1=""Reco"""
  17. .FormatConditions(1).Interior.ColorIndex = 15
  18. .FormatConditions.Add Type:=xlExpression, Formula1:="=$H1=""Demo"""
  19. .FormatConditions(2).Interior.ColorIndex = 40
  20. .FormatConditions.Add Type:=xlExpression, Formula1:="=$H1=""TEST"""
  21. .FormatConditions(3).Interior.ColorIndex = 35
  22. End With
  23. Columns("H:H").Select
  24. Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
  25. "=ESTERREUR(H1)"
  26. Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
  27. With Selection.FormatConditions(1).Font
  28. .ThemeColor = xlThemeColorDark1
  29. .TintAndShade = 0
  30. End With



Est-ce que c’est un problème de version ?? si Oui, comment dois-je l'écrire pour qu'il soit déroulé même sur des anciennes versions?

Je vous remercie par avance pour votre aide.

Karim_1972 a édité ce message
Lassé par la pub ? Créez un compte
Expert Programmation

Salut Karim,

Oh le beau message bien formaté ;) 
Ton problème est effectivement dû au versionning.

En effet, les propriétés ThemeColor et TintAndShade n'existent pas dans ces versions inférieures.

-------------------------------

Sinon, bouh que ce code est laid !
A chaque fois que tu utilises Select ou Activate, il y a une erreur de conception.
Veux-tu vraiment sélectionner ces objects ? Non, tu veux y faire référence !
Alors fais les choses bien.

A chaque fois que tu écris :
  1. ' Pas bon
  2. Truc.Select
  3. Selection.Machin()
remplace par :
  1. ' Ah, là c'est mieux
  2. Truc.Machin()

T'inquiète pas, t'es pas le 1er, si je ne l'ai pas fait remarquer 500 fois sur ce site, c'est que je ne l'ai jamais dit !

Ça donne :
  1. Dim ta_cellule As Range
  2. Dim ta_derlig As Range
  3.  
  4. Set ta_cellule = Worksheets("???").Range("H2")
  5. Set f5 = Worksheet("Feuil5")
  6.  
  7. ta_cellule.FormulaR1C1 = "=IF(SEARCH(""total"",C[-6], 1), IF(RC[-1]=0, ""Reco "", IF(RC[-1]>0, ""TEST"",""Demo"")))"
  8. Do While Not (IsEmpty(ta_cellule))
  9. ta_cellule.Cells(ActiveCell.Row, 8).Formula = "=IF(SEARCH(""total"",C[-6], 1), IF(RC[-1]=0, ""Reco "", IF(RC[-1]>0, ""TEST"",""Demo"")))"
  10. Set ta_cellule = ta_cellule.Offset(1, 0)
  11. Loop
  12.  
  13. lig = f5.Cells.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
  14. col = f5.Cells.Find("*", , xlFormulas, , xlByColumns, xlPrevious).Row
  15.  
  16. Set derlig = f5.Range("A65536").End(xlUp)
  17. With f5.Range(f5.Cells(1, 2), derlig.Cells(8))
  18. .FormatConditions.Delete
  19. .FormatConditions.Add Type:=xlExpression, Formula1:="=$H1=""Reco"""
  20. .FormatConditions(1).Interior.ColorIndex = 15
  21. .FormatConditions.Add Type:=xlExpression, Formula1:="=$H1=""Demo"""
  22. .FormatConditions(2).Interior.ColorIndex = 40
  23. .FormatConditions.Add Type:=xlExpression, Formula1:="=$H1=""TEST"""
  24. .FormatConditions(3).Interior.ColorIndex = 35
  25. End With
  26. With f5.Columns("H")
  27. .FormatConditions.Add Type:=xlExpression, Formula1:="=ESTERREUR(H1)"
  28. .FormatConditions(.FormatConditions.Count).SetFirstPriority
  29. End With
  30. f5.Columns("H").FormatConditions(1).Font.ColorIndex = 3

Il y a mille bonnes raisons pour faire comme ça ;) 

Revenons à ta solution qui consiste à changer les couleurs pour cacher tes erreurs !
Et si à la place, tu compliquais tes formules avec un =IF(ISERROR(formule);"";formule) ?
zeb a édité ce message

Bonsoir Zeb;
Merci infiniment pour ces éclaircissements, car là j'apprends vraiment des choses... De fait, le programme est devenu très souple et facile à lire..Merci encore.
J'ai pas pu tester la solution que tu m'a proposée car je viens de rentrer d'une mission en France.. je le ferais dès demain et je te tiendrais au courant.
J'espere que je vais réussir à compliquer encore plus la fonction;)

A bientôt.
Expert Programmation

Eh, ce n'est plus de la programmation VB, mais de l'art d'utiliser ton tableur.
Ce qui est ici hors sujet. :o 

Qu'importe si on n'en abuse pas ;) 

Tu as ton résultat, éventuellement en erreur dans une cellule de la colonne A.
Dans la colonne B, tu ajoute une formule telle que cette que je te proposais et qui fait référence à la cellule de la colonne A.
Et tu caches la colonne A.
zeb a édité ce message

J'ai réussi tout de même à faire quelque chose en VB :na: 
mais il reste à le parfaire avec ton aide:
J'ai mis à la place:
  1. With Selection
  2. Columns("H:H").Select
  3. .SpecialCells(xlCellTypeFormulas, xlErrors).Value = 0
  4. End With
  5. On Error GoTo 0

J'aimerais affiché à la place du "0" un caractère blanc (Espace) comment pourais-je l'écrire en VB??

Merci par avance.
Karim_1972 a édité ce message
Lassé par la pub ? Créez un compte