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 :

Problème de sélection avec PrintArea


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 716
    Par défaut Problème de sélection avec PrintArea
    Bonjour,

    Le code suivant ne sélectionne pas ma zone d'impression définie par "Plage_Impression". Je souhaite que mon tableau s'imprime sur une page (cf. FitToPages) en fonction de cette plage définie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With ActiveSheet.PageSetup
            .PrintArea = Plage_Impression
            .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlLandscape
            .FitToPagesWide = 1
            .FitToPagesTall = 1
            .Zoom = 140 'True
        End With
    Je tourne en rond. Je crains que vous me disiez que l'erreur de mon code est évidente mais elle m'échappe.
    Merci d'avance pour vos lumières,
    Cdt

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je crains que vous me disiez que l'erreur de mon code est évidente mais elle m'échappe.
    et moi, je crains que tu ne comprennes pas que pour déterminer la cause de ton erreur, il est absolument indispensable que tu exposes :
    - où et comment a été déclarée la variable Plage_Impression
    - où et comment a été initialisée la variable Plage_Impression

    Tu penses sans doute que cela peut se deviner ? --->> tu as tort

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    Le code suivant ne sélectionne pas ma zone d'impression définie par "Plage_Impression".
    Encore faudrait-il savoir ce que contient cette variable et quel est son type.

    Je paris à 3 contre un qu'elle est de type Range. Gagné ?
    Si c'est le cas, tu as faux.

    Voir l'aide VBA accessible par la touche F1 : https://msdn.microsoft.com/fr-fr/VBA...5)%26rd%3Dtrue
    (c'est écrit en gras dans l'aide)

    Je crains que vous me disiez que l'erreur de mon code est évidente.
    "Evidente" ? Peut-être pas.
    Par contre, "soluble en utilisant l'aide VBA", certainement.

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 716
    Par défaut
    Désolé pour mon manque de précision. Tout le module est ici >

    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
    Option Explicit
    Option Private Module
    Sub Impression()
    Dim Plage_Impression
     
        ActiveSheet.Unprotect
     
        Plage_Impression = "A1:N25"
     
        With ActiveSheet.PageSetup
            .PrintArea = Plage_Impression
            .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlLandscape
            .FitToPagesWide = 1
            .FitToPagesTall = 1
            .Zoom = 140 'True
        End With
     
        ActiveWindow.SelectedSheets.PrintPreview
        ActiveSheet.Protect
    End Sub
    Il est vrai que j'ai fait une tentative avec Range mais comme je me suis rendu compte que ça n'allait pas mieux, je n'ai rien ajouté à la déclaration de variable (donc Variant, n'est-ce pas ?).
    Cdt

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    je n'ai rien ajouté à la déclaration de variable (donc Variant, n'est-ce pas ?).
    Mauvaise idée.
    Je ne compte plus le nombre de demande sur ce forum dont le problème se résume à une mauvaise déclaration ou à l'utilisation de Variant (facile et séduisant, certes, mais souvent calamiteuse).
    Utiliser Variant, c'est jouer à pile-ou-face avec son code.

    Si tu sais ce que va contenir ta variable (ce qui représente dans 99% cas), indique-le dans la déclaration.
    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Plage_Impression As String
    Je te conseille aussi de mettre quelques $ à ton adresse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Plage_Impression = "$A$1:$N$25"

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 716
    Par défaut
    Merci !

    J'ai pris bonne note pour la déclaration des variables.
    Néanmoins, si Variant est "passe-partout", ça revient (pour le néophyte que je suis, à : "dans le doute abstiens-toi... de déclarer une variable si tu n'es pas sûr de ton coup !).
    Pour (toujours le néophyte que je suis), le risque de laisser en Variant est une affaire de mémoire inutilement occupée. Déclarées ou pas, pour mes modestes applications, je n'ai jamais noté de ralentissement significatif.

    J'ai appliqué tes conseils mais cela ne résout pas mon problème. Il est possible qu'il se situe au niveau des :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    Je souhaite en effet que mon tableau rentre sur une seule feuille !
    Cdt

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    Néanmoins, si Variant est "passe-partout", ça revient (pour le néophyte que je suis, à : "dans le doute abstiens-toi... de déclarer une variable si tu n'es pas sûr de ton coup !).
    Non, ça revient à jour à la roulette russe en laissant VBA choisir lui-même le type qui lui semble le plus logique.
    Souvent ça passe mais parfois ça coince.

    Perso, je l'utilise TREEEES rarement et dans des cas très spécifiques.
    Par exemple pour récupérer le résultat d'une fonction ou la valeur d'une cellule, pouvant avoir un type de valeur variable.

    Pour (toujours le néophyte que je suis), le risque de laisser en Variant est une affaire de mémoire inutilement occupée.
    Ca, c'était une préoccupation qui pouvait avoir cours dans les années 80.
    Mais aujourd'hui, quand on parle de RAM en Go, utiliser des variables de type Integer plutôt que Long parce que ça prend moins de place mémoire, ça me fait exploser de rire.
    A moins d'avoir une variables tableau avec plusieurs centaines de milliers d'éléments, la place occupée par des variables d'une macro VBA, franchement, on s'en tape le coquillard.

    Déclarées ou pas, pour mes modestes applications, je n'ai jamais noté de ralentissement significatif.
    Ce n'est pas (ce n'est plus) une question de vitesse mais de fiabilité et de propreté du code.

    J'ai appliqué tes conseils mais cela ne résout pas mon problème. Il est possible qu'il se situe au niveau des :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    Je souhaite en effet que mon tableau rentre sur une seule feuille !
    Tu as dit que ton problème était que la zone imprimée n'était pas bonne.
    Si le symptôme est différent, il est normal que le remède conseillé ne fasse pas l'effet désiré.

  8. #8
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Impresssion
    Bonjour,

    Tes lignes de codes sont contradictoires.
    En effet, tu ne peux à la fois affecter une valeur à la propriété Zoom et forcer l'impression sur 1 page en largeur et hauteur.
    C'est Excel qui définit le Zoom automatiquement.

    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
    Sub Impression()
     
        Dim Plage_Impression As String
     
        ActiveSheet.Unprotect
     
        Plage_Impression = "A1:N25"
     
        With ActiveSheet.PageSetup
            .PrintArea = Plage_Impression
            .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlLandscape
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = 1
        End With
     
        ActiveWindow.SelectedSheets.PrintPreview
        ActiveSheet.Protect
     
    End Sub

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

Discussions similaires

  1. [XL-2007] Problème de syntaxe avec PrintArea
    Par Yumat dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/10/2015, 13h04
  2. Problème de sélection avec un DataGrid et un TabControl
    Par infosam76 dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 29/05/2013, 23h36
  3. Problème requête sélection avec SQLite
    Par janyoura dans le forum Android
    Réponses: 8
    Dernier message: 13/12/2012, 00h04
  4. problème de sélection avec les champs vides
    Par danathane dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/08/2007, 17h45
  5. Problème de sélection avec LIKE
    Par Mr. Smith dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/08/2006, 20h37

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