XL 2010 Mise en forme automatique des tableaux

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

  • BBC Suivi Objectifs commerciaux the end.xls
    375 KB · Affichages: 31

luno123

XLDnaute Occasionnel
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.
 

job75

XLDnaute Barbatruc
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

  • BBC Suivi Objectifs commerciaux the end(1).xls
    211 KB · Affichages: 25

job75

XLDnaute Barbatruc
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

  • BBC Suivi Objectifs commerciaux the end(2).xls
    212.5 KB · Affichages: 21
Dernière édition:

job75

XLDnaute Barbatruc
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

  • BBC Suivi Objectifs commerciaux the end(3).xls
    214 KB · Affichages: 24

Discussions similaires

Statistiques des forums

Discussions
312 106
Messages
2 085 351
Membres
102 871
dernier inscrit
Maïmanko