Mise en forme conditionnelles couleur
Bonjour à tous
Je cherche par les formules conditionnelles à faire ce qui suit : il faut que ce qui est en rouge et en orange en feuille 1 se colore aussi en rouge et en orange en feuille 2 ; j'ai coloré les cellules ; le résultat et les formules conditionnelles sont bien évidemment en feuille 2
D'avance merci !
Classeur joint
Bonjour,
C'est pour moi incompréhensible !
Une MFC se définit par :
- la mise en forme à appliquer sous condition
- une zone d'application précisément définie
- une (ou plusieurs) condition(s) d'application de cette mise en forme.
Cordialement.
Bonjour à tous,
C'est pour moi incompréhensible !
je trouve aussi que c'est également incompréhensible,
mp5078, vous avez fait des formules très complexe pour trouvé les valeurs par rang (petite.valeur) ayant une donné dans la colonne de chacun des intitulé "B", bravo!
mais je ne comprend pas votre histoire de couleur
Bonjour à vous 2
Les formules ce n'est pas moi qui les ai faites
Pour préciser ma demande : en feuille 1 lorsque A et B sont remplis impérativement tous les 2 sous résultat 1...résultat 2 ect....ces valeurs se retrouvent sous une colonne résultat 1....résultat 2...ect...ces cellules sont colorées en jaune ou rouge ; en feuille 2 il faut que les 2 valeurs A et B soit de la même couleur que celles qui sont sous résultat 1 et 2
J'espère que c'est plus clair
Merci pour votre aide
Bonjour,
Un essai :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Date, n%, i%, j%, Lgn(8, 1)
If Not Intersect(Target, Me.Range("L5:AW25")) Is Nothing Then
n = Target.Row: d = Me.Range("B" & n)
For i = 12 To 47 Step 5
j = (i - 7) \ 5
If Me.Cells(n, i) <> "" And Me.Cells(n, i + 2) <> "" Then
Lgn(j, 0) = Me.Cells(n, i)
Lgn(j, 1) = Me.Cells(3, i).Interior.Color
Else
Lgn(j, 0) = "zz"
End If
Next i
For i = 1 To 7
For j = i + 1 To 8
If Lgn(j, 0) < Lgn(i, 0) Then
Lgn(0, 0) = Lgn(j, 0): Lgn(0, 1) = Lgn(j, 1)
Lgn(j, 0) = Lgn(i, 0): Lgn(j, 1) = Lgn(i, 1)
Lgn(i, 0) = Lgn(0, 0): Lgn(i, 1) = Lgn(0, 1)
End If
Next j
Next i
n = 0
With Worksheets("Feuil2")
For i = 5 To 25
If .Cells(i, 1) = d Then
n = i: Exit For
End If
Next i
If n = 0 Then Exit Sub
For i = 3 To 24 Step 3
j = i \ 3
If Lgn(j, 0) = .Cells(n, i) Then
.Cells(n, i).Resize(, 2).Interior.Color = Lgn(j, 1)
Else
.Cells(n, i).Resize(, 2).Interior.ColorIndex = xlColorIndexNone
End If
Next i
End With
End If
End SubLe principe : lors d'un changement dans ton tableau L5:AW25 (Feuil1). On révise la ligne entière du tableau : on prélève dans un tableau les valeurs "A" et la couleur, si une valeur "B" existe. On trie ce tableau par valeurs décroissantes des valeurs "A" pour le mettre dans le même ordre que la ligne concernée de Feuil2. On identifie cette ligne par la date, et on (re)colore si la valeur"A" du tableau correspond à la valeur "A" sur la ligne.
Je ne suis pas tout à fait sûr que cela répond à tous tes cas de figure (parce que je n'ai pas pris la peine d'analyser jusqu'au bout ta formule en Feuil2, j'ai commencé... et me suis contenté du résultat produit...
Cordialement.
Bonjour
Merci pour ce travail ; cela fonctionne parfaitement
Par contre je ne sais pas ou se trouve cette macro : j'ai cherché dans l'onglet "macro" mais il n'y a rien
Merci pour ta réponse
C'est quoi que tu appelles l'onglet macro ?
Les macro (le code) sont toujours forcément dans un module. Pour y accéder il faut ouvrir l'éditeur VBA (onglet Développeur, VisualBasic, ou raccourci Alt+F11, ou pour accès direct au module d'une feuille de calcul Clic droit, Visualiser le code).
Les macros apparaissent dans la boîte de dialogue macro s'il s'agit de procédure Sub publique (toutes les proc. sont publiques par défaut) et si elles sont dépourvues d'arguments. Celles qui ne correspondent pa s à ces critères n'apparaissent pas. Les macros ordinaires se placent normalement dans un module Standard... Les macros spécifiques (comme celle que j'ai fournie) dites évènementielles, qui se lancent automatiquement lorsque l'évènement qui leur correspond survient pour l'objet auquel elles sont attachées, sont obligatoirement dans le module dédié à l'objet.
Donc, au cas particulier, la macro se trouve dans le module attaché à Feuil1, module privé. Elle intervient chaque fois qu'un changement dans une cellule de Feuil1 se produit (changement de valeur d'une ou plusieurs cellules). Elle teste si le changement affecte la zone de cellules surveillée, et si c'est le cas poursuit son exécution.
Cordialement.
Re
J'ai trouvé et remerciements pour toutes ces infos détaillées
Bon week end
Cordialement
Re
Juste un renseignement ; si je modifie le nom des onglets Feuil1 et Feuil2 du classeur il faut que je change quoi dans la macro?
J'ai essayé mais il y a une anomalie "débogage" ;
Je viens de me rendre compte que si j'efface les valeurs du tableau de saisie de la feuille alors les valeurs sont effacées sur la feuille 2 mais il reste certaines couleurs qui restent dans les cellules
merci d'avance pour votre réponse
Tu modifies Feuil2 ici :
With Worksheets("Feuil2")Rien d'autre à changer.
Bonjour
Merci pour la réponse ; cela fonctionne mais il y a des loupés ! cela ne se colore pas toujours ; en fait j'ai déjà eu le cas il y a 2 ans : les formules matricielles sont à éviter ; mon PC ramait au point de devenir inutilisable lorsque j'ouvrai le classeur il faudrait les remplacer par des formules classique car mon tableau s’étend sur environ 1000 lignes
Merci pour votre aide si vous pouvez le faire
Cordialement
Il faut dire en quoi cela ne marche pas, et fournir l'exemple...
Dans ma première réponse, j'ai précisé exactement les conditions dans lesquelles je colorais ! Il faut t'y référer pour me dire ce qui est en contradiction avec tes règles !
Tes binômes 'A.B' sont ordonnés par ligne en ordre croissant de la valeur 'A'. La coloration se base exclusivement là-dessus...
Quant aux formules, c'est tout à fait autre chose !
Dans les autres cas, qui sont le cas général, si la formule est matricielle, c'est que le calcul à faire exige d'utiliser une ou plusieurs matrices en lieu et place de valeurs individualisées.
On peut toujours voir si l'on peut trouver une formule moins gourmande en ressources si cela pose problème, sinon supprimer les formules au profit de VBA... La macro qui colore pourrait également transférer les valeurs et remplacer les formules...
Je pense subitement qu'en fait une des possibilités d'erreurs de la coloration pourrait provenir du fait que la macro intervienne avant que le recalcul de la feuille soit effectif. Il faudrait alors juste à la suite de l'initialisation du bloc With introduire une instruction:
.Calculateet si cela ne suffisait pas, ajouter un DoEvents...
Ceci dans le cas où il ne s'agit pas de règles de classement non prise en compte par la coloration.
Cordialement.
Re
Merci beaucoup pour vos explications
J'ai trouvé la cause du blocage : après avoir supprimer le vba et enregistré le fichier sans macro en xlsx j'ai mis à jour mon tableau : cela bloquait comme avant : les 2 processeurs à 100% et impossible de faire quoi que ce soit
J'ai donc supprimé carrément l'onglet ou se trouvait les formules matricielles : plus aucun problème !
C'est donc bien la seule cause du problème : l'utilisation des formules matricielles
Si vous pouviez remplacer les formules matricielles et l'inclure dans la vba ce serait parfait
Cordialement
Re
Cela fonctionne très bien ; merci beaucoup
Il ne faut pas que j'efface le tableau feuille 1 à la volée ; visiblement la vba n'aime pas...en effacement par colonne cela s'efface progressivement et complètement
Une dernière question : je serai amené dans le futur à changer les couleurs de la feuille 1 ligne 3 : mettre tout en orange par exemple ou panacher les couleurs dans un ordre différent : je procède comment ?
Merci d'avance pour votre réponse
La macro n'intervient que sur une ligne à la fois, si tu en tritures plusieurs simultanément, seule la première sera traitée... (on peut coder de façon à opérer sur plusieurs lignes, quelque précaution sur les tests initiaux et boucle sur chaque ligne de la zone modifiée...)
Pour la couleur, tu as défini au départ que c'était celle de la cellule (fusionnée) RESULTAT x de la Feuil1. La macro la prend donc là. Si tu modifies les couleurs à cet endroit, cela se répercutera automatiquement sans modifier la macro.
Re
Merci beaucoup pour tes explications ; j'essaierai de faire des essais pour voir si cela fonctionne ; pour le moment je n'ai pas besoin de modifier la vba
Encore merci
Bonne soirée
Cordialement