Pb mise en forme via macros
Résolu
claire_31
Messages postés
7
Statut
Membre
-
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
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
A voir également:
- Pb mise en forme via macros
- Mise en forme conditionnelle excel - Guide
- Mise en forme tableau croisé dynamique - Guide
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Appliquez à tous les paragraphes du document à télécharger, à l’exception des titres et des sous-titres, la mise en forme suivante : - Guide
11 réponses
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
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
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...
Et du coup je me retrouve bloquée à faire des macros...
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
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
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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.
J'ai ajouté des
Selection.Font.Strikethrough = False
Selection.Interior.ColorIndex = False
là ou il fallait.
Merci beaucoup pour ton aide.
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...
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...
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
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