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 :

Macro VBA pour imprimer un écran (formulaire) vers un fichier PDF [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    retraité telecom
    Inscrit en
    Mai 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité telecom
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2016
    Messages : 64
    Par défaut Macro VBA pour imprimer un écran (formulaire) vers un fichier PDF
    Bonjour

    pour imprimer un écran (formulaire) vers un fichier PDF j'utilise (vu dans FAQ)

    L'image du UserForm est automatiquement placée dans le coin supérieur gauche de la page imprimée.


    Il n'existe pas d'option pour centrer ou repositionner l'impression. La seule solution palliative consiste à faire une copie d'écran de la boîte de dialogue. Ensuite vous faites un collage dans la feuille de calcul en tant qu'image, pour la manipuler à votre guise.

    Cet exemple imprime l'UserForm centré dans la page:

    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
    Option Explicit
     
    Private Declare Sub keybd_event Lib "user32" ( _
            ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
            ByVal dwExtraInfo As Long)
     
    Private Sub CommandButton1_Click()
        Dim Ws As Worksheet
     
        'Copie d'écran de la forme active
        keybd_event vbKeySnapshot, 1, 0&, 0&
        DoEvents
     
        'Ajoute une feuille pour coller l'image de la forme
        Set Ws = Sheets.Add
        Ws.Paste
     
        'impression centrée dans la page
        With Ws
            .PageSetup.CenterHorizontally = True
            .PageSetup.CenterVertically = True
            .PrintOut
        End With
    End Sub

    mais je souhaite :
    paramétrer le chemin et le fichier créé
    avoir tous l'écran sur une page

    Dans le FAQ et la doc microsoft (2013)

    il y a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
           .PageSetup.PrinToFile = True
            .PageSetup.PrinToFileName = "C:\program files\apbene\stats\benevole_ind\nom&prenom.pdf"
            .PageSetup.PrintArea = "$A$1:$N$48"
    mais celà ne me semble pas géré en Exel 2007

    est-ce exact ?
    merci de m'aider pour prendre en compte ces besoins en exel 2007
    solution ?
    paliatif ?

    bien cordialement
    MJ

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132

  3. #3
    Membre confirmé
    Homme Profil pro
    retraité telecom
    Inscrit en
    Mai 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité telecom
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2016
    Messages : 64
    Par défaut suite impression ecran
    bonjour et merci

    voilà ce que j'ai repris et j'ai l'erreur 429 au
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count)
    erreur 429 composant active X
    ne peut créer d'objet
    j'ai du faire une erreur

    cordialement

    mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit  'Activation de la déclaration explicite des variables
     
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
            ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Const VK_SNAPSHOT = 44
    Const VK_LMENU = 164
    Const KEYEVENTF_KEYUP = 2
    Const KEYEVENTF_EXTENDEDKEY = 1
    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
    Private Sub CommandButton15_Click()
    ThisWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count)
     
        With ActiveSheet.PageSetup
            .LeftMargin = Application.InchesToPoints(0.197)
            .RightMargin = Application.InchesToPoints(0.197)
            .TopMargin = Application.InchesToPoints(0.197)
            .BottomMargin = Application.InchesToPoints(0.197)
            .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlLandscape
        End With
     
        ActiveSheet.PasteSpecial Format:="Bitmap", Link:=False, DisplayAsIcon:=False
     
     
     
        Application.DisplayAlerts = False
        Worksheets(Worksheets.Count).Delete
        Unload Me
        Application.DisplayAlerts = True
     
        Application.ScreenUpdating = True
    End Sub
     
     
    Private Sub PrintScreen()
       keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0
      keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0
     keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
    keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
    End Sub

  4. #4
    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
    La ligne de code que tu incrimines ne saurait provoquer normalement cette erreur.
    Et même si le classeur était protégé, l'erreur dénoncée serait autre.
    - quelle est ta version Excel ?
    - que t'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox ThisWorkbook.name
    mis juste avant cette ligne de code ?

  5. #5
    Membre confirmé
    Homme Profil pro
    retraité telecom
    Inscrit en
    Mai 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité telecom
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2016
    Messages : 64
    Par défaut impression accès
    bonjour
    merci pour votre aide
    j'ai revérifié en créeant une nouvelle commande

    la version est 12.0

    avec ces infos j'obtiens toujours le même message (erreur 429) un composant activeX ne peut pas créer d'objet et l'erreur

    a lieu sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ThisWorkbook.Name

    encore merci

    mj

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit  'Activation de la déclaration explicite des variables
    Dim Ws As Worksheet
    Dim ws2 As Worksheet
    Dim ws3 As Worksheet
    Dim csp_invoked_init As String
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
            ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Const VK_SNAPSHOT = 44
    Const VK_LMENU = 164
    Const KEYEVENTF_KEYUP = 2
    Const KEYEVENTF_EXTENDEDKEY = 1
    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
    Private Sub CommandButton16_Click()
    Dim sNomPDF As String
     
        Application.ScreenUpdating = False
     
        PrintScreen
        DoEvents
         MsgBox ThisWorkbook.Name
        ThisWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count)
     
        With ActiveSheet.PageSetup
            .LeftMargin = Application.InchesToPoints(0.197)
            .RightMargin = Application.InchesToPoints(0.197)
            .TopMargin = Application.InchesToPoints(0.197)
            .BottomMargin = Application.InchesToPoints(0.197)
            .HeaderMargin = Application.InchesToPoints(0)
            .FooterMargin = Application.InchesToPoints(0)
            .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlLandscape
        End With
     
        ActiveSheet.PasteSpecial Format:="Bitmap", Link:=False, DisplayAsIcon:=False
        sNomPDF = ActiveWorkbook.Path & "\" & "UserForm.pdf"
     
        ActiveSheet.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=sNomPDF, _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=False, _
                IgnorePrintAreas:=False, _
                OpenAfterPublish:=False
     
        Application.DisplayAlerts = False
        Worksheets(Worksheets.Count).Delete
        Unload Me
        Application.DisplayAlerts = True
     
        Application.ScreenUpdating = True
    End Sub
     
    Private Sub PrintScreen()
        keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0
        keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0
        keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
        keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
    End Sub

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, effectivement ne pratiquant pas l'extispicine .....
    Bref si tu places un bouton sur une feuille de ton classeur pour visualiser l'UserForm avec ce code dans un module standard.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
     
    Sub Bouton1_QuandClic()
        UserForm1.Show
    End Sub
    et le code du lien placé dans feuille UserForm avec un bouton CommandButton1 "Save As PDF" tu obtiendras ceci :
    Images attachées Images attachées  

  7. #7
    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
    un composant activeX ne peut pas créer d'objet et l'erreur

    a lieu sur MsgBox ThisWorkbook.Name
    révèle quant à lui que l'évocation de l'objet ThisWorkBook présente problème.
    Quelle en est la cause ?
    - l'appli Excel corrompue ? (et donc à réinstaller)
    - une référence nécessaire décochée ?
    - cette ligne de code n'est pas écrite dans l'un des modules appelants d'un classeur ! ???
    Il faudrait venir sur ta machine pour en trouver la cause exacte.

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

Discussions similaires

  1. [XL-2003] Macro vba pour formulaire
    Par klaod dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/12/2014, 08h21
  2. [XL-2007] Macro VBA pour imprimer plusieurs onglets sur une feuille recto verso
    Par oekoniko dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/03/2014, 15h24
  3. Imprimer une feuille excel vers un fichier .pdf
    Par ghosty04 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/06/2009, 16h14
  4. [VBA-E] Macro VBA pour personaliser mon .doc depuis mon .xls
    Par korntex5 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/05/2006, 16h01
  5. comment faire pour imprimer à l'écran un objet
    Par GConstant dans le forum Général Python
    Réponses: 10
    Dernier message: 11/08/2004, 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