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
 

job75

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

Rebonjour,

S'il y a plusieurs valeurs (conditions MFC) en colonne E, on peut utiliser :

Code:
Sub EtendreTest()
Dim plage As Range, d As Object, cel As Range, txt$
Application.ScreenUpdating = False
On Error Resume Next
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
    txt = cel
    d.Add txt, txt
    [A:A].Replace txt, 1, LookAt:=xlWhole
    Set plage = [A:A].SpecialCells(xlCellTypeConstants, 1)
    plage.Offset(, 4) = cel.Offset(, 4)
    plage = txt
  End If
Next
End Sub
Fichier (5).

Edit : si l'on veut plus de 3 conditions pour la MFC, il faut utiliser Excel 2007 ou suivantes.

A+
 

Pièces jointes

  • test(5).zip
    15.9 KB · Affichages: 24
  • test(5).zip
    15.9 KB · Affichages: 18
  • test(5).zip
    15.9 KB · Affichages: 21
Dernière édition:

job75

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

Re,

Il est peut-être préférable d'ajouter les valeurs en colonne F :

plage.Offset(, 5) = cel.Offset(, 4)

AInsi en effaçant cette colonne F on repart à zéro...

Fichier(6).

A+
 

Pièces jointes

  • test(6).zip
    15.9 KB · Affichages: 23
  • test(6).zip
    15.9 KB · Affichages: 25
  • test(6).zip
    15.9 KB · Affichages: 23

idimpact

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

merci job 75!

Pour le format conditionnel, je suis sous 2007 donc pas de problèmes sur le nombre de conditions.

J'ai un soucis avec la macro, par exemple si je tape des valeur en E2 et E4 et en E5 je rentre la valeur "test3". La macro ne me colorie pas pas les lignes E2 et E4, elle ajoute en colonne F la valeur E2 aux lignes concernées.

J'ai du mal a comprendre la macro, j'ai bien essayé de la modifier mais sans succès.:(
 

job75

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

Re,

En colonne E il ne faut pas entrer n'importe quoi, mais les valeurs utilisées par la MFC.

Et pour une compagnie donnée, c'est la 1ère valeur trouvée en colonne E qui détermine ce qui est entré en colonne E - version (5) - ou en colonne F - version (6).

Autrement, s'il y a plusieurs valeurs pour une compagnie, laquelle choisir ???

A+
 

idimpact

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

Merci pour ces explications!

En effet dans la colonne E, j'ai des données qui ne sont pas sous MFC. Toutes mes MFC sont des statuts définitifs, autrement dit impossible d'avoir deux MFC différentes pour la meme compagnie.

En gros je demande a la macro lorsqu'elle rencontre une ligne coloriée, de me colorier toutes les lignes ayant la meme valeur en colonne A que la ligne coloriée

:)
 

job75

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

Re,

Bon je vois. J'ai donc complété :

1) grâce à cette instruction, seules les valeurs utilisées par la MFC sont traitées :

tablo = Array("test1", "test2", "test3") 'conditions MFC à adapter

2) la colonne F est renseignée seulement quand la cellule en colonne E est vide.

Dites-moi si cela vous convient.

A+
 

Pièces jointes

  • test(7).zip
    16.4 KB · Affichages: 18

idimpact

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

Désolé mais le problème est que si j'efface un code MFC (statut en colonne E) ou le modifie les cellules précédentes restent coloriées.

La macro vient colorier uniquement les lignes qui ont une cellule vide en colonne E.

En gros, la solution que tu m'as proposé par formule est parfaite exeptée le ralentissement d'excel qui est du à la mise en forme conditionnelle avec la formule
=DECALER(Sheet1!$A2;;;EQUIV("test";Sheet1!$E2:$E$1000;0))

Merci pour ton aide! je n'arrive définitivement pas à modifier ta macro, trop la langage inconnu!!

Set d = CreateObject("Scripting.Dictionary")
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)
 

job75

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

Re,

Désolé mais le problème est que si j'efface un code MFC (statut en colonne E) ou le modifie les cellules précédentes restent coloriées.

Il faut réinitialiser tout, en effaçant la colonne F.

La macro vient colorier uniquement les lignes qui ont une cellule vide en colonne E.

Cela me paraissait logique, mais si vous voulez tout colorer, voyez le fichier (8).

