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 :

Changer imprimante ralentit le Code VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Par défaut Changer imprimante ralentit le Code VBA
    Bonjour à tous

    Après de nombreuses recherches, je ne parviens pas à résoudre mon problème. Alors je vous expose le truc:

    A partir d'un bouton je lance le code suivant pour détecter si l'imprimante virtuelle PFDCreator est installée sur le poste et ainsi ouvre le userform pour la création du PDF. Le code fonctionne super bien mais si après ce code (sans créer le PDF, je sors du userform qui vient de s'ouvir) je désire lancer une autre procédure, VBA est très très lent, et du coup je suis obligé de sortir du fichier et de le relancer pour exécuter mes macros.

    J'ai tester en enlevant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ActivePrinter = xxx
    et je n'ai plus ce problème de lenteur.

    Ma question est donc pourquoi VBA est si lent lorsque j'utilise Activeprinter, avez-vous une autre idée pour vérifier la présence de pdfcreator??

    Merci pour votre aide

    Cordialement

    Motmot

    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
    Private Sub COBMailPDF_Click()
    Dim PrinterTest As String
    Dim PrintDef As String
     
    On Error GoTo ErPrint
    'Vérifie si l'imprimante PDFCreator est installé sur le poste
    PrintDef = Application.ActivePrinter
    PrinterTest = "PDFCreator sur Ne00:"
     
    Application.ActivePrinter = PrinterTest
    Application.ActivePrinter = PrintDef
     
    Load UFPDFMailexe
    UFPDFMailexe.Show
    Exit Sub
     
    ErPrint:
    MsgBox "Impossible d'envoyer les rapports en PDF sur ce poste" & Chr(10) & "PDFCreator n'est pas installé", vbCritical, "Commande indisponible"
    Application.ActivePrinter = PrintDef
     
    End Sub

  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
    Par défaut
    Salut,une approche,il y en a d'autres : Liste Imprimantes et Ports
    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
    Option Explicit
     
    Private Declare Function GetProfileSection& Lib "kernel32" Alias "GetProfileSectionA" ( _
                                                ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal lngSize As Long)
     
    Sub Liste_Imprimantes_Ports()
    Dim A As String, rep As Long, cpt As Long, pos As Long, T() As String
        A$ = Space(2048)
        rep = GetProfileSection("devices", A, 2048)
        If rep > 0 Then
            ShTst.Cells.Clear
            A = Trim$(Replace(A, Chr(0), ""))
            Do Until A = ""
                cpt = cpt + 1
                ReDim Preserve T(1 To 2, 1 To cpt)
                pos = InStr(1, A, "=") - 1
                T(1, cpt) = Mid$(A, 1, pos)
                pos = InStr(1, A, ",") + 1
                T(2, cpt) = Mid$(A, pos, InStr(1, A, ":") + 1 - pos)
                A$ = Mid$(A, InStr(1, A, ":") + 1)
                With ShTst
                    .Cells(cpt, 1) = T(1, cpt)
                    .Cells(cpt, 2) = T(2, cpt)
                End With
            Loop
        End If
    End Sub

  3. #3
    Membre habitué
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Par défaut
    Bonjour à tous,

    Super, merci kiki29, c'est génial, le problème de lenteur est en partie résolu. Avec ton code un peu adapté, je n'ai plus de souci avec les ActivePrinter qui ralentisse toutes mes macros.

    Par contre lorsque j'imprime en PDF, je fais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Imprime le document en PDF
    Workbooks(book).Worksheets("test").PrintOut copies:=1, ActivePrinter:="PDFCreator", Collate:=True
    Dès lors mon imprimante par défaut devient PDFCreator, c'est un peu embêtant, j'ai essayé de faire ce qui suit pour rétablir l'imprimante active avant la création du PDF et je retombe sur le problème de départ. Dès que le code passe sur la ligne "Application.ActivePrinter = PrintOLD", alors toutes le macros que je lance après sont terriblement longues à s'exécuter


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PrintOLD = Application.ActivePrinter
    'Imprime le document en PDF
    Workbooks(book).Worksheets("test").PrintOut copies:=1, ActivePrinter:="PDFCreator", Collate:=True
    Application.ActivePrinter = PrintOLD
    pourquoi?? Je ne comprends pas, comment remédier à cela?? Merci de m'éclairer, car là je suis en train de m'arracher les cheveux...

  4. #4
    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,je ne rencontre pas ce probleme,par contre ce qui ralentit énormément l'impression c'est la mise en page qui peut-être faite avant de lancer l'impression
    Pour y remédier voir http://www.developpez.net/forums/d55...ge-macros-xl4/

  5. #5
    Membre habitué
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Par défaut
    Hello,

    Alors c'est bon, j'ai résolu mon problème, j'utilise la fonction shell pour modifier mon imprimante par défaut et cela fonctionne nickel et plus de problème de lenteur.

    Par contre je suis quand même curieux de comprendre pourquoi activeprinter fait autant ramer les macros...

    Merci, Ciao

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

Discussions similaires

  1. [PR-2007] Changer imprimante vba
    Par Gantilool dans le forum VBA Project
    Réponses: 0
    Dernier message: 04/02/2015, 15h16
  2. changer un code cellule en code vba
    Par UDSP50 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/12/2013, 21h31
  3. code vba pour changer propriéte?
    Par billcoyotte dans le forum IHM
    Réponses: 9
    Dernier message: 10/07/2009, 08h04
  4. changer l'heure système par code vba
    Par soussie dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/11/2008, 15h18
  5. Comment creer une procédure stockée à partir d'un code VBA?
    Par Alcor020980 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 19h55

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