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 de facture - Aperçu avant impression [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2011
    Messages : 15
    Par défaut Impression de facture - Aperçu avant impression
    Bonjour à tous,

    J'ai un fichier avec un modèle de facture et duplicata de la facture et une feuille de liste avec les coordonnées de chacun de mes clients ainsi que les montants de la facturation.

    J'ai un code qui permet d'imprimer mes factures selon certains critères une par une et que voudrait qui mémorise ma feuille (sorte de mémoir tampon et que je puisse faire un aperçu de la globalité des factures à la fin de ma boucle.

    Voici une partir du code simplifié :
    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
     
    Sub Impression()
        Dim l As Long
        Dim n As Long
     
        Dim wshListe As Worksheet
        Dim wshFacture As Worksheet
        Dim wshDuplicata As Worksheet
     
        Set wshListe = ActiveWorkbook.Sheets("Liste")
        Set wshDuplicata = ActiveWorkbook.Sheets("Duplicata")
        Set wshFacture = ActiveWorkbook.Sheets("Facture")
     
     
        l = wshListe.Range("A1").End(xlDown).Row    'On mémorise la liste des clients
     
        For n = 2 To l
            'On remplit les coordonnées du client que l'on récupère sur la feuille liste
            wshFacture.Range("NomClient") = wshListe.Range("B" & n).Value
            wshFacture.Range("PrenomClient") = wshListe.Range("C" & n).Value
            wshFacture.Range("Adresse1Client") = wshListe.Range("D" & n).Value
            wshFacture.Range("Adresse2Client") = wshListe.Range("E" & n).Value
            wshFacture.Range("CodePostalClient") = wshListe.Range("F" & n).Value
            wshFacture.Range("VilleClient") = wshListe.Range("G" & n).Value
            'On imprime le duplicata et la facture si le client souhaite un duplicata
            If wshListe.Range("I" & n).Value = "OUI" Then
                Worksheets(Array(wshFacture.Name, wshDuplicata.Name)).PrintOut  'la je voudrais modifier le code au lieu d'imprimer mémoriser la feuille
            Else
                Worksheets(wshFacture.Name).PrintOut
            End If
        Next n
        'Ouvrir un apercu avec l'ensemble des factures avant d'imprimer.
     
    End Sub
    Merci pour votre aide.

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour avec un tableau ...
    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
    Sub Impression() 
        Dim tb() As Variant
        (...)
          'On Mémorise le duplicata et la facture si le client souhaite un duplicata
                AjoutTB tb, wshFacture.Name
     
        If wshListe.Range("I" & n).Value = "OUI" Then
               AjoutTB tb,wshDuplicata.Name
           End If
        Next n
     Worksheets(tb).PrintPreview
    End sub
     
     
    '
    ' Procédure Ajout d'une feuille au tableau
    '
    Sub AjoutTB(ByRef mtb(), st As String)
      Dim iNb As Integer
      iNb = UBound(mtb) + 1
      ReDim Preserve mtb(iNb)
      mtb(iNb) = st
    End Sub

  3. #3
    Membre averti
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2011
    Messages : 15
    Par défaut
    Merci beaucoup je m'en doutais qu'il fallais que j'utilise un tableau (j'avoue que je n'utilise jamais ce genre de chose dans mes codes et ça me serait bien utile parfois)!!!!

    Sur la procédure j'ajout de la feuille j'ai une erreur
    le code s'arrête sur cette ligne :

    Merci pour votre aide

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Re,

    Il est dommage que tu ne sache pas lire le message d'erreur pour nous le reporter ...


    au cas ou ..essai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    '
    ' Procédure Ajout d'une feuille au tableau
    '
    Sub AjoutTB(ByRef mtb(), st As String)
      Dim iNb As Integer
     On Error Resume Next
     iNb = UBound(mtb) + 1
     On Error GoTo 0
     Debug.Print iNb
      ReDim Preserve mtb(iNb)
      mtb(iNb) = st
    End Sub

  5. #5
    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, pourquoi ne pas utiliser une imprimante virtuelle style PDFCreator ou autre , générer tes pdf, les visualiser avec Acrobat Reader et si Ok lancer alors l'impression via le Reader sur l'imprimante réelle ?

  6. #6
    Membre averti
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2011
    Messages : 15
    Par défaut
    Le code ne tient pas compte du bouclage (changement du nom de client sur la même feuille 'Facture' For... next).

    Parce que là, il m'affiche la derniere facture et le dernier duplicata de la liste...

    C'est peut être moi qui me suit mal exprimée...

    Les valeurs de ma feuille facture change (donc c'est le printpreview que je souhaite mémoriser comme le fait un logiciel d'impression lorsqu'il a beaucoup de feuille à imprimer) pour voir l'ensemble des feuilles avec le montant pour chaque client.

    Admettons, j'ai 36 clients dont 3 qui ne veulent pas de duplicata
    je dois avoir 36 + 33 = 69 pages dans l'aperçu or avec le code je n'en ai que 2

    Citation Envoyé par kiki29 Voir le message
    Salut, pourquoi ne pas utiliser une imprimante virtuelle style PDFCreator ou autre , générer tes pdf, les visualiser avec Acrobat Reader et si Ok lancer alors l'impression via le Reader sur l'imprimante réelle ?
    Cela peut être une solution...
    Mais quel code ?

  7. #7
    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, il te faudra installer une imprimante virtuelle du style PDFCreator ou autre voir ici

    Pour l'impression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim DefaultPrinter As String
        DefaultPrinter = Application.ActivePrinter
        Application.ActivePrinter = "PDFCreator"
     
        ' ton code d'impression
     
        Application.ActivePrinter = DefaultPrinter
    Pour la visualisation du PDF résultant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
    Option Explicit
    .....
    Dim hwnd As Long
    ShellExecute hwnd, "Open", sFichier, 0&, 0&, 1
    .....
    sur le fichier sFichier pdf global résultant

  8. #8
    Membre averti
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2011
    Messages : 15
    Par défaut
    Merci pour votre aide à tous les deux je vais partir sur la solution de l'imprimante virtuelle!

  9. #9
    Membre averti
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2011
    Messages : 15
    Par défaut
    je relance mon sujet car l'imprimante virtuelle n'est pas une solution pérenne : je m'explique c'est un fichier qui sera utilisé par plusieurs personnes qui n'ont pas toute le même logicielle de visualisation PDF.

    Et ces personnes ne maîtrisent pas du tout VBA...

    Si vous avez d'autres idées...

    Je vous remercie par avance.

  10. #10
    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, est-ce que la liste des imprimantes disponibles peut aider ?
    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
    Option Explciit
     
    Sub ListeImprimantes()
    Dim i As Long
    Dim sTmp() As String
    Dim WshNetwork As Object
    Dim oPrinters As Object
     
        sTmp = Split(Excel.ActivePrinter, " ")
        Set WshNetwork = CreateObject("WScript.Network")
        Set oPrinters = WshNetwork.EnumPrinterConnections
        For i = 0 To oPrinters.Count - 1 Step 2
            Debug.Print oPrinters.Item(i + 1)
        Next i
    End Sub

  11. #11
    Membre averti
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2011
    Messages : 15
    Par défaut
    Salut,

    en fouillant un peu sur le net j'ai trouvé quelque chose qui peut m'aider.

    En passant par un userform contenant un acropdf.dll

    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
    Sub procVisualiserFacturePDF()
        Dim l As Long, n As Long
        usfRechercheFacture.Hide
     
    'Test du pdf
        Dim PDFvue As AcroPDF
        Dim FichPdf As String
     
        Set PDFvue = usfTestPDF.Controls.Add("AcroPDF.PDF.1", "VisuPDF")
     
        With usfTestPDF.Controls("VisuPDF")
            .Visible = True
            .Height = usfTestPDF.Height - 20
            .Width = usfTestPDF.Width - 10
        End With
     
        With usfRechercheFacture.lstHistoFacture
            l = .ListItems.Count
            For n = 1 To l
                If .ListItems(n).Checked = True Then
                    PDFvue.LoadFile (gstr_CHEMIN_ARCHIVE_FACTURE & .ListItems(n).Text & ".pdf")
                    PDFvue.setShowScrollbars (True)
                    PDFvue.setShowToolbar (True)
                    PDFvue.setPageMode ("none")
                    PDFvue.setLayoutMode ("SinglePage")
                    PDFvue.setView ("Fit")
                    PDFvue.printAllFit (True)
                End If
            Next n
        End With
     
        usfTestPDF.Show
    End Sub
    le seul hic c'est ma boucle comment lui faire comprendre qu'il doit fusionner et ouvrir tous les documents choisis par l'utilisateur?????

  12. #12
    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, ce n'est qu'un outil de visualisation de fichiers PDF, la fusion de fichiers PDF n'est absolument pas possible par ce biais.

    Voir les Post #5 et #8 pour la fusion via Adoba Acrobat Pro et PDFCreator ici

  13. #13
    Membre averti
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2011
    Messages : 15
    Par défaut
    Merci pour ton aide et bravo pour ce post détaillant l'utilisation de PDF Creator je vais opter pour cette solution puis visualiser le PDF sur un userform avec acroPDF.

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

Discussions similaires

  1. Concepteur RAVE sous DELPHI 7 : aperçu avant impression
    Par tarbala dans le forum Composants VCL
    Réponses: 4
    Dernier message: 01/06/2020, 00h37
  2. Aperçu avant impression d'un TRichEdit
    Par PoOky dans le forum Composants VCL
    Réponses: 2
    Dernier message: 31/01/2016, 23h19
  3. Réponses: 6
    Dernier message: 04/10/2005, 20h18
  4. Aperçu avant impression
    Par Zebulon777 dans le forum Access
    Réponses: 18
    Dernier message: 15/09/2005, 10h46
  5. [Débutante] Aperçu avant impression d'un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 09/07/2004, 09h52

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