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 :

Impression d'un ClasseurB à partir d'un ClasseurA [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Par défaut Impression d'un ClasseurB à partir d'un ClasseurA
    Bonjour,
    j'ai besoin de votre aide concernant une incompréhension de ma part.

    Explication
    J'ai un ClasseurA qui me permet de créer une commande en donnant un numéro de commande et en cliquant sur un bouton dans la feuille 1.

    La commande ainsi créée s'ouvre dans un ClasseurB, s'enregistre directement dans un dossier du numéro de commande.

    Pour imprimer cette commande, l'utilisateur a 2 choix :
    - soit l'imprimer depuis le ClasseurB
    - soit à la fin de création de la création de la commande depuis le ClasseurA

    Dans les 2 cas, il faut que dans la ClasseurA, dans le second onglet, je sache si le document a été imprimé. Si oui, indiquer le classeur qui a servi à l'impression (A ou B)

    Donc tout ça est fait, j'ai simplifié le code pour en venir à mon problème que je vous expose :

    Le Problème :
    - Quand j'imprime depuis le ClasseurB, l'impression se lance, j'inscris correctement les données dans le classeur d'origine ClasseurA
    - Par contre, quand je lance l'impression depuis le ClasseurA, à la fin de création de la commande, le code ne LANCE PAS l'impression. J'ai mis des msgbox dans la macro du ClasseurB pour voir si je ratais un passage. Apparemment je passe partout, mais je n'ai pas la fenêtre d'impression qui s'ouvre.
    J'écris correctement dans la ClasseurA, l'information de la provenance du lancement de l'impression, mais je n'imprime pas.

    Pouvez-vous m'aiguiller dans mes recherches ?

    Pièces jointes :
    Je joins à ce message les 2 Classeurs. A positionner dans le même dossier.
    On ouvre ClasseurA, on entre un numéro de commande, on clique sur le bouton.
    Le ClasseurA fait :
    - crée un dossier du nom du numéro de commande
    - une copie du ClasseurB et le renomme et le place dans le dossier créé en ci-dessus
    - une demande d'impression directe de la commande à partir du ClasseurA :
    • si Oui : c'est la que ça ne fonctionne pas, je n'ai pas d'impression.
    • si NON, il faut imprimer depuis le classeur créé

    Remarque : pour ceux qui veulent tester depuis le ClasseurB, il faut enlever "TOTO" dans le ClasseurB en A2. J'ai mis cet arrêt pour limiter la boucle dans le ClasseurB

    Cordialement
    Did85
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Par défaut
    Bonjour,
    je reviens vers vous en espérant tomber sur quelqu'un qui fait de l'impression par VBA.

    Quand on lance la macro depuis le classeurA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     '*** IMPRESSION depuis le ClasseurA ***
        Select Case MsgBox("OUI = impression directe depuis le classeurA." & vbLf & "NON = impression plus tard à partir du classeurB.", vbYesNo, "Lancer l'impression ?")
            Case vbYes
                wbModele.PrintOut copies:=1, collate:=True 'lance l'impression d'une copie
                'Inscription impression réalisée
                .Cells(iNumDerLigCommande + 1, 2) = "oui"
                'On termine par ici quand on lance l'impression directement
                .Cells(iNumDerLigCommande + 1, 3) = "ClasseurA"
            Case vbNo
                'Inscription impression non encore réalisée
                .Cells(iNumDerLigCommande + 1, 2) = "non"
        End Select
    Donc quand je réponds OUI à la question "Souhaitez-vous imprimer directement depuis le ClasseurA", on doit lancer l'impression du ClasseurB.
    Mais ça ne se fait pas, surement parce que j'ai mis une macro dans la classeurB :
    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
    Option Explicit
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim oExcelAppli, oClasseurA As Object
    Dim wbClasseurA As Workbook
    Dim sCheminClasseurA As String
    Dim shClasseurB As Worksheet
    Dim iNumDerLigCommande As Integer
     
    'Enregistrement du ClasseurB
    'ThisWorkbook.Save
     
    'Recherche du dossier parent
    ChDir (ThisWorkbook.Path)
    ChDir ".."
    sCheminClasseurA = CurDir(ThisWorkbook.Path) & "\" & "ClasseurA.xlsm"
     
    'Désactivation du BeforePrint pour lancer l'impression par la macro
    Cancel = True
    Application.ScreenUpdating = False
    Application.EnableEvents = False
     
    'Lecture et impression de toutes les pages présentes dans le ClasseurB
    For Each shClasseurB In ActiveWindow.SelectedSheets
        MsgBox "Je passe dans la boucle impression"
        shClasseurB.PrintOut
    Next shClasseurB
     
    '########### DEBUT TEST PIEGE TOTO ####################
    If Sheets("CommandeType").Cells(2, 1) <> "toto" Then
        '*** OUVERTURE du ClasseurA pour inscription impression effectuée ***
        '*** CONTROLE que le classeurA est actif dans l'application excel ***
        'Crée une instance excel pour contrôler quel classeur excel est ouvert
        Set oExcelAppli = GetObject(, "Excel.application")
        On Error Resume Next
        'Charge l'objet excel avec le chemin du ClasseurA
        oExcelAppli.Workbooks(Dir(sCheminClasseurA)).Activate
        'Si le fichierA n'est pas ouvert
        If Err = 9 Then
            'on l'ouvre
            MsgBox "Le classeurA n'est pas ouvert"
            Set oClasseurA = Workbooks.Open(sCheminClasseurA)
        Else 'Sinon c'est qu'il est ouvert
            MsgBox "ClasseurA ouvert, rien à faire de plus"
        End If
    End If ' ################# FIN DU TEST TOTO #################
     
    Set wbClasseurA = Workbooks("ClasseurA.xlsm")
     
    'Inscription impression réussie depuis le ClasseurB
    'Ici on ne va chercher que le dernier enregistrement du ClasseurA sur la feuille "Liste des commandes"
    With wbClasseurA.Sheets("Liste des commandes")
        iNumDerLigCommande = .Range("A50000").End(xlUp).Row
        MsgBox "Dernière ligne inscrite dans le classeurA est : " & iNumDerLigCommande
        'impression réalisée
        .Cells(iNumDerLigCommande, 2) = "oui"
        'depuis le ClasseurB
        .Cells(iNumDerLigCommande, 3) = "ClasseurB"
    End With
     
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    End Sub
    Est-ce que quelqu'un a une astuce pour repérer l'impression depuis un autre Classeur et que cette macro ne se lance pas ?

    Merci

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Par défaut
    Merci, j'ai trouvé en écrivant le code tout à l'heure pour vous l'expliquer.

    Ne pas mettre :
    dans le code du classeurB

    Après test, c'est tout bon.
    Bonne journée

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

Discussions similaires

  1. Impression d'un etat à partir d'une forme?
    Par DBA_ORACLE dans le forum Reports
    Réponses: 2
    Dernier message: 04/03/2010, 16h14
  2. Impression sur imprimante USB à partir d'un logiciel DOS
    Par el_aaroubi dans le forum Périphériques
    Réponses: 4
    Dernier message: 28/03/2007, 18h16
  3. impression d'une facture à partir de TDBGrid
    Par blond1888 dans le forum Bases de données
    Réponses: 11
    Dernier message: 23/01/2007, 16h23
  4. [c#] Impression d'un document à partir d'un formulaire
    Par Sidi-Bou dans le forum ASP.NET
    Réponses: 13
    Dernier message: 03/11/2006, 00h19
  5. Impression d'un rapport à partir d'Oracle Form
    Par agneice dans le forum Oracle
    Réponses: 5
    Dernier message: 06/01/2006, 18h41

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