mise en forme conditionelle sur de nombreuses cellules

kevin2020

XLDnaute Nouveau
Bonjour,

j'ai créer un tableau(extrait ci joint) concernant la demande des opérateurs en EPI (equipement de protection individuelles).
j'ai deux tableaux identiques sur deux feuilles differentes : un concernant leur besoins pour le mois et un autre pour leur consomations dans le mois.

je souhaite que lorsque leur consomations depasse leur besoins la cellule se mette en rouge.
pour cela j'ai utilisé la mise en forme conditionelle :
j'ai tout d'abord affecter un nom a une des cellules du tableau "besoins", puis sur la meme cellule du tableau "consomations" j'ai effectuer une mise en forme conditionelle(case en rouge) à partir de ce nom (car il est impossible de faire reference a une cellule d'une feuille differente sous excel 2003).

l'extrait du tableau est en pièce jointe. j'ai effectuer un exemple sur les cellules C3 en affectant le nom "lunettesa".

Le probleme est que j'ai énormement de case à faire une par une (600 environ),donc j'aimerais savoir si il existe une astuce ou une formule afin de gagner du temps.

j'éspere avoir été assez claire dans mes explications.

merci d'avance.
 

Pièces jointes

  • TDB EPI.xls
    44.5 KB · Affichages: 33
  • TDB EPI.xls
    44.5 KB · Affichages: 40
  • TDB EPI.xls
    44.5 KB · Affichages: 34

camarchepas

XLDnaute Barbatruc
Re : mise en forme conditionelle sur de nombreuses cellules

Bonjour Kevin

Une solution par vba :
a mettre dans un module standard

Sub compare()
Dim Tourne As Long, Boucle As Long

For Tourne = 2 To 9
For Boucle = 1 To 10
If Sheets("Besoin").Range("A1").Offset(Tourne, Boucle) < Sheets("Consomation").Range("A1").Offset(Tourne, Boucle) Then
Sheets("Consomation").Range("A1").Offset(Tourne, Boucle).Interior.ColorIndex = 3
End If
Next Boucle
Next Tourne
End Sub
 

kevin2020

XLDnaute Nouveau
Re : mise en forme conditionelle sur de nombreuses cellules

merci encore une fois pour la reponse rapide et clair !

je l'ai intégré dans mon tableau d'origine en modifiant les valeurs "for tourne" et "for boucle" vu que mon tableau est plus grand.

par contre, je voulais améliorer la maccro en la faisant demarrer automatiquement à chaque changement de valeur d'une des cellules des tableaux.

pour cela, j'ai essayé ce code qui ne marche pas (situé dans thisworkbook : géneral : Worksheet_Change) :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:L10")) Is Nothing Then
Call compare
End If
End Sub

quelqun peut-il m'éclairer sur ce sujet?

merci.
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : mise en forme conditionelle sur de nombreuses cellules

Bonjour,

Pas certain , mais le problème des évenementiels comme Worksheet_Change est que si tu changes à nouveau une valeur avant d'avoir terminé ta boucle, tu ré-appelles la procédure .

Donc il faut le temps du traitement désactiver les évenementiels.

application.EnableEvents=false ' Stop les événementiels
call compare
application.EnableEvents=true ' Réactive les événementiels

si tu peux faire l'essai ?
 

kevin2020

XLDnaute Nouveau
Re : mise en forme conditionelle sur de nombreuses cellules

je viens de faire l'essai et sa ne marche toujours pas.

une autre idée car moi je suis debutant dans les maccro?

sinon tant pis je laisserais la maccro manuelle.

ps: par contre même sans la formule Worksheet_Change, la cellule B3 change automatiquement quand on change la valeur, je ne sais pas pourquoi.
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : mise en forme conditionelle sur de nombreuses cellules

Re ,

as tu modifiés la valeur ici pour quelle corresponde à ton tableau : ("A1:L10")
If Not Application.Intersect(Target, Range("A1:L10")) Is Nothing Then

et je pense que dans le module de la feuille consommation ce serait plus adéquate
 

TooFatBoy

XLDnaute Barbatruc
Re : mise en forme conditionelle sur de nombreuses cellules

Bonjour,

Je n'ai pas 2003 sous la main pour tester, donc je vais peut-être bien dire une énorme bêtise, mais est-ce que la MFC suivante peut fonctionner ?
=B3>INDIRECT("BESOIN!" & ADRESSE(LIGNE();COLONNE()))
 

kevin2020

XLDnaute Nouveau
Re : mise en forme conditionelle sur de nombreuses cellules

Bonjour, après plusieurs essais,j'ai enfin compris !

sur le tableau que j'ai mis en extrait sur la discution, la macro fonctionne tres bien en auto avec le code suivant (dans module de la feuille consomation) :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not application.Intersect(Target, Range("A1:L10")) Is Nothing Then
application.EnableEvents = False ' Stop les événementiels
Call compare
application.EnableEvents = True ' Réactive les événementiels
End If
End Sub

or sur mon véritable tableau qui est beaucoup plus volumineux et complexe que celui ajouté a la discution, la macro auto ne marche pas pour la raison suivante à mon avis :

contrairement au tableau simplifié, les valeurs de la feuille consomation ne sont pas rentré manuellement mais obtenu par formule:

=SOMMEPROD((SOUS.TOTAL(9;DECALER('SORTIES STOCK'!$D$5;LIGNE($1:$495);)))*('SORTIES STOCK'!$A$6:$A$500=$C$2)*('SORTIES STOCK'!$C$6:$C$500=B3)).

la maccro prend en compte que le changement de valeur manuel, comment faire lorsqu'il s'agit de formule ?

merci d'avance.
 

camarchepas

XLDnaute Barbatruc
Re : mise en forme conditionelle sur de nombreuses cellules

Bonjour ,

Utilises l'événementiel Worksheet_Calculate(),

ATTENTION, il faudra peut être désactiver les évenementiels en entrant dans celui-ci et les réactiver en fin de traitement de ce module

avec application.EnableEvents=false pour désactiver et application.EnableEvents=true pour réactiver
 

kevin2020

XLDnaute Nouveau
Re : mise en forme conditionelle sur de nombreuses cellules

j'ai essayer cette formule :

Private Sub Worksheet_Calculate(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:L10")) Is Nothing Then
Application.EnableEvents = False ' Stop les événementiels
Call compare
Application.EnableEvents = True ' Réactive les événementiels
End If
End Sub

et lorsque la valeur change j'obtiens ce message d'erreur :

erreur de compilation:
la déclaration de la procédure ne correspond pas à la déclaration de l'évènement ou de la procédure de même nom.
 

kevin2020

XLDnaute Nouveau
Re : mise en forme conditionelle sur de nombreuses cellules

probleme résolu, il fallait tout simplement mettre ce code :

Private Sub Worksheet_Calculate()
Application.EnableEvents = False ' Stop les événementiels
Call compare
Application.EnableEvents = True ' Réactive les événementiels
End Sub

tout fonctionne maintenant, merci a vous tous!
 

kevin2020

XLDnaute Nouveau
Re : mise en forme conditionelle sur de nombreuses cellules

Ta MFC ne marche pas, elle n'indique pas de message d'erreur mais n'a aucun effet sur la cellule.

En revanche celle de Chris fonctionne.après il suffit juste d'étendre cette MFC sur les autres cellules du tableau avec la croix sur le coin en bas droit de la cellule.
 

Discussions similaires

Statistiques des forums

Discussions
312 611
Messages
2 090 219
Membres
104 452
dernier inscrit
hamzamounir