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 :

Mise en page par VBA


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant - Stage MOA
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant - Stage MOA
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 28
    Points
    28
    Par défaut Mise en page par VBA
    Bonjour à tous,

    Je developpe actuellement une macro pour transférer des données d'un classeur à l'autre, tout fonctionne parfaitement.
    Cependant dans l'optique de soulager mes collaborateurs du mieux que je peux de leur travail, je me posais les questions suivantes :
    - Est il possible de régler la mise en page d'une feuille pour que celle-ci tienne sur une page d'elle même (Zoom, zone de selection, marge)
    Dans mon cas la page est en impression verticale et tient sur deux pages malheureusement, il faut donc gérer le zoom et la zone d'impression
    - Est il possible sur la même feuille d'avoir une impression verticale du première élément puis horizontale du second élément (je souhaite également régler sa mise en page)
    J'aimerais également placer le second élément sur une deuxième feuille sans empiéter sur le premier !

    Merci d'avance pour vos retours,
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 257
    Points
    34 257
    Par défaut
    Salut,

    en utilisant l'enregistreur de macro tu devrais arriver a tes fins


    Ce qu'il te faut :
    dans ton onglet mise en page => largeur 1 page / hauteur 1 page + determiner la printarea = zone d'impression
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant - Stage MOA
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant - Stage MOA
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Merci beaucoup pour le retour rapide !
    Et à propos d'imprimer deux éléments vertical et horizontal sur une même page ?
    J'ai cherché sur internet en premier reflex et je suis tomber sur ça :

    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
    Sub Imprime()
    'Impression de la 1ère page en portrait
    '--------------------------------------
    Range("A1:C6").Select 'définition de la plage de cellules constituant la 1ère page
    ActiveSheet.PageSetup.PrintArea = "$A$1:$C$6" 'définition de la zone d'impression
    ActiveSheet.PageSetup.Orientation = xlPortrait 'mise au format portrait
    ActiveSheet.PageSetup.CenterHorizontally = True 'centrage horizontal de la feuille
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 'impression
     
    'Impression de la 2ème page en paysage
    '-------------------------------------
    Range("A7:I9").Select 'définition de la plage de cellules constituant la 2ème page
    ActiveSheet.PageSetup.PrintArea = "$A$7:$I$9" 'définition de la zone d'impression
    ActiveSheet.PageSetup.Orientation = xlLandscape 'mise au format paysage
    ActiveSheet.PageSetup.CenterHorizontally = True 'centrage horizontal de la feuille
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 'impression
     
    Range("A1").Select
     
    End Sub
    Je vous retournerais le fonctionnement de cette macro ou non, il faut d'abrod que je comprenne comment faire la mise en page de manière cohérente

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 257
    Points
    34 257
    Par défaut
    Pour les pages en largeur, et hauteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ActiveSheet.PageSetup
            .FitToPagesWide = 1
            .FitToPagesTall = 1
    End With
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudiant - Stage MOA
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant - Stage MOA
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Merci pour le retour,

    Je vais m'y atteler dans peu de temps, je retape une macro' pas sauvegardée ... je vous tiens au courant dans l'après midi mais je pense avoir les elements qu'il me manquait ! merci

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Etudiant - Stage MOA
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant - Stage MOA
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Bonjour à tous,

    J'ai finalement eu le temps de faire une tentative, la macro marche en pas à pas mais bug en execution automatique avec bouton, la macro associé à celle ci permet de créer un bouton dans un nouveau classeur renvoyant directement à la macro de notre classeur mère (c'est donc la macro 3)

    La macro fonctionne donc en pas à pas, mais en bouton click il y a un problème au niveau de la mise en page verticale ou horizontale. Je ne sais pas vraiment pourquoi, aussi j'aimerais camoufler les 6 dernières lignes si celles-ci sont toute vides
    Pour expliquer rapidement pourquoi il y a des derlignes, c'est simplement car les lignes sont variables au niveau de la liste a droite et du texte en bas a gauche.
    Le vrai problème et le sens de la page qui s'execute mal sur commande mais pas en pas à pas, je comprends pas vraiment si quelqu'un peut m'éclairer !

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Sub Impression()
    Dim BLOUP As Boolean
    Dim BLOU As Boolean
     
    'Impression de la 1ère page en portrait
    '--------------------------------------
    ActiveSheet.Select
     
    Select Case MsgBox("Souhaitez vous imprimer le descriptif ?", vbYesNo, "Descriptif")
        Case vbYes
            BLOUP = True
        Case vbNo
            BLOUP = False
    End Select
     
    If BLOUP = True Then
    DerRows1 = Range("C65536").End(xlUp).Row
    'MsgBox DerRows1
    DerRows1 = DerRows1 + 2
     
    Range(Cells(1, 1), Cells(DerRows1, 5)).Select 'définition de la plage de cellules constituant la 1ère page5
    ActiveSheet.PageSetup.PrintArea = "$B$2:$E$" & DerRows1 'définition de la zone d'impression
    Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .Orientation = xlPortrait
            .LeftMargin = Application.InchesToPoints(0.2)
            .RightMargin = Application.InchesToPoints(0.2)
            .TopMargin = Application.InchesToPoints(0.2)
            .BottomMargin = Application.InchesToPoints(0.2)
            .HeaderMargin = Application.InchesToPoints(0.2)
            .FooterMargin = Application.InchesToPoints(0.2)
            .FitToPagesWide = 1
            .FitToPagesTall = 1
        End With
    ActiveSheet.PageSetup.Orientation = xlPortrait 'mise au format portrait
    'ActiveSheet.PageSetup.CenterHorizontally = True 'centrage horizontal de la feuille
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 'impression
    End If
     
     
    'Impression de la 2ème page en paysage
    '-------------------------------------
    Select Case MsgBox("Souhaitez vous imprimer la liste ?", vbYesNo, "Liste")
        Case vbYes
        BLOU = vbTrue
        Case vbNo
        BLOU = vbFalse
    End Select
     
    If BLOU = True Then
     
    ActiveSheet.Select
     
    DerRows2 = Range("H65536").End(xlUp).Row
    'MsgBox DerRows2
    Range(Cells(2, 8), Cells(DerRows2 + 1, 30)).Select 'définition de la plage de cellules constituant la 2ème page
    ActiveSheet.PageSetup.PrintArea = "$H$2:$AC$" & DerRows2 'définition de la zone d'impression
    With ActiveSheet.PageSetup
            .Orientation = xlLandscape
            .LeftMargin = Application.InchesToPoints(0.2)
            .RightMargin = Application.InchesToPoints(0.2)
            .TopMargin = Application.InchesToPoints(0.2)
            .BottomMargin = Application.InchesToPoints(0.2)
            .HeaderMargin = Application.InchesToPoints(0.2)
            .FooterMargin = Application.InchesToPoints(0.2)
            .FitToPagesWide = 1
            .FitToPagesTall = 1
    End With
    ActiveSheet.PageSetup.Orientation = xlLandscape 'mise au format paysage
    'ActiveSheet.PageSetup.CenterHorizontally = True 'centrage horizontal de la feuille
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 'impression
     
    End If
     
    End Sub
    Merci d'avance à tous,

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 257
    Points
    34 257
    Par défaut
    SAlut,

    pour les 6 derniere lignes, c'est pas juste une histoire de printearea a mettre a jour ?

    Si ton utilsiation clique 2 fois sur OUI => PB

    Ce que je crois voir dans ton code, c'est que tu as 2 zones d'impression, donc forcement, la deuxieme partie du code vient ecraser la premiere partie.

    Donc soit tu pars sur 2 pages differentes, soit tu lances une impression juste apres avoir fait la mise en page avant de l'ecraser.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Etudiant - Stage MOA
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant - Stage MOA
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Salut ! Je n'ai pas vraiment compris ce que tu as dis et si ça a un rapport avec le pas à pas ou non, le programme serait trop rapide et écraserait l'ancienne zone avant que celle-ci ne soit enregistrée ?
    Sinon merci de ta réponse malgré tout, ma solution à été de créer deux boutons en séparant la macro en deux, moins pratique mais plus fonctionnel.
    Je cherche un truc qui rendrait certaine colonnes imprimable (comme un double clique sur une colonne et une ligne) mais ici sur les lignes et les colonnes (pour ne pas avoir une colonne qui mesure 1m de hauteur et 10cm de largeur ce qui est assez peu visuel..)

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 257
    Points
    34 257
    Par défaut
    Pour simplifier, voila ce que fait ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Piou()
    'Question 1
    'Mise en forme 1
    'Question 2
    'Mise en forme 2
    End Sub
    Du coup, si tu clique sur oui aux deux questions posees, seule la mise en forme 2 sera gardee.

    Si tu veux que la premiere soit gardee aumoment de l'impression, il faudrait faire evoluer ton code pour avoir ce decoupage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Piou2()
    'Question 1
    'Mise en forme 1
    'Impression avec PrintOut
    'Question 2
    'Mise en forme 2
    'mpression avec PrintOut egalement
    End Sub
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

Discussions similaires

  1. [Toutes versions] Insérer Pied de page par vba sur dernière page uniquement
    Par vieuxmonsieur dans le forum VBA Word
    Réponses: 11
    Dernier message: 15/05/2010, 21h24
  2. mise en page par WYSWYG ou coder à la main?
    Par sarah_insat dans le forum Développement Web avec .NET
    Réponses: 1
    Dernier message: 28/04/2010, 13h52
  3. probème de conception de mise en page par CSS
    Par carreau dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/08/2009, 01h02
  4. Mise en page par DIV
    Par santaflam dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 10/04/2009, 17h37
  5. Mise en page par DIV
    Par Clorish dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 15/06/2007, 11h31

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