Optimiser une macro d'affichage
Bonjour à tous,
Je suis pas très doué en VBA alors pour créer ma macro, je suis passé par l'enregistrement de macros. Sauf que celui-ci me donne une macro très longue pour pas grand chose... Est ce qu'il y a moyen de la raccourcir ? (Elle me permet de modifier l'affichage d'une zone en fonction des valeurs dans D9, D21 et D33)
Je joins la macro :
If Worksheets("Page d'accueil").Range("D9") + Worksheets("Page d'accueil").Range("D21") + Worksheets("Page d'accueil").Range("D33") > 1 Then
Range("V66:AD74").Interior.PatternColorIndex = xlAutomatic
Range("V66:AD74").Interior.ThemeColor = xlThemeColorAccent3
Range("V66:AD74").Interior.TintAndShade = 0.599993896298105
Range("V66:AD74").Interior.PatternTintAndShade = 0
Range("V66:AD74").Font.ThemeColor = xlThemeColorAccent3
Range("V66:AD74").Font.TintAndShade = 0.599993896298105
Range("V79:AD87").Interior.PatternColorIndex = xlAutomatic
Range("V79:AD87").Interior.ThemeColor = xlThemeColorAccent3
Range("V79:AD87").Interior.TintAndShade = 0.599993896298105
Range("V79:AD87").Interior.PatternTintAndShade = 0
Range("V79:AD87").Font.ThemeColor = xlThemeColorAccent3
Range("V79:AD87").Font.TintAndShade = 0.599993896298105
Range("V92:AD92").Interior.PatternColorIndex = xlAutomatic
Range("V92:AD92").Interior.ThemeColor = xlThemeColorAccent3
Range("V92:AD92").Interior.TintAndShade = 0.599993896298105
Range("V92:AD92").Interior.PatternTintAndShade = 0
Range("V92:AD92").Font.ThemeColor = xlThemeColorAccent3
Range("V92:AD92").Font.TintAndShade = 0.599993896298105
Range("V62:AD92").Borders(xlDiagonalDown).LineStyle = xlNone
Range("V62:AD92").Borders(xlDiagonalUp).LineStyle = xlNone
Range("V62:AD92").Borders(xlEdgeLeft).LineStyle = xlNone
Range("V62:AD92").Borders(xlEdgeTop).LineStyle = xlNone
Range("V62:AD92").Borders(xlEdgeBottom).LineStyle = xlNone
Range("V62:AD92").Borders(xlEdgeRight).LineStyle = xlNone
Range("V62:AD92").Borders(xlInsideVertical).LineStyle = xlNone
Range("V62:AD92").Borders(xlInsideHorizontal).LineStyle = xlNone
Range("V62:AD92").Borders(xlDiagonalDown).LineStyle = xlNone
Range("V62:AD92").Borders(xlDiagonalUp).LineStyle = xlNone
Range("V62:AD92").Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("V62:AD92").Borders.ColorIndex = 0
Range("V62:AD92").Borders.TintAndShade = 0
Range("V62:AD92").Borders.Weight = xlThin
Range("V62:AD92").Borders(xlEdgeTop).LineStyle = xlContinuous
Range("V62:AD92").Borders.ColorIndex = 0
Range("V62:AD92").Borders.TintAndShade = 0
Range("V62:AD92").Borders.Weight = xlThin
Range("V62:AD92").Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("V62:AD92").Borders.ColorIndex = 0
Range("V62:AD92").Borders.TintAndShade = 0
Range("V62:AD92").Borders.Weight = xlThin
Range("V62:AD92").Borders(xlEdgeRight).LineStyle = xlContinuous
Range("V62:AD92").Borders.ColorIndex = 0
Range("V62:AD92").Borders.TintAndShade = 0
Range("V62:AD92").Borders.Weight = xlThin
Range("V62:AD92").Borders(xlInsideVertical).LineStyle = xlNone
Range("V62:AD92").Borders(xlInsideHorizontal).LineStyle = xlNone
Else
Range("V62:AD92").Borders(xlDiagonalDown).LineStyle = xlNone
Range("V62:AD92").Borders(xlDiagonalUp).LineStyle = xlNone
Range("V62:AD92").Borders(xlEdgeLeft).LineStyle = xlNone
Range("V62:AD92").Borders(xlEdgeTop).LineStyle = xlNone
Range("V62:AD92").Borders(xlEdgeBottom).LineStyle = xlNone
Range("V62:AD92").Borders(xlEdgeRight).LineStyle = xlNone
Range("V62:AD92").Borders(xlInsideVertical).LineStyle = xlNone
Range("V62:AD92").Borders(xlInsideHorizontal).LineStyle = xlNone
Range("V66:AD74").Interior.Pattern = xlNone
Range("V66:AD74").Interior.TintAndShade = 0
Range("V66:AD74").Interior.PatternTintAndShade = 0
Range("V66:AD74").Font.ColorIndex = xlAutomatic
Range("V66:AD74").Font.TintAndShade = 0
Range("V79:AD87").Interior.Pattern = xlNone
Range("V79:AD87").Interior.TintAndShade = 0
Range("V79:AD87").Interior.PatternTintAndShade = 0
Range("V79:AD87").Font.ColorIndex = xlAutomatic
Range("V79:AD87").Font.TintAndShade = 0
Range("V92:AD92").Interior.Pattern = xlNone
Range("V92:AD92").Interior.TintAndShade = 0
Range("V92:AD92").Interior.PatternTintAndShade = 0
Range("V92:AD92").Font.ColorIndex = xlAutomatic
Range("V92:AD92").Font.TintAndShade = 0
Range("V62:AD65").Borders(xlDiagonalDown).LineStyle = xlNone
Range("V62:AD65").Borders(xlDiagonalUp).LineStyle = xlNone
Range("V62:AD65").Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("V62:AD65").Borders.ColorIndex = 0
Range("V62:AD65").Borders.TintAndShade = 0
Range("V62:AD65").Borders.Weight = xlThin
Range("V62:AD65").Borders(xlEdgeTop).LineStyle = xlContinuous
Range("V62:AD65").Borders.ColorIndex = 0
Range("V62:AD65").Borders.TintAndShade = 0
Range("V62:AD65").Borders.Weight = xlThin
Range("V62:AD65").Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("V62:AD65").Borders.ColorIndex = 0
Range("V62:AD65").Borders.TintAndShade = 0
Range("V62:AD65").Borders.Weight = xlThin
Range("V62:AD65").Borders(xlEdgeRight).LineStyle = xlContinuous
Range("V62:AD65").Borders.ColorIndex = 0
Range("V62:AD65").Borders.TintAndShade = 0
Range("V62:AD65").Borders.Weight = xlThin
Range("V62:AD65").Borders(xlInsideVertical).LineStyle = xlNone
Range("V62:AD65").Borders(xlInsideHorizontal).LineStyle = xlNone
Range("V75:AD78").Borders(xlDiagonalDown).LineStyle = xlNone
Range("V75:AD78").Borders(xlDiagonalUp).LineStyle = xlNone
Range("V75:AD78").Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("V75:AD78").Borders.ColorIndex = 0
Range("V75:AD78").Borders.TintAndShade = 0
Range("V75:AD78").Borders.Weight = xlThin
Range("V75:AD78").Borders(xlEdgeTop).LineStyle = xlContinuous
Range("V75:AD78").Borders.ColorIndex = 0
Range("V75:AD78").Borders.TintAndShade = 0
Range("V75:AD78").Borders.Weight = xlThin
Range("V75:AD78").Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("V75:AD78").Borders.ColorIndex = 0
Range("V75:AD78").Borders.TintAndShade = 0
Range("V75:AD78").Borders.Weight = xlThin
Range("V75:AD78").Borders(xlEdgeRight).LineStyle = xlContinuous
Range("V75:AD78").Borders.ColorIndex = 0
Range("V75:AD78").Borders.TintAndShade = 0
Range("V75:AD78").Borders.Weight = xlThin
Range("V75:AD78").Borders(xlInsideVertical).LineStyle = xlNone
Range("V75:AD78").Borders(xlInsideHorizontal).LineStyle = xlNone
Range("V88:AD91").Borders(xlDiagonalDown).LineStyle = xlNone
Range("V88:AD91").Borders(xlDiagonalUp).LineStyle = xlNone
Range("V88:AD91").Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("V88:AD91").Borders.ColorIndex = 0
Range("V88:AD91").Borders.TintAndShade = 0
Range("V88:AD91").Borders.Weight = xlThin
Range("V88:AD91").Borders(xlEdgeTop).LineStyle = xlContinuous
Range("V88:AD91").Borders.ColorIndex = 0
Range("V88:AD91").Borders.TintAndShade = 0
Range("V88:AD91").Borders.Weight = xlThin
Range("V88:AD91").Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("V88:AD91").Borders.ColorIndex = 0
Range("V88:AD91").Borders.TintAndShade = 0
Range("V88:AD91").Borders.Weight = xlThin
Range("V88:AD91").Borders(xlEdgeRight).LineStyle = xlContinuous
Range("V88:AD91").Borders.ColorIndex = 0
Range("V88:AD91").Borders.TintAndShade = 0
Range("V88:AD91").Borders.Weight = xlThin
Range("V88:AD91").Borders(xlInsideVertical).LineStyle = xlNone
Range("V88:AD91").Borders(xlInsideHorizontal).LineStyle = xlNone
Range("V62:V65").Borders(xlDiagonalDown).LineStyle = xlNone
Range("V62:V65").Borders(xlDiagonalUp).LineStyle = xlNone
Range("V62:V65").Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("V62:V65").Borders.ColorIndex = 0
Range("V62:V65").Borders.TintAndShade = 0
Range("V62:V65").Borders.Weight = xlThin
Range("V62:V65").Borders(xlEdgeTop).LineStyle = xlContinuous
Range("V62:V65").Borders.ColorIndex = 0
Range("V62:V65").Borders.TintAndShade = 0
Range("V62:V65").Borders.Weight = xlThin
Range("V62:V65").Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("V62:V65").Borders.ColorIndex = 0
Range("V62:V65").Borders.TintAndShade = 0
Range("V62:V65").Borders.Weight = xlThin
Range("V62:V65").Borders(xlEdgeRight).LineStyle = xlContinuous
Range("V62:V65").Borders.ColorIndex = 0
Range("V62:V65").Borders.TintAndShade = 0
Range("V62:V65").Borders.Weight = xlThin
Range("V62:V65").Borders(xlInsideVertical).LineStyle = xlNone
Range("V62:V65").Borders(xlInsideHorizontal).LineStyle = xlNone
Range("V75:V78").Borders(xlDiagonalDown).LineStyle = xlNone
Range("V75:V78").Borders(xlDiagonalUp).LineStyle = xlNone
Range("V75:V78").Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("V75:V78").Borders.ColorIndex = 0
Range("V75:V78").Borders.TintAndShade = 0
Range("V75:V78").Borders.Weight = xlThin
Range("V75:V78").Borders(xlEdgeTop).LineStyle = xlContinuous
Range("V75:V78").Borders.ColorIndex = 0
Range("V75:V78").Borders.TintAndShade = 0
Range("V75:V78").Borders.Weight = xlThin
Range("V75:V78").Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("V75:V78").Borders.ColorIndex = 0
Range("V75:V78").Borders.TintAndShade = 0
Range("V75:V78").Borders.Weight = xlThin
Range("V75:V78").Borders(xlEdgeRight).LineStyle = xlContinuous
Range("V75:V78").Borders.ColorIndex = 0
Range("V75:V78").Borders.TintAndShade = 0
Range("V75:V78").Borders.Weight = xlThin
Range("V75:V78").Borders(xlInsideVertical).LineStyle = xlNone
Range("V75:V78").Borders(xlInsideHorizontal).LineStyle = xlNone
Range("V88:V91").Borders(xlDiagonalDown).LineStyle = xlNone
Range("V88:V91").Borders(xlDiagonalUp).LineStyle = xlNone
Range("V88:V91").Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("V88:V91").Borders.ColorIndex = 0
Range("V88:V91").Borders.TintAndShade = 0
Range("V88:V91").Borders.Weight = xlThin
Range("V88:V91").Borders(xlEdgeTop).LineStyle = xlContinuous
Range("V88:V91").Borders.ColorIndex = 0
Range("V88:V91").Borders.TintAndShade = 0
Range("V88:V91").Borders.Weight = xlThin
Range("V88:V91").Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("V88:V91").Borders.ColorIndex = 0
Range("V88:V91").Borders.TintAndShade = 0
Range("V88:V91").Borders.Weight = xlThin
Range("V88:V91").Borders(xlEdgeRight).LineStyle = xlContinuous
Range("V88:V91").Borders.ColorIndex = 0
Range("V88:V91").Borders.TintAndShade = 0
Range("V88:V91").Borders.Weight = xlThin
Range("V88:V91").Borders(xlInsideVertical).LineStyle = xlNone
Range("V88:V91").Borders(xlInsideHorizontal).LineStyle = xlNone
End If
Salut lamzo,
nous balancer un code de l'enregistreur de macros là où tu comprends toi-même qu'il est too much ne va pas nous aider à comprendre ton besoin
modifier l'affichage d'une zone en fonction des valeurs dans D9, D21 et D33
Comment veux-tu qu'on comprenne à quoi ça correspond ?
Règle 1 : un fichier ;
Règle 2 : des explications correctes et complètes
A+
Ok je vais illustrer ma demande de façon pertinente afin que vous n'ayez pas besoin de vous procurer une boule de cristal ^^
J'ai 2 mises en page possibles :
Mise en page 1: Avec cellules grisées
Mise en page 2: Sans cellules grisées
Je veux switcher entre ces 2 mises en page en fonction de la valeur de la somme des cellules M62, M74 et M86. (anciennement D9, D21 et D33)
Si la somme de ces 3 cellules est supérieure à 1 alors MISE EN PAGE 1
Sinon MISE EN PAGE 2
Fin SI
MON BESOIN : Compresser le code VBA...
Voici le fichier pour y voir plus clair.
Bonjour à tous,
Voici un essai de réorganisation du code :
with Worksheets("Page d'accueil")
If .Range("D9") + .Range("D21") + .Range("D33") > 1 Then
Formater .Range("V66:AD74")
Formater .Range("V79:AD87")
Formater .Range("V92:AD92")
.Range("V62:AD92").BorderAround xlContinuous, xlthin
Else
.Range("V62:AD92").BorderAround xlNone
Deformater .Range("V66:AD74")
Deformater .Range("V79:AD87")
Deformater .Range("V92:AD92")
.Range("V62:AD65").BorderAround xlContinuous, xlthin
.Range("V75:AD78").BorderAround xlContinuous, xlthin
.Range("V88:AD91").BorderAround xlContinuous, xlthin
.Range("V62:V65").BorderAround xlContinuous, xlthin
.Range("V75:V78").BorderAround xlContinuous, xlthin
.Range("V88:V91").BorderAround xlContinuous, xlthin
End If
end with
Sub Formater(Plage as range)
with Plage
.Interior.PatternColorIndex = xlAutomatic
.Interior.ThemeColor = xlThemeColorAccent3
.Interior.TintAndShade = 0.599993896298105
.Interior.PatternTintAndShade = 0
.Font.ThemeColor = xlThemeColorAccent3
.Font.TintAndShade = 0.599993896298105
end with
end sub
Sub Deformater(Plage as range)
with Plage
.Interior.Pattern = xlNone
.Interior.TintAndShade = 0
.Interior.PatternTintAndShade = 0
.Font.ColorIndex = xlAutomatic
.Font.TintAndShade = 0
end with
end subCdlt,
Merci 3GB ! Après quelques modifs de mon côté, j'ai obtenu ce que je voulais !!! Voici le code final :
'Mise en page 1 = avec cellules grisées
'Mise en page 2 = sans cellules grisées
' SI la somme de D9, D21 et D33 est supérieure à 1 ALORS "Mise en page 1" SINON "Mise en page 2"
With Worksheets("Page d'accueil")
If .Range("D9") + .Range("D21") + .Range("D33") > 1 Then
mettre_gris .Range("V66:AD74") 'colore en gris les cellules entre V66 et AD74 (appelle la procédure mettre_gris)
mettre_gris .Range("V79:AD87") 'colore en gris les cellules entre V79 et AD87 (appelle la procédure mettre_gris)
mettre_gris .Range("V92:AD92") 'colore en gris les cellules entre V92 et AD92 (appelle la procédure mettre_gris)
.Range("V62:AD92").BorderAround xlContinuous, xlThin 'crée la bordure autour de V62 et AD92
Range("V62:V65").Borders(xlEdgeRight).LineStyle = xlNone 'enleve la bordure droite de la selection
Range("V75:V78").Borders(xlEdgeRight).LineStyle = xlNone 'enleve la bordure droite de la selection
Range("V88:V91").Borders(xlEdgeRight).LineStyle = xlNone 'enleve la bordure droite de la selection
Range("V65:AD65").Borders(xlEdgeBottom).LineStyle = xlNone 'enleve la bordure du bas de la selection
Range("V74:AD74").Borders(xlEdgeBottom).LineStyle = xlNone 'enleve la bordure du bas de la selection
Range("V78:AD78").Borders(xlEdgeBottom).LineStyle = xlNone 'enleve la bordure du bas de la selection
Range("V87:AD87").Borders(xlEdgeBottom).LineStyle = xlNone 'enleve la bordure du bas de la selection
Range("V91:AD91").Borders(xlEdgeBottom).LineStyle = xlNone 'enleve la bordure du bas de la selection
Else
enlever_gris .Range("V66:AD74") 'enleve le gris dans entre V66 et AD74 (appelle la procédure enlever_gris)
enlever_gris .Range("V79:AD87") 'enleve le gris dans entre V79 et AD87 (appelle la procédure enlever_gris)
enlever_gris .Range("V92:AD92") 'enleve le gris dans entre V92 et AD92 (appelle la procédure enlever_gris)
.Range("V62:AD65").BorderAround xlContinuous, xlThin 'crée la bordure autour de V62 et AD65
.Range("V75:AD78").BorderAround xlContinuous, xlThin 'crée la bordure autour de V75 et AD78
.Range("V88:AD91").BorderAround xlContinuous, xlThin 'crée la bordure autour de V88 et AD91
.Range("V62:V65").BorderAround xlContinuous, xlThin 'crée la bordure autour de V62 et V65
.Range("V75:V78").BorderAround xlContinuous, xlThin 'crée la bordure autour de V75 et V78
.Range("V88:V91").BorderAround xlContinuous, xlThin 'crée la bordure autour de V88 et V91
Range("U66:U74").Borders(xlEdgeRight).LineStyle = xlNone 'enleve la bordure droite de la selection
Range("AD66:AD74").Borders(xlEdgeRight).LineStyle = xlNone 'enleve la bordure droite de la selection
Range("U79:U87").Borders(xlEdgeRight).LineStyle = xlNone 'enleve la bordure droite de la selection
Range("AD79:AD87").Borders(xlEdgeRight).LineStyle = xlNone 'enleve la bordure droite de la selection
Range("U92").Borders(xlEdgeRight).LineStyle = xlNone 'enleve la bordure droite de la selection
Range("AD92").Borders(xlEdgeRight).LineStyle = xlNone 'enleve la bordure droite de la selection
Range("V92:AD92").Borders(xlEdgeBottom).LineStyle = xlNone 'enleve la bordure du bas de la selection
End If
End With
End Sub
Sub mettre_gris(Plage As Range)
With Plage
.Interior.PatternColorIndex = xlAutomatic
.Interior.ThemeColor = xlThemeColorAccent3
.Interior.TintAndShade = 0.599993896298105
.Interior.PatternTintAndShade = 0
.Font.ThemeColor = xlThemeColorAccent3
.Font.TintAndShade = 0.599993896298105
End With
End Sub
Sub enlever_gris(Plage As Range)
With Plage
.Interior.Pattern = xlNone
.Interior.TintAndShade = 0
.Interior.PatternTintAndShade = 0
.Font.ColorIndex = xlAutomatic
.Font.TintAndShade = 0
End With
End SubSalut Lamzo,
Salut 3GB,
compressons, compressons...
Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim iIdx%
'
Application.ScreenUpdating = False
'
If Not Intersect(Target, Union([M62], [M74], [M86])) Is Nothing Then
Range("V62:AD92").ClearFormats
iIdx = IIf([M62] + [M74] + [M86] < 1, 0, 1)
If iIdx = 1 Then Range("V62:AD92").BorderAround LineStyle:=xlContinuous
For x = IIf(iIdx = 0, 62, 66) To 91 + iIdx Step 13
If iIdx = 0 Then _
Range("V" & x).Resize(4, 9).BorderAround LineStyle:=xlContinuous: _
Range("V" & x).Resize(4, 1).BorderAround LineStyle:=xlContinuous
If iIdx = 1 Then Range("V" & x).Resize(IIf(x = 92, 1, 9), 9).Interior.Color = RGB(220, 220, 220)
Next
End If
'
Application.ScreenUpdating = True
'
End Sub
A+