Pb mise en forme via macros

Résolu
claire_31 Messages postés 7 Statut Membre -  
claire_31 Messages postés 7 Statut Membre -
Bonjour,

Tout d'abord je suis nouvelle sur ce site donc je ne sais pas si je vais reussir à joindre mon fichier pour etre plus claire.

Voila mon problème : j'ai crée des macros pour que dans un fichier xls les lignes se mettent d'une couleur si la valeur dans la colonne 1 de cette ligne vaut "tant" et d'une autre couleur si elle vaut "autrechose".

Je rencontre 2 problemes avec mes macros :
1°) quand je change la valeur cellule 1, la ligne garde quelques mises en forme relatives à la valeur precedente
2°) quand je supprime une ligne il y a un message d'erreur : "erreur d'execution '13' Incompatibilité de type" et en mettant fin ca redevient normal mais je sais pas pourquoi il y a ce message.

Voici ma macro:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 1 Then

If Target.Value <> "" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

If Target.Value = "Closed" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Interior.ColorIndex = 37
Else
If Target.Value = "Backlog" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Interior.ColorIndex = 35
Else
If Target.Value = "Ordered" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Interior.ColorIndex = 40
Else
If Target.Value = "Budgeted" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Interior.ColorIndex = 39
Else
If Target.Value = "Cancelled" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Select
With Selection.Interior
.ColorIndex = 16
.Pattern = xlSolid
End With
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 10
.Strikethrough = True
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End If
End If
End If
End If
End If
End If
End If
End Sub

J'espere que je suis comprehensible et merci par avance pour votre aide.
Claire

11 réponses

eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonsoir,

Sans même regarder ta macro, si tu as moins de 3 tests (sur excel 2003) va plutôt voir menu 'format / mise en forme conditionnelle..'.
Par exemple sélectionner A:G
menu 'format / mise en forme conditionnelle..'
'La formule est' =$A1=1
ensuite sur le bouton 'format...' tu vas mettre le motif désiré.
Avec 'Ajouter>>' tu peux mettre d'autres tests, dès qu'un est vrai les autres ne sont pas vu.

eric
0
claire_31 Messages postés 7 Statut Membre
 
Merci, mais mon probleme c'est justement qu'il y a beaucoup plus que 3 mises en forme!
Et du coup je me retrouve bloquée à faire des macros...
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
1°) quand je change la valeur cellule 1, la ligne garde quelques mises en forme relatives à la valeur precedente
Là faudrait être plus précise. Si c'est quand tu supprimes la valeur c'est normal, tu ne traite pas le cas ="".

2°) quand je supprime une ligne il y a un message d'erreur : "erreur d'execution '13' Incompatibilité de type" et en mettant fin ca redevient normal mais je sais pas pourquoi il y a ce message.
Dans ce cas ta sélection est la ligne complète ($7:$7 par exemple), et dans ce cas il faut sortir de la macro avec par exemple au début :
If Target.Cells.Count > 1 Then Exit Sub

edit pour le 1) :
ou ajouter un elseif à la fin pour traiter tous les cas différents de ceux listés
0
claire_31 Messages postés 7 Statut Membre
 
Super, le probleme 2°) est résolu.

Par contre pour le probleme 1°) quand je mets "cancelled" par exemple, les cellules selectionnées se mettent en gris barré mais quand je change et mets autre chose, les cellules restent grises et barrées.

Je ne sais pas comment annuler la mise en forme précédente si la valeur de la cellule change.
0

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

Posez votre question
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Ben oui, le 'barré' tu ne l'enlèves pas...
Après ton .select met Selection.Font.Strikethrough = False

Pour le gris si c'est le gris du fond il doit être remplacé par celui que tu mets par un autre mot clé.
Si tu vides ou met une autre saisie que celles définies c'est normal qu'il reste, les autres couleurs aussi puisque (je me repète) tu ne traites pas ces cas là. Si ça peut arriver, il faut traiter.
0
claire_31 Messages postés 7 Statut Membre
 
Ca y est c'est parfait, merci beaucoup!
J'ai ajouté des
Selection.Font.Strikethrough = False
Selection.Interior.ColorIndex = False
là ou il fallait.

Merci beaucoup pour ton aide.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Très bien, bonne continuation :-)
eric
0
claire_31 Messages postés 7 Statut Membre
 
Me revoila pour le meme problème.

L'autre soir tout marchait parfaitement et aujourd'hui plus rien ne mache.
C'est à ne rien y comprendre ces macros.
Voila mon programme terminé :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Target.Column = 1 Then

If Target.Cells.Count > 1 Then Exit Sub

If Target.Value <> "A" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Font.Strikethrough = False
Selection.Interior.ColorIndex = False

If Target.Value = "B" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Interior.ColorIndex = 37
Selection.Font.Strikethrough = False

Else
If Target.Value = "C" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Interior.ColorIndex = 35
Selection.Font.Strikethrough = False
Else
If Target.Value = "D" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Interior.ColorIndex = 40
Selection.Font.Strikethrough = False
Else
If Target.Value = "Budgeted" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Interior.ColorIndex = 39
Selection.Font.Strikethrough = False
Else
If Target.Value = "Cancelled" Then
Range(Cells(Target.Row, 1), Cells(Target.Row, 62)).Select
With Selection.Interior
.ColorIndex = 16
.Pattern = xlSolid
End With
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 10
.Strikethrough = True
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End If
End If
End If
End If
End If
End If
End If
End Sub

Peut etre n'ai-je rien compris...
0
claire_31 Messages postés 7 Statut Membre
 
Quelqu'un peut m'aider???


MErci!
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonjour,

J'ai structuré ton code un peu autrement que ce soit plus clair, c'est la feuil1.
Sinon en feuil2 je te propose une autre approche : définir tes formats dans une plage nommée Legende (dans la 3ème feuille Listes), récupérer et appliquer le format si le texte correspond (je ne tiens pas compte des majuscule/minuscules).
Avantage : tu peux ajouter des formats et les modifier sans reprendre le code, il suffit qu'ils soient présents dans la plage Legende.
Pour ajouter un format sélectionne d'abord une cellule de la plage Legende et ensuite selectionne la zone d'édition avec une * en bas de la liste. C'est pour que la définition de la plage Legende s'étende avec la liste.
Attributs récupérés : couleur fond, couleur police, gras, italique, barré.
Sur le même modèle tu peux ajouter d'autres attributs (souligné, police et/ou sa taille,...)

Claire.xls

eric
0
claire_31 Messages postés 7 Statut Membre
 
Bonjour Eric,

Vraiment merci beaucoup, je vais analyser tes 2 possibilités et voir laquelle est la plus adaptée à mon cas.
C'est vraiment tres sympa d'avoir passé du temps à m'aider.

Encore Merci.
Claire
0