Retour à un format prédéfini apres une mise en forme conditionnelle via VBA

Poto

XLDnaute Occasionnel
Bonjour le forum, salut à tous,

je cherche à faire une mise en forme conditionnelle via vba (jusqu'ici pas de probleme) avec la possibilité de retourne à une mise en forme predefini, sur une autre sheet, lorsque aucune condition ne n'ai rempli.

je joins un fichier avec dans la feuille 1 une colonne verte dans laquelle on peut choisir une activité ( ON ou OFF). Lorqu'on choisi l'un des 2 choix, la mise en forme s'execute, mais lorsque j'efface l'activité (cad qu'il n'y a ni ON ni OFF dans la cellule), alors j'aimerai que la mise en forme de ces cellules reviennent à un état similaire à celui de la "référence" ce situant sur une autre feuille (Feuil2) et se nommant "FormatPlanning".
Afin de pourvoir repérer quel format doit etre appliquer je penser utiliser les numeros ID se situant colonne A.

Voici le code utiliser actuellement
Private Sub Worksheet_Change(ByVal Target As Range)


'On Error GoTo Worksheet_Change_Error


If Target.Text = "ON" Then
Target.Interior.Color = 65280
Target.Offset(0, 1).Interior.Color = 65280
Target.Offset(0, 2).Interior.Color = 65280
Target.Offset(0, 3).Interior.Color = 65280

ElseIf Target.Text = "OFF" Then
Target.Interior.Color = 49407 ' Color cell interior orange
Target.Offset(0, 1).Interior.Color = 49407
Target.Offset(0, 2).Interior.Color = 49407
Target.Offset(0, 3).Interior.Color = 49407

Else

Dim LigneTargetCell As String
Dim AdresseCellFormat As String

LigneTargetCell = Range("A" & Target.Row)
AdresseCellFormat = Application.WorksheetFunction.Match(LigneTargetCell, FormatPlanning, 0)


Target.Interior.Color = Range(AdresseCellFormat).Color
Target.Offset(0, 1).Interior.Color = Range(AdresseCellFormat).Offset(0, 1).Color
Target.Offset(0, 2).Interior.Color = Range(AdresseCellFormat).Offset(0, 2).Color
Target.Offset(0, 3).Interior.Color = Range(AdresseCellFormat).Offset(0, 3).Color
End If

Exit Sub

End Sub


toute aide/idée est la bienvenue et je suis ouvert à d'autre technique alternative (à savoir que je souhaite passer par cette technique plutot que par une mise en forme conditionnelle conventionnelle, car la feuille sur laquelle cete macro doit fonctionner fait plus de 4000 lignes et l'exemple ci joins ce repete plus de 300 fois, et c'est une galere a maintenir si une colonne ou une ligne est ajouté)

merci d'avance à tous ;)

Poto
 

Pièces jointes

  • Probleme Planning.xls
    44.5 KB · Affichages: 64
  • Probleme Planning.xls
    44.5 KB · Affichages: 69
  • Probleme Planning.xls
    44.5 KB · Affichages: 66

Poto

XLDnaute Occasionnel
Re : Retour à un format prédéfini apres une mise en forme conditionnelle via VBA

Super, merci beaucoup PierreJean

ca fonctionne nikel ;)
comme je suis curieux et que j aime bien savoir coment les choses fonctionne, pourrais tu m'explquer a quoi sert "flag" dans ton code ?? c est un control d'erreur ?

merci encore beaucoup de ton aide ;)


Pour ceux que ca interesse ( j'ai vu qu'il y a quelques demande sur la mise en forme conditionnelle aujourd'hui, voici le code retoucher par pierrejean et 100% fonctionnel ;

Public flag As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If flag Then Exit Sub
flag = True

'On Error GoTo Worksheet_Change_Error


If Target.Text = "ON" Then
Target.Interior.Color = 65280 ' Color cell interior green 'xlNone = Sans couleur de remplissage
Target.Offset(0, 1).Interior.Color = 65280
Target.Offset(0, 2).Interior.Color = 65280
Target.Offset(0, 3).Interior.Color = 65280

ElseIf Target.Text = "OFF" Then
Target.Interior.Color = 49407 ' Color cell interior orange
Target.Offset(0, 1).Interior.Color = 49407
Target.Offset(0, 2).Interior.Color = 49407
Target.Offset(0, 3).Interior.Color = 49407

Else

ide = Target.Offset(0, -1)
Set c = Sheets("Feuil2").Cells.Find(ide, LookIn:=xlValues, lookat:=xlWhole)
Sheets("Feuil2").Range(c.Offset(0, 1), c.Offset(0, 4)).Copy Destination:=Target

End If
flag = False

End Sub
 

pierrejean

XLDnaute Barbatruc
Re : Retour à un format prédéfini apres une mise en forme conditionnelle via VBA

Re

Il s'agit d'une des methodes pour eviter d'avoir une macro qui boucle indefiniment
Si dans une macro worksheet_change je crée un changement , ce changement lancera a nouveau la worksheet_change qui creera un changement qui lancera .....
L'idée est donc qu'entre le flag=true et le flag=false la worksheet soit inoperante d'ou le if flag then exit sub du debut
 

Poto

XLDnaute Occasionnel
Re : Retour à un format prédéfini apres une mise en forme conditionnelle via VBA

Re

Il s'agit d'une des methodes pour eviter d'avoir une macro qui boucle indefiniment
Si dans une macro worksheet_change je crée un changement , ce changement lancera a nouveau la worksheet_change qui creera un changement qui lancera .....
L'idée est donc qu'entre le flag=true et le flag=false la worksheet soit inoperante d'ou le if flag then exit sub du debut

merci beaucoup pour l'info ;)

sinon, juste une derniere question en restant sur le sujet... Existe t il une methode utilisant la mise en forme conditionnelle conventionnelle pour qu'une cellule se dise :"Si la cellule à ma droite contient le texte "ON", mon remplissage prend telle couleur " ???

merci encore pour tes éclaircissements ;)
 

pierrejean

XLDnaute Barbatruc
Re : Retour à un format prédéfini apres une mise en forme conditionnelle via VBA

Re

Il me semble qu'avec 2007/2010 la formule soit pour la cellule K2 : =J2="ON"
ensuite il suffit de reproduire la mise en forme pour qu'Excel interprete le 'cellule a ma droite'
 

Poto

XLDnaute Occasionnel
Re : Retour à un format prédéfini apres une mise en forme conditionnelle via VBA

Salut pierrejean,

je reviens vers toi car apres plusieurs essai, j'arrive pas à faire ceci:

ensuite il suffit de reproduire la mise en forme pour qu'Excel interprete le 'cellule a ma droite'


que voulez tu dire par reproduire la formule pour qu'excel interprete "la cellule a ma droite" ??
car la formule fonctionne mais la cellule ce colore que vers la gauche, pas vers la droite :(

une idée ?


merci d avance ;)

Poto
 

Discussions similaires

Statistiques des forums

Discussions
312 108
Messages
2 085 369
Membres
102 875
dernier inscrit
Jimbo2374