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] Range de la page d'une zone d'impression ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 57
    Points : 43
    Points
    43
    Par défaut [VBA-E] Range de la page d'une zone d'impression ?
    VBA/EXCEL : Je veux récupérer la valeur du range correspondant à une page sur une feuille Excel. Par exemple, si je définit les 5 premières colonnes comme zone d'impression, comment puis-je connaitre les zones correspondantes à la page 1, page 2 etc... ?

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    En nommant la plage en question.

    Enregistre une macro qui nomme la plage et la définit comme zone d'impression. Tu auras une meilleure idée des objets impliqués et de la syntaxe.

    N'oublie pas que l'enregistreur de macros est ton ami.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 57
    Points : 43
    Points
    43
    Par défaut
    désolé cela ne répond pas à ma question. Je me doit de vous donner une exemple :
    j'ouvre un nouveau classeur vierge, je rempli par exemple les cellules de la colonne A à K et de la ligne 1 à 100. Je passe en mode Affichage>aperçu des sauts de page, et je vois qu'Excel a déterminé automatiquement les pages 1 à 4 sur lesquelles vont être imprimées mes cellules remplies. Je ne sais pas comment ça fonctionne, probablement en fonction des paramètres de mon imprimante. Mais moi ce que je veux savoir, c'est comment récupérer le Range de chaque page que Excel a déterminé pour moi ??

  4. #4
    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 543
    Points
    15 543
    Par défaut
    Hello JulienCEA
    Tu devrais faire une recherche sur le forum, la question a djà été traitée.
    Je regarde de mon côté.

    A+
    Salut zaza, paraît que vous avez un temps de chien... Chacun son tour, nous, ça s'arrange

  5. #5
    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 543
    Points
    15 543
    Par défaut
    Tout ce que j'ai retrouvé, c'est ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        With ActiveSheet.PageSetup
            .FitToPagesWide = 2   'Définit le Nbre de pages en largeur
            .FitToPagesTall = 2     'Définit le nbre de pages en hauteur
        End With
    Ça ne répond pas à ta question mais pour mieux, je regarderai demain... l'est 1h50 du matin ici...

    A+

  6. #6
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Je crois me rappeler que Excel et Word insèrent des sauts de page automatiques en fonction des paramètres entrés en utilisant l'onglet "mise en page" (responsabilité, donc, de l'utilisateur, sans contrôle, à ce niveau, sur l'imprimante elle-même).
    Il devrait donc suffire "d'aller à la pêche" de la position de ces sauts successifs pour déterminer les ranges successifs...

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Je ne me souviens pas d'avoir lu quelque chose dans forum, FAQ ou tutoriels.....

    peu-être n'y as t'il rien de "tout prêt" ... et l'on doit effectuer ce calcul en parcourant les collections
    VPageBreaks, et HPageBreaks ..

    bon par acquis de conscience avant de me lancer dans le codage... je vais aller faire un tour du coté des cours/Tutoriels/Faq..(comme c'est écrit dans ma signature )

  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 543
    Points
    15 543
    Par défaut
    En fait, la solution était plus simple que je ne pensais. Je supprime l'ancien post pour le remplacer par cette procédure corrigée.

    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
     
    Sub PagesArea()
    Dim AdV(), AdH(), i, j, k, NbV, NbH, TableauPlages()
        ActiveSheet.PageSetup.PrintArea = Range("A1").CurrentRegion.Address
        Set tbl = ActiveSheet.Range("A1").CurrentRegion
     
        For i = 1 To tbl.Rows.Count    '****** Recherche adresse sauts de page Verticaux *******
            If ActiveSheet.Rows(i).PageBreak = xlPageBreakAutomatic Then
                j = j + 1
                ReDim Preserve AdV(j + 1)
                AdV(j) = i - 1
            End If
        Next
        NbV = j + 1 'Ajout de la dernière ligne de la dernière page verticale
        AdV(NbV) = tbl.Rows.Count
     
        j = 0
        For i = 1 To tbl.Columns.Count '****** Recherche adresses sauts de page Horizontaux *****
            If ActiveSheet.Columns(i).PageBreak = xlPageBreakAutomatic Then
                j = j + 1
                ReDim Preserve AdH(j + 1)
                AdH(j) = i - 1
            End If
        Next
        NbH = j + 1 'Ajout de la dernière colonne de la dernière page horizontale
        AdH(NbH) = tbl.Columns.Count
        NbTotal = NbV * NbH
     
        ReDim TableauPlage(NbTotal)    '****** Détermination des plages ******
        For i = 1 To NbH
            For j = 1 To NbV
                k = k + 1
                TableauPlage(k) = Range(Cells(AdV(j - 1) + 1, AdH(i - 1) + 1), Cells(AdV(j), AdH(i))).Address
            Next
        Next
        Set tbl = Nothing
     
        For i = 1 To NbTotal         ' ******** Vérification ********
            Range(TableauPlage(i)).Select
            MsgBox "Plage de la page " & i & " = " & TableauPlage(i)
        Next
    End Sub
    Amuse-toi bien
    La procédure est très longue en exécution mais comme dira bientôt jmf... "plus c'est long..."
    Maintenant, faut savoir s'konve...

    Si tu passes par là, bbil ou jmf ou silky ou Alain ou Thierry ou bidou ou Théo ou sovo ou megaxel ou tout autre et que l'un ou l'autre trouve le moyen de simplifier, je suis aussi preneur

    A+

  9. #9
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut

    Plus c'est long, plus c'est bon !
    Je me rappelle m'être battu avec Word (en Word Basic... l'ancien) pour réussir à bâtonner et débâtonner un texte (bâtonner signifie compléter la ligne par des tirets - pour un contrat par exemple - afin qu'il n'y ait aucun "blanc" dans le texte)...
    Le problème était alors qu'il fallait en plus pouvoir "débâtonner" pour modifier puis "rebâtonner" (pas d'autre solution). Et j'en avais d'autant bavé qu'en plus, il fallait considérer un nombre maximum de lignes par page, ainsi qu'une longueur maximum pour chaque ligne.
    Ce fût la joie !

  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 543
    Points
    15 543
    Par défaut
    Oui, m'étonne pas de toi, jemefe... Trop penché sur des solutions tordues pour trouver une solution simple... Change de version

    NB à l'intention de juliencea
    J'ai modifié le code afin de simplifier la procédure.
    La première Colonne des pages de gauche et la première ligne des pages du haut est 1. Les autres commencent à PageBreak + 1. C'est pourquoi la première ligne = 0 (AdV(0) = 0) et la première colonne = 0 (AdH(0) = 0) afin de pouvoir ajouter 1 à toutes les premières lignes et première colonnes des pages de la zone d'impression.
    Dernière chose : Les limites droite et basse de la zone d'impression ne sont pas des PageBreak. Si bien que l'existence de pages partielles en bas ou à droite ne nécessite aucune modif, ces pages étant traitées dans leurs dimensions réelles.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 57
    Points : 43
    Points
    43
    Par défaut
    Super, merci de votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/04/2007, 12h01
  2. [VBA-E] - Excel- A juster automatiquement une zone d'impression
    Par nkhalidy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/03/2007, 18h05
  3. [VBA-E] modifier une zone d'impression
    Par LeXo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/02/2007, 22h53
  4. [VBA-E]Definir une zone d'impression
    Par byflo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/06/2006, 09h29
  5. problème de mise en page d'une zone de liste
    Par audrey_desgres dans le forum Access
    Réponses: 26
    Dernier message: 24/06/2005, 09h11

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