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 :

Changement d'imprimante active dans une Combobox [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Par défaut Changement d'imprimante active dans une Combobox
    Bonjour à tous,

    voici mon problème.
    Une combobox dans un formulaire contient la liste de toutes les imprimantes disponibles.
    Lorsque l'on change une première fois d'imprimante active, aucun problème cela fonctionne, mais si on se ravise en en prenant une autre, j'obtiens une erreur d'exécution 1004 :
    la méthode ActivePrinter de l'objet _Application a échoué.

    La routine ci-dessous est la partie incriminée (voire incriminante) :
    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
     
    Sub cb_NomImprim_Click()
    '
    ' ***************************************
    ' * Macro changeant d'imprimante active *
    ' ***************************************
    '
    ' Rend active l'imprimante sélectionnée.
    '
        Dim NouvImpr As String
        Dim I As Byte
        strOrdi = "."
        NouvImpr = cb_NomImprim.Value
     
        If NouvImpr = AncNomImp Then Exit Sub
        For I = 0 To 9
            NouvImpr = cb_NomImprim.Value & " sur Ne0" & I & ":"
            ' Sans le passage aux majuscules la routine bloque, le Neo doit devenir parfois NEO en interne
            If UCase(Right(ActivePrinter, 5)) <> UCase("Ne0" & I & ":") Then
                Application.ActivePrinter = NouvImpr
                Exit For
            End If
        Next
     
        NouvImpr = cb_NomImprim.Value
     
        Set objWMIService = GetObject("winmgmts:\\" & strOrdi & "\root\cimv2")
        Set objImprimantes = objWMIService.ExecQuery("Select * from Win32_printerConfiguration")
     
        With F_Param_Imprim(NouvImpr)
            Form_Impression.Caption = "Imprimer avec " & .ImpNa
            TypeCoul.Caption = .ImpCo
            Etat.Caption = .ImpEt
            LblDef.Caption = .ImpDe
        End With
        AncNomImp = NouvImpr
    End Sub
    Je pense, pour ma part, que si, par exemple, on démarre avec un Ne02, le premier changement donne Ne00, le deuxième Ne01 mais le 3ème redonne Ne00 qui a déjà été attribué.
    D'où le blocage.

    Qu'en pensez-vous ?

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour,

    Pour ma part, le changement d'imprimante dans mes formulaires Excel passent par cette simple ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Dialogs(Excel.XlBuiltInDialog.xlDialogPrinterSetup).Show

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Par défaut
    Bonsoir antonysansh.

    Merci pour ce début de réponse.

    Je connais la boîte de dialogue, mais je ne veux pas l'utiliser pour de multiples raisons (ne serait-ce que par curiosité, mais là n'est pas la question).

    Je tiens absolument à contrôler le mieux possible les entrées et sorties.

    Cette routine appartient à un ensemble gérant toute l'impression d'un document sans passer par les boîtes de Microsoft.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Par défaut
    A partir de ma remarque sur l'attribution des 'Ne0x' et en analysant pas à pas ce qu'il se passe en interne, j'ai constaté que les imprimantes semblent toujours répertoriées dans le même ordre pour une machine donnée.

    Il suffit donc de peu de changement dans la routine de départ pour résoudre le problème :

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    Sub cb_NomImprim_Click()
    '
    ' ****************************************
    ' * Macro changeant d'imprimante active                  *
    ' ****************************************
    ' Auteur RDaneelOlivaw
    '
    ' Rend active l'imprimante sélectionnée.
    '
    ' Initialisation des variables internes
     
    Dim NouvImpr As String
    Dim I As Byte
    Dim Cmpt As Byte
     
        strOrdi = "."                                                   '  A redéfinir pour un réseau
        NouvImpr = cb_NomImprim.Value
        I = 1
     
    ' Interruption de la recherche si le nom cliqué est le même que celui par défaut.
     
        If NouvImpr = AncNomImp Then Exit Sub
     
    '*****************************************
    '  Recherche du port de la nouvelle imprimante puis
    '  activation de celle-ci
    '*****************************************
     
        Cmpt = cb_NomImprim.ListCount
     
        Set objWMIService = GetObject("winmgmts:\\" & strOrdi & "\root\cimv2")
        Set objImprimantes = objWMIService.ExecQuery("Select * from Win32_printer")
     
        For Each objImprimante In objImprimantes
            If objImprimante.name = NouvImpr Then
                Application.ActivePrinter = NouvImpr & " sur Ne0" & I - 1 & ":"
                Exit For
            Else
                I = I + 1
            End If
        Next objImprimante
     
        If I = Cmpt + 1 Then GoTo Err1
     
    ' ****************************************
    ' Attribution des caractéristiques de cette nouvelle
    ' imprimante.
     
        Set objImprimantes = objWMIService.ExecQuery("Select * from Win32_printerConfiguration")
     
        With F_Param_Imprim(NouvImpr)
            Form_Impression.Caption = "Imprimer avec " & .ImpNa
            TypeCoul.Caption = .ImpCo
            Etat.Caption = .ImpEt
            LblDef.Caption = .ImpDe
        End With
     
    ' ****************************************
    ' Sauve le nouveau nom et sort.
        AncNomImp = NouvImpr
        Exit Sub
     
    ' ****************************************
    ' Traitement des erreurs
    '
    '  A chacun d'organiser les siennes
        Exit Sub
     
    End Sub
    Quelques remarques de la part d'un jeunot de 66 ans :
    •— Ce code est prévu pour un parc de moins de 11 machines. Dans le cas contraire, revoir les 'Nexx'
    •— Le code n'est pas optimisé afin de privilégier l'analyse. C'est la meilleure méthode, quoi qu'en disent certains ; ne mettons pas la charrue avant les bœufs.
    •— Dans ce site et ailleurs, on trouve des routines superbement écrites mais malheureusement fort difficiles à déchiffrer et analyser dès qu'il y a un problème.

    •— Je n'ai pas testé le code sur un réseau mais il est assez facile de le modifier si besoin est.

    •— Je trouve déplorable de la part de 'programmeurs' de trouver autant de fautes d'orthographe et de grammaire, alors que le fait de coder demande de la rigueur, tant dans la pensée que dans l'écriture.
    •— Le Français avant d'être une langue est aussi un langage au même titre que le C, le LISP, ou autres FORTRAN et COBOL de ma jeunesse. L'acédie ici est impardonnable.

    •— Enfin, les attributs donnés aux membres du type 'Expert éminent etc. sont exagérés. Je rappelle que le terme Expert relève à minima d'une autorité reconnue légalement et administrativement (par exemple : Expert près le Tribunal de... ).

    RDaneelOlivaw

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Citation Envoyé par RDaneelOlivaw Voir le message
    •— Enfin, les attributs donnés aux membres du type 'Expert éminent etc. sont exagérés. Je rappelle que le terme Expert relève à minima d'une autorité reconnue légalement et administrativement (par exemple : Expert près le Tribunal de... ).
    Bonjour,

    Petite précision concernant le terme Expert que tu relèves:
    Il signifie juste "Expert en utilisation du forum".
    Il ne sanctionne en rien la pertinence des réponses données.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par RDaneelOlivaw Voir le message
    •— Je trouve déplorable de la part de 'programmeurs' de trouver autant de fautes d'orthographe et de grammaire, alors que le fait de coder demande de la rigueur, tant dans la pensée que dans l'écriture.
    •— Le Français avant d'être une langue est aussi un langage au même titre que le C, le LISP, ou autres FORTRAN et COBOL de ma jeunesse. L'acédie ici est impardonnable.
    Bonjour,

    bien que je partage cet avis dans sa substance, il faut néanmoins nuancer.
    Permettez-moi donc cet constat qui m'est propre et peut-être pas universel.
    Acceptez également que le sujet ne sera que très superficiellement traité, il y aurait tant à dire que déjà des milliers de penseurs et des millions de publications n'ont pu en faire le tour.

    Un cerveau et un système informatique ne fonctionnent pas de la même manière. Le premier sait s'adapter et "faire la part des choses comme un grand", contrairement au second qui suivra un guide sans pouvoir s'en écarter.

    Un langage "humain" est effectivement codifié, dispose de règles permettant d'en structurer l'usage et la compréhension. Cependant, et contrairement au langage "informatique", ce ne sont pas des machines qui le manipulent, mais des humains.

    Cela aboutit à deux conséquences liées quand on parle de langage humain :

    - celui qui "transmet" de l'information* a le droit de commettre des erreurs, ou d'avoir en son sein des lacunes dans la manipulation de la langue écrite (ou oral, mais ici ce n'est pas le sujet).

    - celui qui "reçoit" de l'information* est parfaitement capable d'en traiter les erreurs pour tirer la juste substance, l'information voulue pour transmise, via le vecteur du langage.

    On pourra aussi noter qu'une langue est qualifiée de vivante, mobile, où l'information* et son vecteur rigoriste peuvent parfaitement être décorrélés (jusqu'à un certain seuil) sans que le liant soit rompu.

    Ainsi, restons au VBA, là où un correcteur d'orthographe signifiera "ce que tu as écris n'est pas la règle" à titre informatif, le compilateur déclarera "ceci n'est pas dans mes compétences de comprendre ce que tu as écris" à titre rédhibitoire. L'exécution, quant à elle, se chargera d'en relever les nuances erronées ou de dénaturer l'information par un traitement inattendu ... comme le "sot/sceau/seau" ...

    Et je ne parle même pas de "l'interprétation" de l'information ... qui est une subjection chez l'humain, et une littéralité pour la machine.

    Un autre parallèle possible : la gestion de l'erreur

    En langage humain, la gestion de l'erreur revient à celui qui reçoit l'information. Et s'il ne sait pas la traiter, de son propre fait ou par l'impossibilité de fiabiliser l'objet de l'information ... nous parlerons d'une erreur d'interprétation

    En langage informatique, le vecteur entrant et sortant de l'information est pris en charge par une unique entité, qui doit nécessairement connaître et posséder toutes clés.

    Vaste sujet auquel je m'attaque, je m'arrête ici pour ne pas rentrer dans trop de détails, mais serait ravi qu'un débat s'ouvre sur ce sujet.
    Après tout, c'est encore une fois ceci que le langage humain : la profondeur de la pensée n'est pas unilatéralement nécessaire lors de la transmission d'une information, l'interlocuteur est à même d'en prendre le relais. On appelle ça l'échange.

    J'aurais tant aimé aborder le "bruit", la détection et correction des erreurs ... bref, ce qui du côté des machines est possible, tout en restant dans le postulat ici développé (l'humain s'adapte, la machine exécute) ... et tant de choses encore ... mais j'en reviens à mon précepte de départ sur l'aspect parcellaire développé dans le présent message.

    Tout comme, j'aurais tant aimé aborder la notion "d'apprentissage" et "d'interaction" pour l'Humain.

    *je parle d'information au sens scientifique du terme, et même informatique pour être plus précis.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    @RDaneelOlivaw Nom : logo-normal.png
Affichages : 404
Taille : 13,7 Ko

    Je revendique le droits de venir sur ce site pour me distraire!

    Si en plus ça peut servir a quelqu'un!

    Je ne me soucie pas outre mesure de fautes que je commets pendant mes loisir!

    Tu prends ou tu laisse RAB!

    Victor Hugo dans sa vie de tous les jours, commettait des fautes d'orthographe!
    http://www.lefigaro.fr/secteur/high-...correction.php

    J'essai juste de te rendre service! Un illettré pourra avoir recourt a un écrivain publique, un idiot n'a que sa médiocrité pour paraître en société !

    Mieux vaut ne rien dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.
    Gustave Parking
    Dernière modification par Invité ; 20/03/2017 à 13h19.

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

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 18h26
  2. Comment afficher dans une combobox les driver des imprimante
    Par lassad dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/10/2005, 09h56
  3. ajouter une valeur dans une combobox
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 17/10/2005, 11h58
  4. Réponses: 2
    Dernier message: 14/09/2005, 14h39
  5. [VB+IE] Comment sélectionner dans une combobox d'une page IE
    Par danje dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 03/05/2005, 10h10

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