XL 2010 Mise en forme automatique des tableaux

  • Initiateur de la discussion Initiateur de la discussion luno123
  • 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 !

luno123

XLDnaute Occasionnel
Bonjour,

Ci-joint un fichier sur lequel je souhaiterais rajouter une mise en forme automatique.
Pour rappel, j'ai plusieurs onglets (masqués) qui correspondent à chacun des commerciaux.
J'ai plusieurs lignes vides (pas de client). J'aimerais que la mise en forme se fasse en fonction du nombre de clients renseignés. Par exemple pour Grégoire BOUCHET, le tableau doit s'arrêter à la ligne 15. Cela m'éviterait d'imprimer (si je ne fais pas attention, des feuilles vides).
D'autre part, serait-il possible d'appliquer automatiquement la mise en forme sur les lignes dont le client est renseigné. Par exemple pour Grégoire BOUCHET, les lignes sont tracées

Merci d'avance

Luno
 

Pièces jointes

Bonjour Jocelyn,

Désolé de n'avoir pas été clair en tout cas pour toi.
J'ai des onglets pour chaque commercial.
Ils ont un nombre de clients différent chacun.
J'aimerais que la mise en forme de mon tableau se fasse en fonction du nombre de lignes (ou clients rentrés). Que le tableau ne fasse pas 300 lignes alors que juste 15 sont remplies. Autrement dit, si le dernier client est à la ligne 15, le tableau s'arrêtera à la ligne 15.
 
Bonjour luno123, Jocelyn,

Il suffit de modifier le code de la macro Workbook_SheetChange :
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> "Menu" Then Exit Sub
If Intersect(Target, Sh.[C4]) Is Nothing Then Exit Sub
Dim derlig&
Workbook_Open 'RAZ
On Error Resume Next 'si la feuille n'existe pas
With Sheets(CStr(Sh.[C4]))
    .Visible = xlSheetVisible
    With .Range("A7:Q" & .Rows.Count)
        .Sort .Columns(4), xlDescending, Header:=xlNo 'tri sur colonne D
        .Borders(xlInsideHorizontal).LineStyle = xlNone 'effacement des bordures horizontales
        derlig = .Find("*", , xlValues, , xlByRows, xlPrevious).Row
        .Resize(derlig - 6).Borders(xlInsideHorizontal).Weight = xlHairline 'bordures horizontales
        .Parent.PageSetup.PrintArea = .EntireColumn.Resize(derlig).Address 'zone d'impression
    End With
    Application.Goto .[A1], True 'cadrage
End With
End Sub
La macro crée les bordures horizontales (ce n'est pas indispensable) et surtout définit la zone d'impression.

Pour toutes les feuilles : orientation "Paysage" et 1 page en largeur pour la mise en page.

A+
 

Pièces jointes

Re,

Avec le code précédent la mise en forme du tableau se fait uniquement quand on active sa feuille à partir de la feuille "Menu".

Si l'on veut pouvoir formater le tableau directement sur sa feuille utiliser :
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> "Menu" Then Exit Sub
If Intersect(Target, Sh.[C4]) Is Nothing Then Exit Sub
Workbook_Open 'RAZ
On Error Resume Next 'si la feuille n'existe pas
With Sheets(CStr(Sh.[C4]))
    .Visible = xlSheetVisible
    Application.Goto .[A1], True 'cadrage
End With
Mise_en_forme
End Sub

Sub Mise_en_forme()
'se lance par Ctrl+M
If ActiveSheet.Name = "Menu" Then Exit Sub
Dim derlig&
On Error Resume Next
With Range("A7:Q" & Rows.Count)
    .Sort .Columns(4), xlDescending, Header:=xlNo 'tri sur colonne D
    .Borders(xlInsideHorizontal).LineStyle = xlNone 'effacement des bordures horizontales
    derlig = .Find("*", , xlValues, , xlByRows, xlPrevious).Row
    .Resize(derlig - 6).Borders(xlInsideHorizontal).Weight = xlHairline 'bordures horizontales
    .Parent.PageSetup.PrintArea = .EntireColumn.Resize(derlig).Address 'zone d'impression
End With
End Sub
Les touches de raccourci Ctrl+M permettent de lancer la macro quand on veut.

Fichier (2).

A+
 

Pièces jointes

Dernière édition:
Re,

Puisque c'est "the end" dépêchons-nous d'en profiter.

Cette instruction permet de définir le nom derlig dans la feuille (et non pas dans le classeur) :
Code:
    .Parent.Names.Add "derlig", derlig 'nom défini dans la feuille
Une 3ème condition pour la MFC sur A:Q permet d'effacer le format (bordures, bandes) sous derlig :
Code:
=LIGNE()>derlig
Le tableau est donc maintenant bien délimité.

Fichier (3).

A+
 

Pièces jointes

- 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

Discussions similaires

Réponses
6
Affichages
159
Réponses
3
Affichages
372
Retour