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

23mp5078.xlsx (23.03 Ko)

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 Sub

Le 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... ), mais tu le diras !

Cordialement.

11mp5078.xlsm (34.02 Ko)

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

12mp5078-1.xlsm (30.32 Ko)

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 ! Formule normale ou matricielle n'est une option que pour les cas simples où l'on peut substituer à une formule normale recopiée sur plusieurs lignes, une seule formule matricielle pour l'ensemble de la plage.

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:

        .Calculate

et 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

Procédure aménagée pour tout traiter.

Cordialement.

15mp5078.xlsm (33.50 Ko)

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

Rechercher des sujets similaires à "mise forme conditionnelles couleur"