Modifier la mise en forme d'un tableau dont le nombre de lignes peut varier

Seb@stien

XLDnaute Nouveau
Bonjour à tous !
Je viens sur ce forum car je suis novice sur Excel et je ne connais pas grand chose aux macros mais si quelqu'un peut me dépanner, je lui en serai très reconnaissant ! ;)
Voici mon prob : j'aimerais savoir comment je dois faire pour que mes tableaux gardent la même mise en forme (épaisseur des bordures, pointillés et bordures épaisses en fin de tableaux) sachant que le nombre de lignes de ce tableaux peut évoluer au cours du temps.
En gros, qd on ajoute un nom dans la case B16, j’aimerais que la mise en forme soit modifiée instantanément et idem si je supprime un nom d'une des cases, j'aimerais que la mise en forme soit annulée.
Je joins un exemple : le haut de mon tableau est correct mais le bas commence à déconner dès que je modifie le nombre de ligne....
D'avance merci à toutes les personnes qui pourront me dépanner !
 

Pièces jointes

  • Grille Bilan de classe.xlsm
    48.5 KB · Affichages: 51

job75

XLDnaute Barbatruc
Re : Modifier la mise en forme d'un tableau dont le nombre de lignes peut varier

Bonjour Seb@stien, le forum,

Si vous nous aviez présenté un fichier moins bordélique vous auriez eu des réponses.

J'ai donc nettoyé votre fichier en enlevant toutes les mises en forme conditionnelles (MFC).

Puis j'ai mis cette macro dans le code de la feuille :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, derlig As Long
Set P = Range("A:S,U:AG,AI:AN") 'les 3 tableaux
Application.EnableEvents = False
For Each P In P.Areas
  If Not Intersect(Target, P) Is Nothing Then
    Application.ScreenUpdating = False
    P.FormatConditions.Delete 'suppression de toute MFC
    derlig = P.Find("*", , xlValues, , xlByRows, xlPrevious).Row
    If derlig > 4 Then
      P.Rows(4).AutoFill P.Rows("4:" & derlig), xlFillFormats
    End If
    With P.Rows("2:" & derlig)
      .FormatConditions.Add xlExpression, Formula1:="=MOD(LIGNE();2)"
      .FormatConditions(1).Interior.ColorIndex = 15
    End With
    P.Rows(derlig).Borders(xlEdgeBottom).Weight = xlThick
    P.Rows(derlig).Borders(xlEdgeBottom).ColorIndex = xlAutomatic
    P.Rows(derlig + 1 & ":" & Rows.Count).ClearFormats 'RAZ en dessous
  End If
Next
Application.EnableEvents = True
End Sub
Maintenant chacun des 3 tableaux s'adapte quand on efface ou entre des données.

Nota : les "" renvoyés par les formules en colonne A U AI sont ignorés dans la détermination de derlig.

Fichier .xls joint.

A+
 

Pièces jointes

  • Grille Bilan de classe(1).xls
    57.5 KB · Affichages: 35
Dernière édition:

Misange

XLDnaute Barbatruc
Re : Modifier la mise en forme d'un tableau dont le nombre de lignes peut varier

Bonjour, Bonjour Job

Pour ma part, j'utilise toujours les fonctionnalités de base d'excel dès que c'est possible
Dans le cas présent le recours à des tableaux excel (onglet/Style/mettre sous forme de tableaux) réponds à la question sans avoir besoin de macros.
Les mise en forme des tableaux sont complètement paramétrables en terme de couleurs, alternances des bandes, polices de caractère, bordures.... Excel en propose plusieurs par défaut mais on peut tout changer
Ce lien n'existe plus
 

job75

XLDnaute Barbatruc
Re : Modifier la mise en forme d'un tableau dont le nombre de lignes peut varier

Re, bonjour Misange,

Voici une 2ème version, plus compliquée, si l'on veut une MFC à 2 conditions dans le 1er tableau :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, n As Byte, derlig As Long, sel As Range
Set P = Range("A:S,U:AG,AI:AN") 'les 3 tableaux
Application.EnableEvents = False
For Each P In P.Areas
  n = n + 1
  If Not Intersect(Target, P) Is Nothing Then
    Application.ScreenUpdating = False
    P.FormatConditions.Delete 'suppression de toute MFC
    derlig = P.Find("*", , xlValues, , xlByRows, xlPrevious).Row
    If derlig > 4 Then
      P.Rows(4).AutoFill P.Rows("4:" & derlig), xlFillFormats
    End If
    With P.Rows("3:" & derlig)
      If n = 1 Then
        Set sel = Selection 'mémorise
        .Cells(1).Select
        .FormatConditions.Add xlExpression, , "=ET(COLONNE()>3;N(A3)>3)"
        sel.Select
        With .FormatConditions(1)
          .Interior.ColorIndex = 7 'rose
          .Font.Bold = True
          .Font.ColorIndex = 5 'bleu
        End With
      End If
      .FormatConditions.Add xlExpression, , "=MOD(LIGNE();2)"
      .FormatConditions(IIf(n = 1, 2, 1)).Interior.ColorIndex = 15 'gris
    End With
    P.Rows(derlig).Borders(xlEdgeBottom).Weight = xlThick
    P.Rows(derlig).Borders(xlEdgeBottom).ColorIndex = xlAutomatic
    P.Rows(derlig + 1 & ":" & Rows.Count).ClearFormats 'RAZ en dessous
  End If
Next
Application.EnableEvents = True
End Sub
A+
 

Pièces jointes

  • Grille Bilan de classe(2).xls
    68 KB · Affichages: 36

job75

XLDnaute Barbatruc
Re : Modifier la mise en forme d'un tableau dont le nombre de lignes peut varier

Re,

En fait, nul besoin de supprimer et de reconstruire les MFC par macro.

Il suffit de les créer manuellement une fois pour toutes, inutile ensuite de s'en préoccuper.

Elles sont recopiées comme les autres formats :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, derlig As Long
Set P = Range("A:S,U:AG,AI:AN") 'les 3 tableaux
Application.EnableEvents = False
For Each P In P.Areas
  If Not Intersect(Target, P) Is Nothing Then
    Application.ScreenUpdating = False
    derlig = P.Find("*", , xlValues, , xlByRows, xlPrevious).Row
    If derlig > 4 Then
      P.Rows(4).AutoFill P.Rows("4:" & derlig), xlFillFormats
    End If
    P.Rows(derlig).Borders(xlEdgeBottom).Weight = xlThick
    P.Rows(derlig).Borders(xlEdgeBottom).ColorIndex = xlAutomatic
    P.Rows(derlig + 1 & ":" & Rows.Count).ClearFormats 'RAZ en dessous
  End If
Next
Application.EnableEvents = True
End Sub
Fichier (3).

A+
 

Pièces jointes

  • Grille Bilan de classe(3).xls
    67 KB · Affichages: 33

Discussions similaires