Mise en forme excel macro

[Résolu/Fermé]
Signaler
-
 mister-t -
Bonjour

je voudrais mettre en forme une base

de couleur rouge quand les cellules sont < a la textbox debutmois
de couleur jaune quand les cellules sont > a la textbox debutmois
de couleur verte quand les cellules sont > ) la textbox debutmoissuiv


j'ai fais une macro mais le dernier elseif pour mettre en vert ne marche pas et je n'ai pas
de déboggage

un petit coup de main merci d'avance



prog
For i = 2 To 4000

If wbk2.Sheets("Feuil1").Cells(i, 28).Value < CDate(debutmois) Then
With wbk2.Sheets("Feuil1").Rows(i).Interior
.ColorIndex = 3
.Pattern = xlSolid
End With




ElseIf wbk2.Sheets("Feuil1").Cells(i, 28).Value >= CDate(debutmois) Then
With wbk2.Sheets("Feuil1").Rows(i).Interior
.ColorIndex = 44
.Pattern = xlSolid
End With


ElseIf wbk2.Sheets("Feuil1").Cells(i, 28).Value >= CDate(debutmoissuiv) Then
With wbk2.Sheets("Feuil1").Rows(i).Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
End If
Next i

6 réponses

Messages postés
16519
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 septembre 2021
3 221
Bonjour

il faut que ta 2°condition soit >=debutmois ET inférieure à debutmois suivant
prog
For i = 2 To 4000

If wbk2.Sheets("Feuil1").Cells(i, 28).Value < CDate(debutmois) Then
With wbk2.Sheets("Feuil1").Rows(i).Interior
.ColorIndex = 3
.Pattern = xlSolid
End With




ElseIf (wbk2.Sheets("Feuil1").Cells(i, 28).Value >= CDate(debutmois) ) and (wbk2.Sheets("Feuil1").Cells(i, 28).Value <CDate(debutmoissuiv) )Then

With wbk2.Sheets("Feuil1").Rows(i).Interior
.ColorIndex = 44
.Pattern = xlSolid
End With


ElseIf wbk2.Sheets("Feuil1").Cells(i, 28).Value >= CDate(debutmoissuiv) Then
With wbk2.Sheets("Feuil1").Rows(i).Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
End If
Next i

ceci marche tres bien merci mais sur le pc de la maison
au travail cç ne marche pas
pourtant c'est aussi excel 2003
y a t il des modules complementaire cocher ?
> mister-t
bonjour,

je viens de tester la macro au travail et le premier if et dernier if marche, il me met bien la couleur rouge pour le premier et verte pour le dernier.
Mais le deuxième if avec le and ne met pas de couleur, il laisse les lignes blanches
j'ai essayé un autre type de couleur mais toujours pareil

un petit coup de main svp ?


merci d'avance
Messages postés
127
Date d'inscription
samedi 20 décembre 2008
Statut
Membre
Dernière intervention
11 mars 2009
28
Coucou,
J'ai codé ça vite fait, si ça t'intéresse.
A toi de le mettre à ta sauce.
Private Sub coloriage_Click()
Dim datecell As Date
For i = 1 To 10
datecell = Cells(i, 1).Value

With Rows(i).Interior
    Select Case datecell
        Case Is < CDate(debutmois.Text)
                 'attention ici, si la ligne est vide donc date nulle
                 'elle sera coloriée
                 'à gérer avant le select case
                 'sauf si tu es sur que toutes tes lignes sont renseignées 
             .ColorIndex = 3
        Case CDate(debutmois.Text) To CDate(debutmoissuivant.Text)
            .ColorIndex = 44
        Case Is > CDate(debutmoissuivant.Text)
            .ColorIndex = 4
        Case Else
            'la valeur traitée n est pas une date
            'ici on peut mettre un message erreur par exemple ou
            'simplement passer la ligne en ne faisant rien
    End Select
End With
Next i
End Sub


A plus.
Messages postés
16519
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 septembre 2021
3 221
bonjour,

un peu tardivement proche de la solution de mikebzh : maquette sans userform - les 2 textbox sonr remplacés par des range
http://www.cijoint.fr/cjlink.php?file=cj200903/cijbt5z6yZ.xls

A noter qu'il n'y a que 2 test à faire <débutmois et >=debutmoissuiv... si ces 2 conditions ne sont pas remplies on a forcément la couleur 44
mais les 2 , on a utilisé "select case" plutôt que les Elself vachement lourds..
Messages postés
127
Date d'inscription
samedi 20 décembre 2008
Statut
Membre
Dernière intervention
11 mars 2009
28
Salut michel_m

D'accord avec toi que le case est beaucoup moins lourd que les "elseif", dont j'ai une sainte horreur soit dit en passant :)
En plus si il y a besoin, cela permet de traiter tous les cas supplémentaires nécessaires en rajoutant des "case".
Moi, j'avais laissé les trois "case" de test pour être sûr de ne traiter que les dates et le else au cas où certaines lignes intermédiaires non concernées ou erronées (date non cohérentes par exemple) devaient être gérées. Mais bon à mister_t de voir.

Salut
Messages postés
16519
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 septembre 2021
3 221
Re,
..."au cas où certaines lignes intermédiaires non concernées ou erronées (date non cohérentes par exemple) devaient être gérées. Mais bon à mister_t de voir"....

tout à fait d'accord avec toi!

Bonne fin de journée
bonjour,

merci a vous deux pour ces réponses et ces macros.

Je suis certain que vos progs marchent bien mais en faite j'ai vraiment envie de comprendre pourquoi il n'y a pas de couleur qui se remplie pour le if ou il y a le and

deja pour ma culture générale en macro et puis j'aime pas laisser un travail qui n'est pas fini

si vous avez une solution a me proposer

en dernier recourt je prendrai evidement vos progs et l'adapterai au mien

merci pour des reponse futurs
Messages postés
127
Date d'inscription
samedi 20 décembre 2008
Statut
Membre
Dernière intervention
11 mars 2009
28
Re,
J'adore ta philosophie, exactement celle recherchée dans ce genre de forum, alors j'ai pris ton code tel quel et il fonctionne comme tu le souhaites avec juste une petite modif
Quand tu veux récupérer la valeur de ta textbox n'oublie pas de rajouter .text car je penses que le compilateur est perdu
CDate(debutmois) sera préférable avec CDate(debutmois.text)
Sinon le manque de parenthèse dans ta double condition est peut-être préjudiciable ? (à voir)
du style ((toto=?) and (titi= ??))
Fais moi signe
bonjour,

excusez du peu pour ce retard, les heures sup ça fait mal a la tete,

je viens de reprendre la macro en regardant tes conseils et j'ai bien mis les parenthèses dans la deuxième condition. Le fait de mettre des .text derrière les variables me faisait planter la macro.

Et puis je me suis aperçu que j'avais oublié de changer le nom de la variable dans la deuxième condition apres le and et donc c'est pourquoi la couleur jaune ne se mettait pas.

La je passe pour un gros NOOOOOOOOB !!!!! mais bon ça peut s'ameliorer avec le temps

merci pour ces conseils precieux

a une prochaine question

merci encore

problème resolu