Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

NoodleDS

XLDnaute Nouveau
Bonjour à tous,

Je suis nouveau sur le forum et effectue un peu de VBA depuis seulement quelques semaines. Je n'effectuais jusqu'ici que des macros en mode enregistrement.

Je vous expose ma problématique :

Dans la même feuille, j'ai une plage de dates dans une colonne et plusieurs dates sur des lignes différentes.
Je souhaite qu'un code VBA puisse automatiquement, dès qu'une date de ma colonne est identique à une qui se trouve sur une ligne, que des cellules précises situées dessous la date se retrouvent grisées (voir exemple dans le fichier ci-joint).

Merci pour votre aide.
 

Pièces jointes

  • Color_cell_date.xls
    19 KB · Affichages: 66
  • Color_cell_date.xls
    19 KB · Affichages: 71
  • Color_cell_date.xls
    19 KB · Affichages: 69

Gareth

XLDnaute Impliqué
Re : Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

Bonsoir,

Ci-joint une solution avec une MFC
 

Pièces jointes

  • Color_cell_date.xls
    29.5 KB · Affichages: 76
  • Color_cell_date.xls
    29.5 KB · Affichages: 79
  • Color_cell_date.xls
    29.5 KB · Affichages: 73

Lone-wolf

XLDnaute Barbatruc
Re : Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

Bonjour NoodleDS, Gareth,

Voici le fichier avec le code VBA. Regarde si ça te convient.

Clique sur une date pour voir les cellules grisées.



A bientôt :cool:
 

Pièces jointes

  • Color_cell_date.xls
    37.5 KB · Affichages: 78
  • Color_cell_date.xls
    37.5 KB · Affichages: 78
  • Color_cell_date.xls
    37.5 KB · Affichages: 80

Lone-wolf

XLDnaute Barbatruc
Re : Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

Re NoodleDS,

une variante

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range, plage As Range, plages As Range, i As Long, lig As Integer
If Not Intersect(Target, [M11:M35]) Is Nothing Then
lig = Range("m65536").End(xlUp).Row
For i = 11 To lig
For j = 1 To 10
Set plages = Range("pl_" & j)
If ActiveCell.Value = plages.Value Then
Set plage = Range("dt_" & j)
plage.Interior.ColorIndex = 15
End If
Next j
Next i
End If
End Sub


A+ :cool:
 

NoodleDS

XLDnaute Nouveau
Re : Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

Bonjour Gareth et Lone-wolf,

Je tiens d'abord à vous remercier tous les deux pour avoir consacré du temps à ma demande.

Pour Gareth :
Je n'avais pas penser à une MFC et il faut dire que cela fonctionne très bien. Le résultat correspond bien à ce que je souhaite réaliser, mais comme je dois l'intégrer à un petit code VBA existant...

Pour Lone-wolf :
Le fonctionnement de tes deux codes sont intéressant. On clique sur une des dates en colonne et cela grise au bonne endroit. Ce n'est pas tout à fait ce que je souhaite réaliser. En fait, dès que le tableau en colonne est renseigné de ces dates je souhaite qu'automatiquement les zones concernées se grisent et le restent, sans que l'on ait besoin de cliquer sur une des cellules.

Merci pour votre aide.
 

NoodleDS

XLDnaute Nouveau
Re : Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

Bonjour à tous,

Lone-wolf et Gareth n'ayant pas répondu exactement à ma problématique, est-ce que quelqu'un d'autre pourrait s'y pencher.

Je vous remercie par avance.
 

Gareth

XLDnaute Impliqué
Re : Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

Bonsoir,

Ci-joint une interpretation
 

Pièces jointes

  • Color_cell_date1.xls
    38.5 KB · Affichages: 70
  • Color_cell_date1.xls
    38.5 KB · Affichages: 69
  • Color_cell_date1.xls
    38.5 KB · Affichages: 70

Lone-wolf

XLDnaute Barbatruc
Re : Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

Bonsoir Gareth, Noodle,

J'ai rectifié l'ancien code de mon fichier comme suit:


Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range, plage As Range, plages As Range, i As Long, lig As Integer
If Not Intersect(Target, [m11:m10000]) Is Nothing Then
lig = Range("m65536").End(xlUp).Row
For i = 11 To lig
For j = 1 To 10
Set plages = Range("pl_" & j)
If Range("m" & i).Value = plages.Value Then: Set plage = Range("dt_" & j): _
plage.Interior.ColorIndex = 15
Next j
Next i
End If
End Sub

En souhaitant que ça joue.


A+ :cool:
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

Rebonsoir,

une petite correction à faire dans le code de Gareth, dans le cas ou tu voudrais éffacer l'une des dates.

If Not c Is Nothing Then au lieu de If Not c Is Nothing And X <> "" Then.

En éffaçant le 2 avril par exemple, la colonne du 4 avril aussi, n'avait plus de couleur de fond.


Bonne soirée. :cool:
 

Gareth

XLDnaute Impliqué
Re : Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

Bonjour,

Merci Lon-Wolf, effectivement j'avais mis au debut ce X <> "" pour une raison bien précise mais ce n'est plus nécessaire. Je ne me souviens plus pourquoi :rolleyes:
J'en ai profité pour optimiser mon code qui triate maintenant toutes les dates de la colonne M où qu'elles soient.

En revanche, en testant ton code sauf erreur le grisé ne disparait pas lors de l'effacement d'une date.
 

Pièces jointes

  • Color_cell_date1.xls
    30 KB · Affichages: 69
  • Color_cell_date1.xls
    30 KB · Affichages: 71
  • Color_cell_date1.xls
    30 KB · Affichages: 74

Lone-wolf

XLDnaute Barbatruc
Re : Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

Bonsoir Gareth,

dans le fichier joint, cette fois c'est le texte qui est mis en forme, suite à l'exemple de ton fichier.

Il faut écrire dans la colonne E, l'un des textes proposés.


Très bonne soirée :cool:
 

Pièces jointes

  • Classeur1.xls
    35.5 KB · Affichages: 61
  • Classeur1.xls
    35.5 KB · Affichages: 78
  • Classeur1.xls
    35.5 KB · Affichages: 65

Gareth

XLDnaute Impliqué
Re : Code VBA pour colorier des cellules dès que l'on trouve 2 dates identiques

Bonsoir,

En remplaçant
Code:
For Each cel In Range("e2:e1000")
par
Code:
For Each cel In Columns("E").SpecialCells(xlCellTypeConstants, 23)

Ca semble aller plus vite ...

Il faut également rajouter LookAt:=xlWhole dans le Find car sinon par exemple a, aa, aaa fonctionnent pour aaa

Code:
Set c = Range("a2:c1000").Find(cel.Value, LookAt:=xlWhole)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 848
Membres
103 972
dernier inscrit
steeter