Format conditionnel spécifique!besoin de macro ou pas?

idimpact

XLDnaute Nouveau
Salut le forum!

Voici mon soucis :

Aujourd'hui dans mon tableau j'utilise la mise en forme conditionnelle pour colorier ma ligne si la valeur de la colonne E correspond à "test".

Si la ligne 5 est coloriée et que A4=A5 alors je veux colorier la ligne 4 et ainsi de suite:cool:

Vous trouverez un exemple en piece jointe
 

idimpact

XLDnaute Nouveau
Re : Format conditionnel spécifique!besoin de macro ou pas?

Le système des formules conditionnelles ralentissait tout le système, meme pour un simple scrolldown sur la feuille de calcul, tout était plus lent... Rentrer une valeur dans une cellule, je valide avec entrée (1 à 2 secondes de sablier)

Je n'ai pas testé avec les formules matricielles, pour en avoir utiliser dans d'autres fichiers, il fallait compter 6 secondes pour l'ajout d'une ligne.

Sur mon fichier la macro met entre 9 et 10 secondes pour s'exécuter (1000 lignes), je lui attribue un raccourcis clavier afin de ne pas faire recalculer excel trop souvent!


merci pour les conseils et ne vous inquiétez pas je ne compte pas lacher le psote après les services rendus. Je vous écris du Canada les horaires sont décalés et ce matin j'étais sur un auter projet.

Cordialement
 

job75

XLDnaute Barbatruc
Re : Format conditionnel spécifique!besoin de macro ou pas?

Sur mon fichier la macro met entre 9 et 10 secondes pour s'exécuter (1000 lignes),

10 secondes c'est bien long... Trop long, donc pas possible d'utiliser une évènementielle...

N'y aurait-il pas des formules avec des fonctions volatiles (MAINTENANT, DECALER, INDIRECT) ?

Essayez, pour voir, la macro suivante :

Code:
Sub EtendreTest()
Dim tablo, plage As Range, d As Object, cel As Range, txt
Application.ScreenUpdating = False
Application.Calculation = xlManual
Application.EnableEvents = False
[F:F].ClearContents
On Error Resume Next
tablo = Array("test1", "test2", "test3") 'conditions MFC à adapter
Set plage = [E2:E65536].SpecialCells(xlCellTypeConstants, 2)
Set d = CreateObject("Scripting.Dictionary")
For Each cel In plage.Offset(, -4)
  If Not d.Exists(cel.Value) Then
    If IsNumeric(Application.Match(cel.Offset(, 4), tablo, 0)) Then
      txt = cel
      d.Add txt, txt
      [A:A].Replace txt, 1, LookAt:=xlWhole
      Set plage = [A:A].SpecialCells(xlCellTypeConstants, 1)
      plage.Offset(, 5) = cel.Offset(, 4)
      plage = txt
    End If
  End If
Next
Application.EnableEvents = True
Application.Calculation = xlAutomaric
Application.ScreenUpdating = True
End Sub
J'ai juste ajouté Application.Calculation = xlManual et Application.Calculation = xlAutomatic.

A+
 

job75

XLDnaute Barbatruc
Re : Format conditionnel spécifique!besoin de macro ou pas?

Re,

Attention, faute de frappe, j'avais écrit Automaric...

Mais la je ne vois pas ce que vous voulez dire :

lorsque je change un code MFC existant elle ne va pas supprimer le contenu de la colonne F des lignes precedentes

Pouvez-vous m'expliquer avec ce fichier (12) :
 

Pièces jointes

  • test(12).zip
    15.2 KB · Affichages: 14

idimpact

XLDnaute Nouveau
Re : Format conditionnel spécifique!besoin de macro ou pas?

Je ne sais pas si cela vient de la modification auomaric automatic mais ma maro fonctionne correctement et rapidement avec les dernieres modifications! Pourquoi je n'ai pas eu de message d'erreur avec le automaric???:confused:
 

job75

XLDnaute Barbatruc
Re : Format conditionnel spécifique!besoin de macro ou pas?

Re,

1) Vous ne deviez pas avoir Option Explicit, Automaric était considérée comme une variable (nulle).

2) Pour gagner sur le temps de calcul de la MFC, modifiez les formules :

=$F2="test1"

au lieu de

=OU($E2="test1";$F2="test1")

A+
 

job75

XLDnaute Barbatruc
Re : Format conditionnel spécifique!besoin de macro ou pas?

Bonjour idimpact, le forum,

Et si l'on supprimait toute MFC idimpact :confused:

Pouvez-vous ensuite voir ce que donne ceci sur votre fichier de 1000 lignes :

Code:
Sub EtendreTest()
Dim tablo1, tablo2, plage As Range, d As Object
Dim cel As Range, txt As String, coul As Variant
Application.ScreenUpdating = False
Application.Calculation = xlManual
Application.EnableEvents = False
On Error Resume Next
Intersect([A2:E65536], ActiveSheet.UsedRange) _
  .Interior.ColorIndex = xlNone 'effacement des couleurs
tablo1 = Array("test1", "test2", "test3", "test4", "test5")
tablo2 = Array(3, 40, 8, 6, 15) 'codes couleurs
Set plage = [E2:E65536].SpecialCells(xlCellTypeConstants, 2)
Set d = CreateObject("Scripting.Dictionary")
For Each cel In plage.Offset(, -4)
  txt = cel
  If Not d.Exists(txt) Then
    coul = Application.Match(cel.Offset(, 4), tablo1, 0)
    If IsNumeric(coul) Then
      d.Add txt, txt
      [A:A].Replace txt, 1, LookAt:=xlWhole
      Set plage = [A:A].SpecialCells(xlCellTypeConstants, 1)
      Intersect(plage.EntireRow, [A:E]) _
        .Interior.ColorIndex = tablo2(coul - 1)
      plage = txt
    End If
  End If
Next
Application.EnableEvents = True
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub
Nota 1 : ainsi plus de problème sur Excel 2003 pour le nombre de couleurs.

Nota 2 : depuis le début je filtre le tableau d'une manière un peu spéciale...

J'ai vérifié : c'est plus rapide qu'en utilisant le filtre automatique.

A+
 

Pièces jointes

  • test(13).zip
    17.1 KB · Affichages: 15

job75

XLDnaute Barbatruc
Re : Format conditionnel spécifique!besoin de macro ou pas?

Re idimpact,

Nota 2 : depuis le début je filtre le tableau d'une manière un peu spéciale...

J'ai vérifié : c'est plus rapide qu'en utilisant le filtre automatique.

Pouvez-vous quand même le vérifier sur le fichier réel :
 

Pièces jointes

  • test(13) avec filtre automatique.zip
    17.7 KB · Affichages: 16
Dernière édition:

idimpact

XLDnaute Nouveau
Re : Format conditionnel spécifique!besoin de macro ou pas?

Bonjour!! En effet les dernières macros sont plus efficaces, le temps d'exécution pour mon fichier de 1000 lignes est passé à environ une seconde,meme un peu moins. C'est parfait en plus il sera compatible avec Excel 2003:cool:

Je suis impressionné! J'ai encore beaucoup de chemin à parcourir pour maitriser VBA!
 

Discussions similaires

Statistiques des forums

Discussions
312 515
Messages
2 089 230
Membres
104 073
dernier inscrit
thierry.billotti