XL 2010 [RESOLU] VBA - Formattage conditionnel avec plusieurs condition pour un tableau

Bichonnet

XLDnaute Junior
Bonjour la communauté !

Je fais appel à vous pour dépatouiller un code que je viens de compiler.
Le code répond à mes besoins mais il est beaucoup trop compliqué pour être adaptable à tout autre type de tableau. J'ai donc essayé une autre solution mais je bug.

Quel est le but de la macro?
Colorier la plage de cellule A2-H2 en fonction des colonnes I--Q avec les conditions suivantes :
Si la colonne I est remplie (date d'entrée d'un document), il faut que la plage AH se colorie :
- en bleu si la différence entre la date de réception du document et la date du jour est <7 jours ( Date - I2 <7)
- en rouge si cette différence est >7
- aucun remplissage si la colonne J est déjà remplie (cela signifie que le document a été redonné)
- en vert si la colonne Q est remplie (appro finale du document).

Pour un peu corser la choses, il y a plusieurs "allers-retours" potentiels à mon document, d'où les colonnes K-L M-N O-P.
Le code couleur devrait également se mettre en fonction des dates mises en colonne K,L,...

Je mets en pièce jointe mon fichier avec mes deux essais de macro.

La première appelée Conditionnal_Formatting_EssaiOK() fait ce que je veux mais est fort longue.

La deuxième est un essai avec des If, Else,...que j'aurais voulu customiser en décallant ma boucle For aussi bien en incrémentant les lignes que les colonnes (là je sais pas si c'est clair ce que je veux dire?).

Ce qui me fait buguer sur la deuxième macro, c'est que je n'arrive pas à faire un code qui ferait :
SI I2 n'est pas vide ET J2 est vide
Alors, [ SI Date - I2 > 7 --> colorie en rouge, sinon colorie en bleu]
Sinon on passe à l'analyse de la colonne K/L

J'espère que quelqu'un pourra m'aiguiller pour une solution un peu plus posée que mon code actuel :)

En vous remerciant !

:)
 

Pièces jointes

  • Cond Format VBA 2.xlsm
    356 KB · Affichages: 25

thebenoit59

XLDnaute Accro
Bonjour Bichonnet.
Effectivement, ton programme doit être long car tu boucles quasi 2000 lignes et plusieurs fois.
Autant profiter de l'utilisation de tableaux pour optimiser tes boucles.
Surtout si la colonne Q est remplie tu n'as pas besoin de vérifier les autres conditions.

Voici un code qui doit pouvoir répondre à ta demande :
VB:
Option Explicit

Sub Format()
Dim i&, j As Byte
Dim t()

With ThisWorkbook.Sheets("Raw data").ListObjects(1).DataBodyRange
    t = .Value
    .Interior.Color = xlNone
    For i = LBound(t) To UBound(t)
        If IsDate(t(i, 17)) Then
            .Item(i, 1).Resize(, 8).Interior.Color = RGB(64, 224, 32)
        Else
            For j = 9 To 15 Step 2
                If IsDate(t(i, j)) And Not IsDate(t(i, j + 1)) Then
                    Debug.Print Date - t(i, j)
                    Select Case Date - t(i, j)
                        Case Is < 7
                            .Item(i, 1).Resize(, 8).Interior.Color = RGB(0, 0, 224)
                        Case Is >= 7
                            .Item(i, 1).Resize(, 8).Interior.Color = RGB(255, 0, 0)
                    End Select
                    Exit For
                End If
            Next j
        End If
    Next i
End With
End Sub

Et le fichier qui va avec.
 

Pièces jointes

  • xlDwon - Bichonnet - VBA - Formattage conditionnel avec plusieurs condition pour un tableau.xlsm
    362.9 KB · Affichages: 27

Bichonnet

XLDnaute Junior
Bonjour thebenoit59,

Que dire ? C'est beau...c'est très beau !
C'est validé, ça fait ce que je demande, je vais un peu me pencher sur les détails pour être sûr de bien tout comprendre au cas où je devrais l'adapter à d'autres types de fichier :)

Dans un ordre d'idée secondaire, il y a moyen d'activer la macro quand on appuie sur la touche enter de son clavier ? Pour que la macro se mette en route dès qu'une date a été encodée ?
J'étais parti sur un code qui active la macro dès qu'on active une cellule, mais c'est, après essai, pas une bonne idée pacre qu'elle tourne trop souvent

Je cloturerai la discussion quand je suis sûr d'avoir compris les subtilités de ton tour de magie :)

Merci pour le retour rapide !
 

Discussions similaires

Réponses
1
Affichages
572

Statistiques des forums

Discussions
297 958
Messages
1 964 639
Membres
200 628
dernier inscrit
pop600