Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/12/2011, 12h04   #1
Invité de passage
 
Julien
Inscription : avril 2010
Messages : 8
Détails du profil
Informations personnelles :
Nom : Julien
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2010
Messages : 8
Points : 0
Points : 0
Par défaut Colorer des cellules en fonction de la date qu'elles contiennent

Bonjour,

Je suis en train d'apprendre le VBA. Essentiellement pour pouvoir mettre automatiquement en forme.
J'ai un soucis quand à la coloration conditionnelle de la cellule en fonction de la date qu'elle contient.
En effet, dans une colonne j'ai des dates de naissance. Je souhaite colorer toutes les cellules qui ont une date de naissance supérieure (plus jeune) au 1/12/56. L'idéal serait supérieure à la date du jour moins 55ans.

Voici actuellement mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub MizEnForm()
	Range("D:D,I:I,O:O,T:U,W:X").Delete Shift:=xlToLeft
 
	Sheets("Feuil1").Range("H:H").Select    
		Application.ScreenUpdating = 0        
		If Cell.Value > Format("20790", "dd/mm/yy") Then        
			Cell.Select            
			With Selection.Interior                    
				.ColorIndex = 7                  
				.Pattern = xlSolid            
			End With
		End If
End Sub
Petite question optionnelle: comment enregistrer cette macro de façon à pouvoir l'appeler sur n'importe quel classeur?

Merci par avance pour votre aide.

Rahan
Rahanin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 13h59   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Essaie :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub MizEnForm()
    Range("D:D,I:I,O:O,T:U,W:X").Delete Shift:=xlToLeft
 
    With Sheets("Feuil1")
        Application.ScreenUpdating = 0
        Set Plage = .Range(.[H1], .Cells(.Rows.Count, "H").End(xlUp))
    End With
    For Each Cell In Plage
        var1 = Year(Cell.Value)
        var2 = Year(Date) - 55
        If Year(Cell.Value) > Year(Date) - 55 Then
            With Cell.Interior
                .ColorIndex = 7
                .Pattern = xlSolid
            End With
        End If
    Next Cell
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2011, 14h15   #3
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 588
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 588
Points : 890
Points : 890
Bonjour Rahanin, Daniel, le forum

Citation:
Envoyé par Rahanin Voir le message
...Petite question optionnelle: comment enregistrer cette macro de façon à pouvoir l'appeler sur n'importe quel classeur?
...
Rahan
Tu peux l'enregistrer dans le classeur de macro personnel.

S'il n'existe pas (tu ne l'as jamais créé) le plus rapide (pas le plus orthodoxe ) :
tu mets l'enregistreur macro en route
tu demandes à enregistrer dans le classeur de macro personnel,
tu fais une manip (clic sur une cellule)
tu arrêtes l'enregistreur
tu as le classeur et son module 1 : tu effaces la macro 1 et tu y copies le code de Daniel
78chris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2011, 14h28   #4
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
En complément à la réponse de 78chris, il est préférable de modifier le code afin qu'il soit exécutable sur la feuille active et non pas sur la seule feuille Feuil1 :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub MizEnForm()
    Range("D:D,I:I,O:O,T:U,W:X").Delete Shift:=xlToLeft
 
    Application.ScreenUpdating = 0
    Set Plage = Range([H1], Cells(Rows.Count, "H").End(xlUp))
    For Each Cell In Plage
        If Year(Cell.Value) > Year(Date) - 55 Then
            With Cell.Interior
                .ColorIndex = 7
                .Pattern = xlSolid
            End With
        End If
    Next Cell
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h09.


 
 
 
 
Partenaires

Hébergement Web