Maintenant si vous voulez que VBA fasse exactement ce que faisaient mes formules, c'est possible mais lourd.

Faut-il que le tableau soit trié ?

A+
 

Pièces jointes

  • test(8).zip
    16.4 KB · Affichages: 19

idimpact

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

Ok, je ne pensais pas que la démarche était si lourde, je vais utiliser la dernière macro (8) et informer mes collègues de faire attention lors du renseignement du statut de la compagnie!!

Je souhaite la faire fonctionner selon un évenement :

valeur test1, test2,test3 dans la colonne E.

Macro évènementielle dans le Private Module de la Feuille en Question :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = '$E' Then
If Me.Range('E') = "test1" Or "test2" Or "test3" Then
End If
End If
End Sub

???
 

job75

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

Re,

Mettre dans le code de la feuille, à la place du bouton :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A,E:E")) Is Nothing Then Exit Sub
Application.EnableEvents = False
EtendreTest
Application.EnableEvents = True
End Sub
Et au début de la macro j'ai mis :

[F:F].ClearContents

Fichier (9).

A+
 

Pièces jointes

  • test(9).zip
    15.2 KB · Affichages: 19

job75

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

Re,

Hum, mieux vaut mettre les Application.EnableEvents dans la macro elle-même...

Fichier(10).

A+
 

Pièces jointes

  • test(10).zip
    15.4 KB · Affichages: 18

idimpact

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

:cool: Magnifique:cool:

un GRAND merci pour votre aide, tout fonctionne parfaitement et j'ai réussi à adapter la macro à mon véritable fichier (trop lourd pour etre partagé) le tout fonctionne parfaitement sans ralentir de trop la machine.

Merci pour votre patience et merci de ne pas m'avoir "abandonné en route"!

Bonne journée
 

job75

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

Bonjour idimpact, le fil, le forum,

VBA nous a montré l'utilité de la colonne F.

Alors voici 2 solutions par formules matricielles en F2.

Formule 1 :

Code:
=INDEX(E:E;MIN(SI((A$2:A$1000=A2)*ESTNUM(EQUIV(E$2:E$1000;{"test1";"test2";"test3"};0));LIGNE(E$2:E$1000))))
Formule 2 :

Code:
=INDEX(E:E;EQUIV(1;(A$1:A$1000=A2)*SIGNE(EQUIV(E$1:E$1000;{"test1";"test2";"test3"};0));0))
Chacune est à valider par Ctrl+Maj+Entrée et à tirer vers le bas.

Bien sûr adapter la limite 1000 au tableau réel.

J'ai pu vérifier que Formule 2 est un peu plus rapide que Formule 1.

Il faut les comparer avec VBA sur le fichier réel.

En effet les temps de calcul dépendent :

- du nombre de lignes du tableau (surtout pour les formules)

- du nombre de valeurs en colonne E (pour VBA)

A+
 

Pièces jointes

  • Formule 1.xls
    39 KB · Affichages: 28
  • Formule 2.xls
    38.5 KB · Affichages: 33
  • Formule 2.xls
    38.5 KB · Affichages: 34
  • Formule 2.xls
    38.5 KB · Affichages: 36

idimpact

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

Mon tableau est assez grand... Il peut arriver qu'il dépasse facilement les 1000 lignes. J'ai pu remarquer que les fonctions matricielles sont tres lentes et problematiques lors de l'ajout d'une nouvelle ligne. D'ailleurs avec la macro qui s'execute de maniere conditionnelle, Excel plante lors de l'ajout d'une ligne ou lors d'un copier/coller de plusieurs lignes.
 

job75

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

D'ailleurs avec la macro qui s'execute de maniere conditionnelle, Excel plante lors de l'ajout d'une ligne ou lors d'un copier/coller de plusieurs lignes.

Ce n'est pas vraiment un plantage, mais c'est bien fait pour moi :)

Voir le fichier(11), il faut en effet terminer la macro par :

Application.ScreenUpdating = True

Mais les 2 formules du post #28, combien de temps mettent-elles à s'exécuter sur vos 1000 lignes ? Et VBA ??

A+
 

Pièces jointes

  • test(11).zip
    15.2 KB · Affichages: 28
Dernière édition:

Discussions similaires