MFC - bordure cellule en vba

lumpy

XLDnaute Nouveau
Bonjour,

J'ai besoin de mettre par le biais d'une mise en forme conditionnelle sur une plage de cellules uniquement des bordures gauches et droites. J'ai testé quelques choses mais cela ne fonctionne pas. Si j'essai d'appliquer des bordures à tous les cotés des cellules pas de problèmes. Ci-joint un fichier test. Une idée ?

Merci d'avance.
 

Pièces jointes

  • MFC.xlsm
    17.6 KB · Affichages: 36
  • MFC.xlsm
    17.6 KB · Affichages: 41
  • MFC.xlsm
    17.6 KB · Affichages: 42

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : MFC - bordure cellule en vba

Bonjour lumpy,

essaie avec ce code:
Code:
Sub Bouton1_Cliquer()
    Sheets("Feuil1").Range("A2:AF1000").Select
    Selection.FormatConditions.Delete
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$A1<>"""""
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).Borders(xlLeft).LineStyle = xlContinuous
    Selection.FormatConditions(1).Borders(xlRight).LineStyle = xlContinuous
    Selection.FormatConditions(1).StopIfTrue = False
[A1].Select
End Sub

à+
Philippe
 

Iznogood1

XLDnaute Impliqué
Re : MFC - bordure cellule en vba

Bonjour,

je ne vois pas l'intérêt du VBA dans ce cas.
Ta MFC fonctionne si on corrige la petite erreur qui s'y était glissée
Voir fichier joint
 

Pièces jointes

  • Copie de MFC-1.xlsm
    14.9 KB · Affichages: 40

lumpy

XLDnaute Nouveau
Re : MFC - bordure cellule en vba

Effectivement c'est bien du VBA dont j'ai besoin. Merci phlaurent55, ce code fonctionne.

J'ai essayé de combiner plusieurs formules et là plus rien ne fonctionne :

Code:
Selection.FormatConditions.Delete
        
        'Appliquer couleur grise
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=SI(ET($R1<>"""";$R1<=AUJOURDHUI());VRAI;FAUX)"
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        Selection.FormatConditions(1).Borders(xlLeft).LineStyle = xlContinuous
        Selection.FormatConditions(1).Borders(xlRight).LineStyle = xlContinuous
        Selection.FormatConditions(1).Interior.Pattern = xlSolid
        Selection.FormatConditions(1).Interior.PatternColorIndex = xlAutomatic
        Selection.FormatConditions(1).Interior.ThemeColor = xlThemeColorDark1
        Selection.FormatConditions(1).Interior.TintAndShade = -0.249946592608417
        Selection.FormatConditions(1).Interior.PatternTintAndShade = 0
        Selection.FormatConditions(1).StopIfTrue = False
        
        'Appliquer couleur jaune
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=SI(ET($R1<>"""";$R1<AUJOURDHUI()+365);VRAI;FAUX)"
        Selection.FormatConditions(Selection.FormatConditions.Count).SetLastPriority
        Selection.FormatConditions(1).Borders(xlLeft).LineStyle = xlContinuous
        Selection.FormatConditions(1).Borders(xlRight).LineStyle = xlContinuous
        Selection.FormatConditions(1).Interior.Pattern = xlSolid
        Selection.FormatConditions(1).Interior.PatternColorIndex = xlAutomatic
        Selection.FormatConditions(1).Interior.Color = 13434879
        Selection.FormatConditions(1).Interior.TintAndShade = 0
        Selection.FormatConditions(1).Interior.PatternTintAndShade = 0
        Selection.FormatConditions(1).StopIfTrue = False
        
        'Appliquer des bordures à droite et à gauche lorsqu'un n° de client est saisit
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$A1<>"""""
        Selection.FormatConditions(Selection.FormatConditions.Count).SetLastPriority
        Selection.FormatConditions(1).Borders(xlLeft).LineStyle = xlContinuous
        Selection.FormatConditions(1).Borders(xlRight).LineStyle = xlContinuous
        Selection.FormatConditions(1).StopIfTrue = False

Une idée sur ce qui ne convient pas ?
 

Iznogood1

XLDnaute Impliqué
Re : MFC - bordure cellule en vba

Lumpy,

je pense que ton problème vient du fait de tes formules qui ne tiennent pas compte de la plage sélectionnée.

Ci-dessous une proposition qui corrige ce problème.

J'en ai profité pour "nettoyer" le code :
  • supprimer les instructions inutiles issues de l'enregistreur de macro
  • regrouper les objets ou propriétés avec With / End With
  • séparer la partie évaluation de la condition de la partie mise en forme des cellules


Enfin, vérifie que .StopIfTrue = True, .SetLastPriority et SetFirstPriority sont conformes à ton besoin.

Code:
Option Explicit

Sub Bouton1_Cliquer()

  Dim fc1 As FormatCondition
  Dim fc2 As FormatCondition
  Dim fc3 As FormatCondition
  Dim li As Long

  li = Selection.Row
  With Selection
    .FormatConditions.Delete
    'On pourrait remplacer la ligne précedante par Cells.FormatConditions.Delete pour supprimer l'ensemble des MFC de la feuille ; c'est au choix !
    Set fc1 = .FormatConditions.Add(Type:=xlExpression, Formula1:="=$A" & li & "<>""""")  '-> Ajouter des barres quand n° de client saisi
    Set fc2 = .FormatConditions.Add(Type:=xlExpression, Formula1:="=SI(ET($R" & li & "<>"""";$R" & li & "<AUJOURDHUI()+365);VRAI;FAUX)") '-> Couleur Jaune
    Set fc3 = .FormatConditions.Add(Type:=xlExpression, Formula1:="=SI(ET($R" & li & "<>"""";$R" & li & "<=AUJOURDHUI());VRAI;FAUX)") '-> Couleur grise
  End With
  
  With fc1
    .SetFirstPriority
    .StopIfTrue = False
    .Borders(xlLeft).LineStyle = xlContinuous
    .Borders(xlRight).LineStyle = xlContinuous
  End With
  
  With fc2 'Couleur jaune
    .StopIfTrue = True
    .Borders(xlLeft).LineStyle = xlContinuous
    .Borders(xlRight).LineStyle = xlContinuous
    .Interior.Color = 13434879
  End With
  
  With fc3  'Couleur grise
    .SetLastPriority
    .Borders(xlLeft).LineStyle = xlContinuous
    .Borders(xlRight).LineStyle = xlContinuous
    .Interior.ThemeColor = xlThemeColorDark1
    .Interior.TintAndShade = -0.249946592608417
  End With
 
End Sub
 
Dernière édition:

Discussions similaires