MFC - bordure cellule en vba

  • Initiateur de la discussion Initiateur de la discussion lumpy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

lumpy

Guest
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

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
 
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 ?
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
8
Affichages
791
Réponses
2
Affichages
619
Retour