IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] mise en page


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de a.dequidt
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 77
    Points
    77
    Par défaut [VBA-E] mise en page
    Hello,

    Voila, j'ai plusieurs tableaux dans mon fichier excel et j'aimerai que les tableaux ne soient pas coupés quand ils tiennent sur 2 pages.
    Savez vous comment je peux gérer ça?

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 220
    Points : 177
    Points
    177
    Par défaut
    Salut Aurore.

    Alors quand tu parles de plusieurs tableaux, ce sont bien plusieurs feuilles, c'est bien ca?

    Tu veux faire la mise en page automatique par macro ?

    Alors il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ActiveSheet.PageSetup
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    End With
    Voilà. Tu fais ca pour toutes tes Worksheets.

    Mél

  3. #3
    Membre régulier Avatar de a.dequidt
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 77
    Points
    77
    Par défaut
    non en fait mon fichier excel est un logiciel d'offres, et en fonction des demandes des clients je fais un ou plusieurs tableaux

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 220
    Points : 177
    Points
    177
    Par défaut
    Un ou plusieurs tableaux ... mais sur la même feuille donc ?
    Tu veux imprimer la feuille entière, contenant donc plusieurs tableaux, sans les couper.
    Est-ce que tu as un moyen de connaître par avance la taille de tes tableaux, le nombre de colonnes et de lignes qu'ils contiennent ? Et est-ce que tous les tableaux de la même feuille sont de la même taille ?

  5. #5
    Membre régulier Avatar de a.dequidt
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 77
    Points
    77
    Par défaut
    Alors, je peux récupérer le nombre de ligne de mes tableaux en effet, la largeur des tableaux ne changent pas par contre la hauteur des lignes ne sont pas identiques

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 220
    Points : 177
    Points
    177
    Par défaut
    donc, si tes tableaux sont à la suite dans la même feuille, tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With ActiveSheet.PageSetup
    .PrintArea = "$A$1:$lettrecolonne" & n°ligne
    .FitToPagesWide = NombreDeTableauxEnLargeur
    .FitToPagesTall = NombreDeTableauxEnHauteur
    End With
    Set ActiveSheet.HPageBreaks(1).Location = Range("A" & NbDeLigneDeTonTableau1)
    Dis-moi si ca te convient

  7. #7
    Membre régulier Avatar de a.dequidt
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 77
    Points
    77
    Par défaut
    Quand tu dis
    NombreDeTableauxEnHauteur
    et
    NombreDeTableauxEnLargeur
    tu entends quoi par la

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par a.dequidt Voir le message
    Quand tu dis et
    tu entends quoi par la
    NombreDeTableauxEnLargeur : Tu dis en avoir 1, donc c'est 1
    NombreDeTableauxEnHauteur : Tu dis en avoir 1 ou 2, donc, c'est selon... 1 ou 2
    Mais je n'ai pas tout suivi

  9. #9
    Membre régulier Avatar de a.dequidt
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 77
    Points
    77
    Par défaut
    J'ai testé et ça bascule en format payasge

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Heureusement que j'ai dit
    Mais je n'ai pas tout suivi
    Enregistre une macro en faisant et vérifie ce que sont les paramètres FitToPagesWide et FitToPagesTall, le problème vient nécessairement de là.
    Je pense que melouille56 croyait tes deux tableaux, quand tu en avais deux, en largeur, pas en hauteur.

  11. #11
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Et si la zone d'impression est définie que pensez-vous de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.PageSetup.Zoom = 75
    Le 75 à adapter en fonction des besoins.
    A+

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par LeForestier Voir le message
    Bonjour,
    Et si la zone d'impression est définie que pensez-vous de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.PageSetup.Zoom = 75
    Le problème :
    Citation Envoyé par a.dequidt
    Alors, je peux récupérer le nombre de ligne de mes tableaux en effet, la largeur des tableaux ne changent pas par contre la hauteur des lignes ne sont pas identiques
    Dans ces condition, le zoom reste un bricollage.
    La solution passe par
    - Etablissement de la plage de cellules à imprimer
    - Fixer à 1 le nombre de page pour cette zone d'impression
    Ainsi, si le tableau est unique, il sera imprimé sur une page, de même que s'il y en a deux.
    On fait ça en enregistrant la macro et en nettoyant le code ensuite de tous les paramètres inutiles. Et il y en a une page (!)
    A+

  13. #13
    Membre régulier Avatar de a.dequidt
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 77
    Points
    77
    Par défaut
    << MOI

    Ca m'a modifier ma zone d'impression

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu connais ta plage, exemple $A$1:$H$172, alors tu mets ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Plage = Range("$A$1:$H$172").address
        ActiveSheet.PageSetup.PrintArea = Plage
        With ActiveSheet.PageSetup
            .FitToPagesWide = 1
            .FitToPagesTall = 1
        End With
    Et tu mets ça quelque soit ta plage

  15. #15
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Salut ouskel'n'or, ta solution rempli la feuille mais zoom automatiquement en hauteur et largeur, si les 2 tableaux sont asser long risque que ce soit un peu petit.
    J'ai bien une autre solution.... mais doit-je la mettre ?
    Bah... tant pis
    Bien sur définir la plage d'impression. Et connaître la dernière ligne du 1er tableau
    Le code ci-dessous déplace la coupure de la page si elle dépasse la hauteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim e
        e = ActiveSheet.HPageBreaks.Count 'nombre de page que contient la zone d'impression.
        'commence à 0 si une seule page. pour exemple le 1er tableau fini en ligne 70
     
        If e > 0 then 'il y à plusieur page
            Range("A70").Activate
            ActiveSheet.HPageBreaks.Add Before:=ActiveCell
        end if
    Je crois que ça répond bien à ce que tu demandais, si le tableau 2 dépasse la page qu'il ne soit pas coupé. Bien sur si le 2ém tableau est plus grand qu'une page...
    A+

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si j'ai bien compris vous avez plusieurs tableaux les uns en-dessous des autres.

    Est-ce que la nombre de lignes est le même pour tous ?

    Est-ce que le nombre de lignes vides éventuelles entre chaque est constant ?

    J'ai une procédure qui calcule la hauteur d'un tableau puis compare avec une hauteur prédéfinie pour une page en fonction de la mise en page (cette procédure sert dans un programme de facturation pour ne pas avoir le résultat que l'on voit souvent : une dernière page qui ne comprend qu'une ou 2 ligne(s) alors que la page précédente comprend des lignes vides inutiles.

    Seulement dans le cas où les solutions précédentes ne solutionneraient pas totalement votre problème, on peut adapter celle-ci.

  17. #17
    Membre régulier Avatar de a.dequidt
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 77
    Points
    77
    Par défaut
    Leforestier, ta solution ne génére un message d'erreur '1004'

    Jacques jean, le nombre de lignes peut varier d'un tableau a un autre; le nombre de lignes entre chaque peut changer lui aussi, ainsi que la hauteur des lignes du tableau.
    J'ai quand meme en sauvergarde les indices des lignes de début et fin de tableaux, et ce, pour tous les tableaux

  18. #18
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    J'ai tester ça sur mon PC et ça marche impec, il faut bien sur que..
    1°) tu active la page que tu doit imprimer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Worksheets("MaFeuille_A_imprimé").activate
    2°) comme indiquer, la zone d'impression est délimitée AVANT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       ActiveSheet.PageSetup.PrintArea = Range("A1:H172")
    et ensuite le code indiqué.
    Et garanti, ça marche...
    Edit: pour activate il faut mettre Worksheets

  19. #19
    Membre régulier Avatar de a.dequidt
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 77
    Points
    77
    Par défaut
    Pas au boulot

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Comme ton pb s'est déjà posé à moi (je m'étais arrangé autrement) j'ai cherché un code qui règle la question d'un ou deux tableaux respectivement dans une ou deux page d'édition, je m'y suis collé (VBA 2003, je précise car sur 2007 j'espère que les choses ont été améliorées)
    Le HPageBreaks ne fonctionne effectivement pas pour l'édition (jusqu'à preuve du contraire). Donc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Option Explicit
     
    Sub DefinirLaZoneDimpressionSurUneOuDeuxPages()
    Dim FL1 As Worksheet
    Dim PremiereLigne, PremiereColonne, DerniereLigne1
    Dim PremiereLigne2, DerniereLigne2
    Dim Plage, SautDePage
        Set FL1 = Worksheets("Feuil1") 'FL1 => instance de la feuille de calculs
     
        FL1.PageSetup.PrintArea = "" 'on supprime l'ancienne zone d'impression
     
        'Adresses du premier tableau
        PremiereLigne = FL1.UsedRange.Row
        PremiereColonne = FL1.UsedRange.Column
     
        'Plage du premier tableau
        Plage = FL1.Range(Cells(PremiereLigne, PremiereColonne).Address).CurrentRegion.Address
        'Avec split on obtient un tableau à deux dimensions 0 et 1, contenant l'adresse
        '... de la première et de la dernière cellule de la plage
        DerniereLigne1 = FL1.Range(Split(Plage, ":")(1)).Row 'on récupère la dernière ligne
     
        'Lancer la macro d'édition du premier tableau
        DéfinirLaZoneDimpressionCentrerEtEditer FL1, Plage
     
        'Recherche de la dernière ligne renseignée de la feuille de calculs
        DerniereLigne2 = FL1.Cells(65536, PremiereColonne).End(xlUp).Row
     
        'Le second tableau existe-t-il :
        PremiereLigne2 = FL1.Cells(DerniereLigne1, PremiereColonne).End(xlDown).Row
        'Il n'existe pas si PremiereLigne2 = 65536 ou si = DerniereLigne1
        If DerniereLigne2 <> 65536 And DerniereLigne2 > DerniereLigne1 Then
     
            'un second tableau existe, on en établit la plage
            Plage = FL1.Range(Cells(PremiereLigne2, PremiereColonne).Address).CurrentRegion.Address
     
            'Lancer la macro d'édition du second tableau
            DéfinirLaZoneDimpressionCentrerEtEditer FL1, Plage
        End If
        Set FL1 = Nothing
     
    End Sub
     
    Sub DéfinirLaZoneDimpressionCentrerEtEditer(FL1, Plage)
        FL1.PageSetup.PrintArea = Plage
        'On centre le tableau dans la page
        With ActiveSheet.PageSetup
            .CenterHorizontally = True
            .CenterVertically = True
        End With
        'ActiveSheet.PrintOut
     
    End Sub
    Pour vérifier la mise en page du tableau1 dans Excel (celle du tableau2, s'il existe, se verra en fin de macro) mets un point d'arrêt sur cette ligne
    DerniereLigne2 = FL1.Cells(65536, PremiereColonne).End(xlUp).Row
    Pour voir cette mise en page, affiche les sauts de page -> Affichage -> Aperçu des sauts de page
    Enfin, quand tu es certaine que ça te va, valide les "Printout".

    Inconvénient de la méthode : si tes pages sont numérotées, elles auront l'une et l'autre le N° 1

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VBA Excel] Mise en page
    Par raptor1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/06/2007, 14h01
  2. [VBA-E] Mise en page d'une feuille
    Par Myogtha dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/03/2007, 09h23
  3. [VBA-E]Mise en page à l'impression
    Par steps5ive dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/01/2007, 23h23
  4. [VBA-E] Mise en page de tout le classeur avec nb feuill inconnu
    Par tonf dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/04/2006, 15h25
  5. VBA creation doc word - mise en page
    Par estampille dans le forum VBA Word
    Réponses: 4
    Dernier message: 18/01/2006, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo