Macro pour la couleur d'une ligne

Cédric -  
mrjenkins Messages postés 580 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'aurais besoin d'aide, j'ai commencé la programmation de macro, sous Excel 2010 depuis peu, et j'aimerais savoir si quelqu'un pourrait me donner une macro qui me permettrait, sur toute une ligne (B, dans mon cas) que pour un texte donné (dans la cellule), je puisse lui attribuer une couleur et un fond spécifique (quand il n'y a rien dans la cellule, elle reste inchangée)

Voilà

Merci de votre aide

Cédric
A voir également:

8 réponses

mrjenkins Messages postés 580 Date d'inscription   Statut Membre Dernière intervention   102
 
Bonjour,

il faut absolument le faire par macro ?
Un mise en forme conditionnelle me semble plus adaptée dans ce cas..


--
0
Cédric
 
Oui, ce serait mieux car la macro que je fais, tire une liste d'une autre feuille et je veux différencier les titres des références
Ma liste peut ne pas se mettre tout le temps à la même place... donc quand la macro me fait la liste, dès qu'elle met tel ou tel texte, il faudrait tel ou tel couleur... et je ne sais pas comment faire :/
0
mrjenkins Messages postés 580 Date d'inscription   Statut Membre Dernière intervention   102
 
Tu peux regarder du côté des méthodes :

Range("").Interior.Color = RGB(x,y,z)


Pour mettre la couleur selon la valeur de la case, il suffit de vérifier sa valeur dans un if :

if Range("A1").value = 1 then
Range("A1").Interior.Color = RGB(255,0,0) 'rouge
else
Range("A1").Interior.Color = RGB(255,255,255) 'blanc
endif
0
Cédric
 
