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 :

ExecuteExcel4Macro Page.Setup marche pas


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2016
    Messages : 12
    Par défaut ExecuteExcel4Macro Page.Setup marche pas
    Bonjour,

    Afin d’accélérer le traitement Page.setup d'une macro, j'ai voulu tenter le ExecuteExcel4Macro.

    J'ai repris le code suivant de tinmarbusir sur ce post : http://www.developpez.net/forums/d55...ge-macros-xl4/

    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
     
    Sub Macro3()
    '
    Dim Str_macro As String
     
     
    Str_macro = "PAGE.SETUP("
    Str_macro = Str_macro & Chr(34) & Format(Date, "dd mmmm yyyy") & Chr(34)  'en_tête
    Str_macro = Str_macro & ", ""&L &D &C &F &R Page &P""" 'pied_pg
    Str_macro = Str_macro & ", 0.25, 0.25, 0.75, 0.75" 'marges gauche,droite,haut,bas en pouce
    Str_macro = Str_macro & ", $1:$2" 'En-tête de ligne et de colonne
    Str_macro = Str_macro & ", FALSE" 'quadrillage
    Str_macro = Str_macro & ", TRUE, FALSE" 'centrage horizontal,vertical
    Str_macro = Str_macro & ", 2" 'orientation - 1=portrait / 2=paysage
    Str_macro = Str_macro & ", 8" 'papier - 8=A3 / 9=A4
    Str_macro = Str_macro & ", FALSE" 'échelle sur une seule page
    Str_macro = Str_macro & ", {1,#N/A}" 'échelle : 1 page en largeur, pas de contrainte en hauteur
    'Str_macro = Str_macro & ", 100" 'no_pg
    Str_macro = Str_macro & ", Auto" 'ordre_impression
    Str_macro = Str_macro & ", FALSE" 'cellules en noir & blanc
    Str_macro = Str_macro & ", 600" 'qualité
    Str_macro = Str_macro & ", 0.30, 0.30" 'marge_en_tête ,marge pied de page
    Str_macro = Str_macro & ", FALSE" 'annotations
    Str_macro = Str_macro & ", FALSE" 'brouillon
    Str_macro = Str_macro & ")"
     
    Application.ExecuteExcel4Macro (Str_macro)
     
    MsgBox "fini"
     
    End Sub
    Le problème est que ça me génère un magnifique "Erreur d’exécution '1004' : La formule que vous avez tapée contient une erreur."

    Et le truc rigolo (ou pas) c'est qu'en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ExecuteExcel4Macro ("Str_macro")
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ExecuteExcel4Macro "Str_macro"
    , la macro va jusqu'au bout en affichant la boîte de dialogue.... mais si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ExecuteExcel4Macro Str_macro
    (puisque les parenthèses et les guillemets sont dans les variables), je retourne sur l'erreur 1004.

    Je n'arrive pas à trouver l'erreur (dommage, ce découpage d'arguments est vraiment clair).

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Un peu tard, mais bon... mais comme on dit... vieux motard que j'aimais...

    Pour accélérer la mise en page d'une application, il est préférable de passer par une imprimante interne, du genre Microsoft XPS Document Writer.

    ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim sActivePrinter As String
     
        sActivePrinter = Application.ActivePrinter
        Application.ActivePrinter = FindPrinter("Microsoft XPS Document Writer")
     
        '... ta mise en page
     
        Application.ActivePrinter = sActivePrinter
    et cette Function FindPrinter (qui ne vient pas de moi...)
    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
    'Written: November 28, 2009
    'Author:  Leith Ross
    'Summary: Finds a printer by name and returns the printer name and port number.
    
    Function FindPrinter(ByVal PrinterName As String) As String
    
     'This works with Windows 2000 and up
     
        Dim Arr As Variant
        Dim Device As Variant
        Dim Devices As Variant
        Dim Printer As String
        Dim RegObj As Object
        Dim RegValue As String
        
        Const HKEY_CURRENT_USER = &H80000001
           
        Set RegObj = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
        RegObj.enumvalues HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Devices", Devices, Arr
        
        For Each Device In Devices
            RegObj.getstringvalue HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Devices", Device, RegValue
            
            'Ici, il faut vérifier ce que retourne xlCountrySetting selon vos paramètres régionaux et agir selon le cas
            'on peut se faire une petite macro avec MsgBox Application.International(xlCountrySetting)
            If Application.International(xlCountrySetting) = 2 Then  ' 2= Français-Canada, 33=Français-France, ...
                Printer = Device & " sur " & Split(RegValue, ",")(1)
            Else
                Printer = Device & " on " & Split(RegValue, ",")(1)
            End If
            
            If InStr(1, Printer, PrinterName, vbTextCompare) > 0 Then
                FindPrinter = Printer
                Exit Function
            End If
        Next
    
    End Function

  3. #3
    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,
    If Application.International(xlCountrySetting) = 2 Then .....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.International(xlCountrySetting) = 33

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.International(xlCountrySetting) = 33
    Bien vu... Cette partie reste à vérifier selon la région, finalement...
    Comme il y a des gens de plusieurs pays qui passent par ici, il faudrait vérifier ce que retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Application.International(xlCountrySetting)
    Et aussi voir comment se nomment les chemins des imprimantes réseaux, peut-être...

    Ici, avec paramètres régionaux = Français-Canada, ça retourne 2
    Mais c'est vrai que la France retourne 33...
    Et qu'en est-il des pays d'Afrique ou du reste de l'Europe (?!)

    Je vais donc modifier mon code pour mettre un commentaire sur ce point

  5. #5
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2016
    Messages : 12
    Par défaut
    Merci pour vos retours (et le temps passé).

    Le coup de passer par une imprimante interne (code région 33) me fais gagner quelques secondes (5 pour être précis sur un traitement de 44s). Le fait de masquer le rafraichissement de l'image (screenupdating) me descend à 31s.
    Tout ça c'est bien, mais si j'oublie complètement ma mise en page, le traitement ne dure que 4 secondes (quel gâchis !)

    Sans vouloir partir sur des trucs inutilement compliqué (je veux dire "pour moi"), sauriez-vous pourquoi mon code en excel4macro ne marche pas ?

    L'erreur ne semble pas être dans la dernière ligne (contrairement à ce que je pensais), mais même en laissant toutes les variables vides (ou pour être précis Str_macro = Str_macro & ",") sauf l'alignement du papier (lui est facile à comprendre/changer/vérifier), J'ai mon msgbox (cool) mais en fait aucun changement (pas cool).

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Le coup de passer par une imprimante interne (code région 33) me fais gagner quelques secondes (5 pour être précis sur un traitement de 44s).
    Étonnant parce qu'ici, c'est plutôt 5 secondes que ça me prend plutôt que 44...(?!)
    Les macros Excel4 datent du précolombien.
    C'est possible que ça ne fonctionne plus sur les nouveaux systèmes.
    Est-ce que tu travailles en 32 ou 64 bits au niveau de Windows ?

Discussions similaires

  1. Ma redirection ne marche pas si la page existe !
    Par pdtor dans le forum Apache
    Réponses: 1
    Dernier message: 07/08/2007, 21h05
  2. Arreter chargement d'une page ? (stop() ne marche pas sous IE)
    Par Merfolk dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/01/2007, 15h19
  3. Réponses: 1
    Dernier message: 24/09/2006, 14h36
  4. Page de login -- script PHP qui ne marche pas
    Par Alexlesilex dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 24/04/2006, 16h32
  5. Redirection, ca ne marche pas depuis une page 404 ?
    Par TicTacToe dans le forum Langage
    Réponses: 16
    Dernier message: 02/03/2006, 10h54

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