Amélioration macro

Bonjour à tous,

J'aurai besoin de votre aide pour améliorer cette macro.

Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("D11:D" & [D60000].End(xlUp).Row)) Is Nothing Then Exit Sub
  Dim C As Range
  For Each C In Range(Target.Address)
    C.Font.ColorIndex = IIf(C <> "so_cr_terms", 3, 0)
  Next
End Sub

Je joins aussi le fichier Excel.

Cette macro permet de mettre en rouge uniquement les textes (F4 à F8) que je dois coller dans la colonne D via un autre fichier excel et le reste doit être en noir.

Si un autre texte qui ne se trouve pas de F3 à F8 est collé, il doit se mettre en noir.

Uniquement les 4 termes ci-dessous doivent se mettre en rouge, le reste en noir et uniquement pour la colonne D, les autres colonnes, le texte doit rester noir:

sod_list_pr

so_disc_pct

sod_disc_pct

so_ship

Merci

18couleurvba.zip (16.81 Ko)

Bonjour,

La macro qui est dans ton fichier est différente de celle que tu as postée ici.

Sinon essaie

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or Intersect(Target, Range("D11:D" & Range("D65536").End(xlUp).Row)) Is Nothing Then Exit Sub
Select Case Target
  Case Is = "sod_list_pr", "so_disc_pct", "sod_disc_pct", "so_ship"
    Target.Font.ColorIndex = 3
  Case Else
    Target.Font.ColorIndex = xlAutomatic
End Select
End Sub

A te relire

Dan

Bonjour Dan et merci pour cette modif

Par contre, ça ne fonctionne pas

Je joins le nouveau fichier car j'avais des mises en forme conditionnellees avant mais comme j'ai rajouté une 4è données à mettre en rouge et qu'il ne peut y avoir que 3 conditions, je suis donc obligé de passer par une macro sur cette feuille.

Voici le fichier original.

Merci

24test.zip (35.93 Ko)

Re,

Si cela fonctionne mais à partir du moment où tu ne changes pas le code que je t'ai proposé. Ce qui n'est pas le cas dans ton nouveau fichier.

Maintenant le code ne va mettre à jour toute ta base bien sûr. Il faudra que tu recliques dans chaque cellule pour que le code agisse.

Dan

Il faut que la macro n'agisse que sur la feuille "commande" car il y a des mises en forme conditionnelle sur les autres feuilles.

Je n'arrive pas à la faire fonctionner

Re,

Il faut que la macro n'agisse que sur la feuille "commande" car il y a des mises en forme conditionnelle sur les autres feuilles.

Dans ton fichier "Test", la macro est bien placée dans la feuille "commande". elle ne fonctionne pas avec les autres feuilles.

Si tu n'arrives pas à la faire fonctionner c'est que :

  • la macro n'est pas placée dans ta feuille "commande" -> vérifie par clique droite sur l'onglet, puis "visualiser le code"
  • tes macros sont désactivées. Vois par Outils / Macro / sécurité --> mettre sur "niveau moyen"
  • c'est que ton code n'est pas celui que je t'ai proposé

A te relire

Dan

Je crois avoir compris pourquoi cela ne fonctionne pas car lorsque je saisie manuellement le texte en colonne D, il se met bien en rouge , par contre, je vais chercher mes données sur un autre fichier excel puis je les colle dans cette la feuille "commande" et là tout reste noir

J'ai remis exactement ton code...

re,

Ok j'ai compris là.

Fais ceci :

1. Dans la feuille "commande", remplace ton code par celui-ci dessous :

Private Sub Worksheet_Change(ByVal Target As Range)
Call maj
End Sub

2. Crée un module dans VBA (ALT+F11 sur ton clavier puis Insertion / Module), puis colle le code ci-dessous

Sub maj()
'Macro Dan pour Chris95 le 09/02/2010
Dim plage As Range, cel As Range
Set plage = Sheets("commandes").Range("D11:D" & Range("D65536").End(xlUp).Row)
For Each cel In plage
Select Case cel
  Case Is = "so_ship", "so_disc_pct", "sod_list_pr", "sod_disc_pct"
    cel.Font.ColorIndex = 3
  Case Else
    cel.Font.ColorIndex = xlAutomatic
End Select
Next
End Sub

Amicalement

Dan

Extra, ça fonctionne à la perfection !

Merci beaucoup pour votre aide

Amicalement,

Christophe

Rechercher des sujets similaires à "amelioration macro"