De cette façon, ça ne peut fonctionner ; la cellule que je veux colorer n'est pas fixe donc il me faudrait une formule plus générale du genre :
pour tous "Références" => remplissage violet & couleur jaune (c'est ce que je dois faire)

Après j'ai un soucis avec l'affichage d'une date :
de dois avoir dans une cellule, quand je lance ma macro, "commande du jj/mm/aaaa" sauf que le problème c'est que je ne sais pas comment mettre la date :(
0
mrjenkins Messages postés 580 Date d'inscription   Statut Membre Dernière intervention   102
 
Oui mais ta cellule, à un moment donné tu mets une valeur dedans avec ta macro ?
Au même moment, mets la couleur que tu veux.

Pour la date, il suffit de concaténer, non ?
"commande du " & day(maDate) & "/" & ...
0
Cédric
 
j'ai vu sur d'autres post pour la date, la concaténer etc... mais je n'ai pas trop compris...
puis-je avoir votre adresse mail afin que je vous envoie le fichier pour que vous regardiez ? (j'ai annoté les détails qui m'embêtent dans la macro)
0
mrjenkins Messages postés 580 Date d'inscription   Statut Membre Dernière intervention   102
 
Je suis au boulot, le mail ne passera pas l'antivirus malheureusement :(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cédric
 
Voici ma macro alors (j'espère que ça ira pour comprendre...)
mon but :
- pour tel condition, la macro me ressort une liste qui m'est affiché sur une autre feuille.
- les premières lignes de cette macro servent à sélectionner la première colonne où la première cellule est vide (j'ai repris le codage par internet)
- sur la première ligne de la liste j'aimerais que ça m'affiche "commande du"+la date du jour (j'ai fait un truc avec un ImputBox mais c'est pas ce que je recherche, c'est temporaire)
- sur la deuxième ligne, j'aurais donc ma liste qui commence avec le titre "Références" en premier (titre que je veux colorer peut importe où il se trouve)
- et ensuite j'ai la liste qui déroule...
pourriez vous corriger et/ou ajouter pour que ça fasse ce que je veuille ?

Sub Liste()
'
' Liste Macro
' la macro va servir à créer la lister pour faire une commande
'
' ça ça sert a trouvé la première colonne vide
Dim i As Integer
i = 1
While (Cells(i, 1).Value <> "")
i = i + 1
Wend
Cells(i, 1).Select
' faut juste changer la formule pour que la liste s'affiche ou c'est vide et non sur la précédante
j = 1
' Si on pouvait mettre dans la première ligne la date de la commande
Sheets("Faire la commande").Range("A" & j).Value = InputBox("Commande du (jj/mm/aaaa)")
j = j + 1
' A la limite, le For on peut le For remplacer par un while
'' While Range("A" & i).Value <> 0
For i = 1 To 156
'
If (Range("B" & i).Value < Range("C" & i).Value) Then
If (Range("F" & i).Value > 0) Then
On Error GoTo 0
Worksheets("Faire la commande").Range("A" & j).Value = Range("A" & i).Value
j = j + 1
End If
End If
''Wend
If (Range("B" & i).Value < 0) Then
MsgBox ("Erreur : il y a des stocks négatifs")
End If
Next i
'
'
'
' If Cellule.Value = "Références" Then
' Cellule.Offset(0, 1).Interior.Color = 255
'
' End If
'
End Sub
0
mrjenkins Messages postés 580 Date d'inscription   Statut Membre Dernière intervention   102
 
Comme ça ?
Sub Liste()
'
' Liste Macro
' la macro va servir à créer la lister pour faire une commande
'
' ça ça sert a trouvé la première colonne vide
Dim i As Integer
i = 1
While (Cells(i, 1).Value <> "")
i = i + 1
Wend
Cells(i, 1).Select
' faut juste changer la formule pour que la liste s'affiche ou c'est vide et non sur la précédante
j = 1
' Si on pouvait mettre dans la première ligne la date de la commande
Sheets("Faire la commande").Range("A" & j).Value = InputBox("Commande du (jj/mm/aaaa)")
j = j + 1
Sheets("Faire la commande").Range("A" & j).Value = "Références"
Sheets("Faire la commande").Range("A" & j).Interior.Color = RGB(255, 0, 0)

' A la limite, le For on peut le For remplacer par un while
'' While Range("A" & i).Value <> 0
For i = 1 To 156
If (Range("B" & i).Value < Range("C" & i).Value) Then
If (Range("F" & i).Value > 0) Then
Worksheets("Faire la commande").Range("A" & j).Value = Range("A" & i).Value
j = j + 1
End If
End If
''Wend
If (Range("B" & i).Value < 0) Then
MsgBox ("Erreur : il y a des stocks négatifs")
End If
Next i
'
'
'
' If Cellule.Value = "Références" Then
' Cellule.Offset(0, 1).Interior.Color = 255
'
' End If
'
End Sub


Par contre, plusieurs remarques :
1. ton while te permet de trouver la 1ère ligne vide (et pas la 1ère colonne vide) → à voir ce que tu cherches vraiment
2. Pour la date, tu veux la date du jour ? Ou une autre date ?
3. Tu codes pour avoir la 1ère ligne non remplie, mais ensuite tu colles les données en j (et donc au début du fichier) --> à modifier :)
0
Cédric
 
(c'est un doc de gestion de stock)

en fait le "while" que je veux mettre, c'est pour remplace la boucle en "for"
car par exemple si dans mon tableau, on vient rajouter une ligne, mon "for i = 1 to 156" ne fonctionnerait plus car il y aurait 157 lignes à vérifier...

oui, la date du jour, par exemple si l'on utilise la macro pour sortir une liste aujourd'hui, c'est pour pouvoir la différencier de la colonne suivante qui sera peut être la commande du lendemain ou de la semaine d'après...

bah je voulais que ma liste commence justement à la 2ème ligne (puisqu'à la première je veux ""commande du" + date")

je me suis rendu compte qu'en fait qu'en j'utilise le bouton pour activer la macro (sur une feuille différente), les premières lignes de cette macro, recherche la première case vide etc... sauf que je veux qu'elle la recherche sur la feuille ou ma liste apparait (afin de donner le point de départ de la liste suivante) et il recherche la première ligne et moi je veux la première colonne...

je sais pas trop si vous me suivez mais merci de m'aider en tout cas :)
0
mrjenkins Messages postés 580 Date d'inscription   Statut Membre Dernière intervention   102
 
En espérant avoir compris ta demande :

Sub maListe()
Dim premiereColonne As Variant

premiereColonne = Sheets("Faire la commande").Range("A1").End(xlToRight).Column + 1 'Récupère la 1ère colonne non vide
Sheets("Faire la commande").Cells(1, premiereColonne).Value = "Commande du " & Day(Date) & "/" & Month(Date) & "/" & Year(Date) ' On met la commande et la date
Sheets("Faire la commande").Cells(2, premiereColonne).Value = "Références" 'Le titre Références en dessous
Sheets("Faire la commande").Cells(2, premiereColonne).Interior.Color = RGB(255, 0, 0) 'La couleur

j = 3 '1ère ligne de la commande
i = 1 '1ère ligne de la liste des articles

While Range("A" & i).Value <> 0 'On boucle sur tous les articles
If (Range("B" & i).Value < Range("C" & i).Value) Then
If (Range("F" & i).Value > 0) Then
Worksheets("Faire la commande").Cells(j, premiereColonne).Value = Range("A" & i).Value
j = j + 1
End If
End If
''Wend
If (Range("B" & i).Value < 0) Then
MsgBox ("Erreur : il y a des stocks négatifs")
End If
i = i + 1 ' on passe à la ligne suivante
Wend
End Sub
0
Cédric
 
je comprends ce que vous avez codé :)
et c'est pile ce que je recherche (à part les couleurs que je vais changer surement)
par contre quand je fais exécuter, il me met erreur 1004, et quand je fais déblocage, il me surligne en jaune toutes les lignes une par une... :/
0
mrjenkins Messages postés 580 Date d'inscription   Statut Membre Dernière intervention   102
 
Il te surligne quoi ?

Tu peux remplacer ça
 Worksheets("Faire la commande").Cells(j, premiereColonne).Value = Range("A" & i).Value


Par ça
 Sheets("Faire la commande").Cells(j, premiereColonne).Value = Range("A" & i).Value


Après, il faudra sûrement mettre la Sheets devant les
Range("A"
pour qu'il sache où aller chercher les articles.
0
Cédric
 
J'ai changé le "Worksheets" en "Sheets" et les "Range("A"" mais que l'on fasse avec l'un ou l'autre ou avec ou sans les deux, ça remet quand même erreur 1004...
Pour ma part, je vais devoir vous laisser, votre aide m'a été fort utile et m'a permis d'en apprendre plus malgré que nous n'ayons pas résolu complétement mon problème, vous m'avez fait avancé d'un grand pas :D
et vous en suis très reconnaissant
Bonne fin d'après-midi
0
mrjenkins Messages postés 580 Date d'inscription   Statut Membre Dernière intervention   102
 
Dommage qu'on reste bloqué ^^

bon courage pour la suite !
0
Cédric
 
Bonjour mrjenkins,

Si tu veux m'aider de nouveau aujourd'hui, je rebosse sur le même code :
http://www.commentcamarche.net/forum/affich-33732955-affiche-x-msgbox-en-1#p33732955
sinon, pour afficher une date, je viens de trouver qu'on pouvait l'afficher comme ça :
MsgBox "Nous sommes le " & Date, vbOKOnly + vbInformation, "mDF XLpages.com"


Bonne journée
0
mrjenkins Messages postés 580 Date d'inscription   Statut Membre Dernière intervention   102
 
Je passerai si je trouve le temps (j'ai un peu plus de boulot ajd ^^).

Pour la date, oui ça marche aussi, mais ça dépend de tes paramètres régionaux. Ici, la date est au format mm-dd-YYYY, c'est pourquoi je l'ai reconstruite en dd/mm/YYYY ;)
0