Probleme Printout vs2008 vb.net

DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016 - 8 sept. 2011 à 11:22
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016 - 16 sept. 2011 à 20:04
Bonjour,
Je developpe une application d'edition d'ordonnance pour un médecin.
J'ai un petit soucis avec l'impression sous word.

Les documents sont créer au format A5 (demi feuille A4) en portrait.
J'ai un originale et un duplicata, donc 2 pages
Le code suivant se charge d'imprimer le document :
 WordApp.PrintOut(FileName:="", _
                            Range:=Microsoft.Office.Interop.Word.WdPrintOutRange.wdPrintRangeOfPages, _
                            Item:=Microsoft.Office.Interop.Word.WdPrintOutItem.wdPrintDocumentContent, _
                            Copies:=1, _
                            Pages:=CouplePage, _
                            PageType:=Microsoft.Office.Interop.Word.WdPrintOutPages.wdPrintAllPages, _
                            ManualDuplexPrint:=False, _
                            Collate:=True, _
                            Background:=True, _
                            PrintToFile:=False, _
                            PrintZoomColumn:=2, _
                            PrintZoomRow:=1, _
                            PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0)


CouplePage= "1;2"
Probleme :
Sur le papier rien n'est imprimé la page est blanche et au format paysage quant ManualDuplexPrint:=False
si ManualDuplexPrint:=True une seule page est imprimer en portrait.
le probleme est le meme si CouplePage= "1,2"

Le code est extrait d'une macro word.
Avez-vous des idées.
Merci

18 réponses

DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
8 sept. 2011 à 12:35
Le code est extrait d'une macro word et il fonctionne dans word mais pas en vb.net.
Et il me faut cela en vb.net
0
Utilisateur anonyme
8 sept. 2011 à 22:36
Bonsoir,

Ta question n'est pas très claire.

Si c'est pour imprimer simplement un fichier word depuis vb.net tu peux écrire simplement :
Dim psi As New ProcessStartInfo
With psi
    .UseShellExecute = True
    .Verb = "print"
    .WindowStyle = ProcessWindowStyle.Hidden
    .FileName = "monfichier.doc"
End With
Process.Start(psi)


Bien entendu, Filename est à modifier.

Mais je ne suis pas sûr d'avoir bien compris la question

Bonne soirée.
0
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
9 sept. 2011 à 08:50
Merci d'avoir repondu.
Alors je creer dynamiquement dans word des documents en A5 (demi-A4), je creer a chaque fois de page A5 obligatoirement.
Si je veux imprimer ces deux pages sur une page A4 je dois utiliser ce code :
WordApp.PrintOut(FileName:="", _
                            Range:=Microsoft.Office.Interop.Word.WdPrintOutRange.wdPrintRangeOfPages, _
                            Item:=Microsoft.Office.Interop.Word.WdPrintOutItem.wdPrintDocumentContent, _
                            Copies:=1, _
                            Pages:=CouplePage, _
                            PageType:=Microsoft.Office.Interop.Word.WdPrintOutPages.wdPrintAllPages, _
                            ManualDuplexPrint:=False, _
                            Collate:=True, _
                            Background:=True, _
                            PrintToFile:=False, _
                            PrintZoomColumn:=2, _
                            PrintZoomRow:=1, _
                            PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0)

Probleme a l'impression la page est blanche et au format A5, alors que je devrais avoir une feuille A4 avec mes deux A5 dedans.
Voila
0
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
9 sept. 2011 à 08:51
Imprimer vers une imprimante bien sur
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
9 sept. 2011 à 21:29
Sur cette page de msdn, tout en bas, tu as un exemple d'utilisation en .net de la méthode PrintOut.
Tu devrais pouvoir reprendre les paramètres enregistrés dans ta macro word et les formater correctement.
Bonne prog.
0
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
16 sept. 2011 à 15:42
Bonjour,
J'ai du nouveau, suite a des test, j'ai observé :
Si je réalise mon document par mon appli et que j'imprime depuis les menu de word cela fonctionne.
Si j'imprime depuis mon appli apres avoir imprimer depuis word ca fonctionne.
Si je réalise mon document par mon appli et que j'imprime depuis mon appli sans passer par word ca n'imprime pas (en fait page blanche).
Donc si je suis pas c.. word passe bien des parametres ou fait quelques chose ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
16 sept. 2011 à 15:52
Bonjour,
Utilise un bloc With (avec WordApp) et mets des . devant partout où tu te réfères à WordApp.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
16 sept. 2011 à 17:07
Deja essayé, mais cela ne change rien
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
16 sept. 2011 à 18:59
Deja essayé, mais cela ne change rien

Montre toujours le code du bloc With essayé (pour en avoir le coeur net)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
16 sept. 2011 à 19:09
et montre-nous aussi comment est déclarée WordApp (qui ne semble d'ailleurs pas être un document, comme normalement attendu, mais Word lui-même !), en te rappelant que word attend cette syntaxe :
Syntaxe

expression.PrintOut(ArrièrePlan, Annexer, Étendue, NomFichierSortie, De, À, Élément, Exemplaires, Pages, TypePage, ImprimerDansFichier, Assembler, FileName, ImprimanteActiveMacGX, ImpressionRectoVersoManuelle, ImprimerZoomColonne, ImprimerZoomLigne, ImprimerZoomLargeurPapier, ImprimerZoomHauteurPapier)


ou expression est le document




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
16 sept. 2011 à 19:12
Voila :
                        'PrintZoomPaperWidth()
                        'Largeur que Word doit utiliser pour mettre à l'échelle les pages imprimées, en twips (20 twips 1 point ; 72 points 1 pouce).
                        Dim PrintZoomPaperWidth As Double = (DocWord.PageSetup.PageWidth * 20)
                        'PrintZoomPaperHeight()
                        'Hauteur que Word doit utiliser pour mettre à l'échelle les pages imprimées, en twips (20 twips 1 point ; 72 points 1 pouce).
                        Dim PrintZoomPaperHeight As Double = (DocWord.PageSetup.PageHeight * 20)
                        '
                        'With DocWord.PageSetup
                        '.PaperSize = Microsoft.Office.Interop.Word.WdPaperSize.wdPaperA4
                        '.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientLandscape
                        'End With
                        With WordApp
.PrintOut(FileName:="", _
                            Range:=Microsoft.Office.Interop.Word.WdPrintOutRange.wdPrintRangeOfPages, _
                            Item:=Microsoft.Office.Interop.Word.WdPrintOutItem.wdPrintDocumentContent, _
                            Copies:=1, _
                            Pages:=CouplePage, _
                            PageType:=Microsoft.Office.Interop.Word.WdPrintOutPages.wdPrintAllPages, _
                            ManualDuplexPrint:=False, _
                            Collate:=True, _
                            Background:=True, _
                            PrintToFile:=False, _
                            PrintZoomColumn:=2, _
                            PrintZoomRow:=1, _
                            PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0)

                        End With
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 230
16 sept. 2011 à 19:23
Je m'en doutais un peu !
On devrait avoir quelque chose du genre :
With WordApp.WordDoc
   .Printout Range:=wdPrintFromTo, From:="1", To:="3" ....etc...

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
16 sept. 2011 à 19:57
Cela aussi je l'ai essaye, je suis la dessus depuis presque deux semaine, j'ai fait le tour de la question.
Apres toutes les heures de recherches passé sur le net, j'ai vus plein de codes different mais apres avoir tout essayé, nada.
Ce qui ma perturbe c'est le fait que l'orsque que je change le format de papier du document avant l'impression (juste avant le printout) cela va deja un peu mieux sauf que le contenu du document est situé dans la tiers en haut du document et le texte n'est pas mis en page.
j'ai un document en A4 paysage mais le texte n'est pas a l'echelle.
dommage que je ne puisse mettre en image le resultat.
0
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
16 sept. 2011 à 19:59
Le code de la macro extraite de word est textuellement le suisvant :
Application.PrintOut(FileName:="", Range:=Microsoft.Office.Interop.Word.WdPrintOutRange.wdPrintAllDocument, Item:= _
        Microsoft.Office.Interop.Word.WdPrintOutItem.wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=Microsoft.Office.Interop.Word.WdPrintOutPages.wdPrintAllPages, _
        ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
        False, PrintZoomColumn:=2, PrintZoomRow:=1, PrintZoomPaperWidth:=11907, _
        PrintZoomPaperHeight:=16839)
0
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
16 sept. 2011 à 20:00
Ensuite je pense que word parametre l'imprimante pour l'impression.
Comment alors ca ?
0
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
16 sept. 2011 à 20:01
Voici casi tout le code de la proc :
        Dim WordApp As New Microsoft.Office.Interop.Word.Application
        '
        AddHandler WordApp.Quit, AddressOf WordOnQuit
        ' Word application.   
        WordApp.Visible = True
        '
        DocWord = New Microsoft.Office.Interop.Word.Document
        DocWord = WordApp.Documents.Open(FichierDoc)
        RangeWord = DocWord.Range
        Dim NumeroPage As Integer = 1
        Dim TotalPages As Double = NumeroPage
        '
        Select Case DocWord.PageSetup.PaperSize
            ' ***************** PAPIER A 4 ***********************
            Case Microsoft.Office.Interop.Word.WdPaperSize.wdPaperA4
                ' page 1 originale
                DeposeEnTeteOrdoWord()
                DeposeContenuOrdoWord()

                ' ***************** PAPIER A 5 ***********************
            Case Microsoft.Office.Interop.Word.WdPaperSize.wdPaperA5
                ' page 1 originale
                DeposeEnTeteOrdoWord()
                DeposeContenuOrdoWord()
                DocWord.Repaginate()
                '
                ' si le contenu tiend dans une seule page
                TotalPages = DocWord.ComputeStatistics(Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages)
                If TotalPages = 1 Then
                    ' en ajoute le duplicata
                    ' va au dernier paragraph
                    RangeWord = DocWord.Paragraphs(DocWord.Paragraphs.Count).Range
                    ' se positionne
                    RangeWord.Select()
                    ' Insertion du saut de page 
                    WordApp.Selection.InsertBreak(Type:=Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak)
                    ' combien de page dans le document
                    TotalPages = DocWord.ComputeStatistics(Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages)
                    'depose le filigrane "DUPLICATA"
                    Filigrane(TotalPages, WordApp)
                    ' aller a la derniere page
                    AllerPage(TotalPages, WordApp)
                    '
                    DeposeEnTeteOrdoWord()
                    DeposeContenuOrdoWord()
                    '
                    With WordApp.ActiveWindow.ActivePane.View.Zoom
                        .PageColumns = 2
                        .PageRows = 1
                    End With
                Else
                    ' sinon

                End If
                '
                If Ordonnance.OrdoSecurisee.Checked = True Then
                    ' combien de page dans le document
                    TotalPages = DocWord.ComputeStatistics(Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages)
                    ' sur toutes les pages impaires
                    For P = 0 To TotalPages - 1
                        If Impaire(P) Then SecuritéOrdonnance(P)
                    Next
                    '
                End If




        End Select
        '
        DocWord.Repaginate()
        WordApp.ActiveDocument.Select()
        WordApp.ActiveDocument.Range.Select()
        '
        ' impose l'imprimante indiqué 
        Me.PrintDialog1.PrinterSettings.PrinterName = Me.ComboBox1.Text
        '
        If Me.PrintDialog1.ShowDialog() = DialogResult.OK Then
            WordApp.ActivePrinter = Me.PrintDialog1.PrinterSettings.PrinterName
            '
            If Microsoft.Office.Interop.Word.WdPaperSize.wdPaperA5 Then
                prtlist.PrinterSettings.PrinterName = CStr(WordApp.ActivePrinter.ToString)
                ' pour le papier A5
                ' imposer deux pages par feuilles A4
                ' combien de page dans le document
                TotalPages = DocWord.ComputeStatistics(Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages)
                '
                ' macro écrite par Anacoluthe
                Dim NbFeuilles, i
                Dim CouplePage As String
                NbFeuilles = Int((TotalPages + 1) / 2)
                If NbFeuilles * 2 = TotalPages Then
                    'ReponseMsg = MsgBox("Impression recto-verso de " & NbFeuilles & " pages ?", vbYesNo, "Livret")
                    'If ReponseMsg = MsgBoxResult.Yes Then
                    ' impression des rectos
                    If NbFeuilles = 1 Then ' soit 2 pages
                        'PrintZoomPaperWidth()
                        'Largeur que Word doit utiliser pour mettre à l'échelle les pages imprimées, en twips (20 twips 1 point ; 72 points 1 pouce).
                        Dim PrintZoomPaperWidth As Double = (DocWord.PageSetup.PageWidth * 20)
                        'PrintZoomPaperHeight()
                        'Hauteur que Word doit utiliser pour mettre à l'échelle les pages imprimées, en twips (20 twips 1 point ; 72 points 1 pouce).
                        Dim PrintZoomPaperHeight As Double = (DocWord.PageSetup.PageHeight * 20)
                        '
                        'With DocWord.PageSetup
                        '.PaperSize = Microsoft.Office.Interop.Word.WdPaperSize.wdPaperA4
                        '.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientLandscape
                        'End With
                        With WordApp
                            .PrintOut(FileName:="", Range:=Microsoft.Office.Interop.Word.WdPrintOutRange.wdPrintAllDocument, Item:= _
        Microsoft.Office.Interop.Word.WdPrintOutItem.wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=Microsoft.Office.Interop.Word.WdPrintOutPages.wdPrintAllPages, _
        ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
        False, PrintZoomColumn:=2, PrintZoomRow:=1, PrintZoomPaperWidth:=11907, _
        PrintZoomPaperHeight:=16839)
                        End With
                    Else
                        For i = 0 To NbFeuilles - 1
                            'CouplePage = Str((4 * NbFeuilles) - (2 * i)) & ";" & Str(2 * i + 1)
                            CouplePage = Str((1 * NbFeuilles) - (1 * i)) & "," & Str(1 * i + 2)
                            DocWord.PrintOut( _
                                    Range:=Microsoft.Office.Interop.Word.WdPrintOutRange.wdPrintAllDocument, _
                                    Item:=Microsoft.Office.Interop.Word.WdPrintOutItem.wdPrintDocumentContent, _
                                    Pages:=CouplePage, _
                                    Copies:=1, _
                                    PageType:=Microsoft.Office.Interop.Word.WdPrintOutPages.wdPrintAllPages, _
                                    ManualDuplexPrint:=False, _
                                    Collate:=True, _
                                    PrintToFile:=False, _
                                    PrintZoomColumn:=2, _
                                    PrintZoomRow:=1, _
                                    PrintZoomPaperWidth:=11907, _
                                    PrintZoomPaperHeight:=16839)
                            ''FileName:="", _
                            '
                        Next i
                    End If
                End If
            Else
                DocWord.PrintOut()
            End If
        End If
        '
        DocWord.Close(Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges)
        '
        WordApp.Quit()
        '
        DocWord = Nothing
        WordApp = Nothing
0
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
16 sept. 2011 à 20:03
C'est la derniere modif faite et essayé sans succes
0
DeveloppeurVb Messages postés 125 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 19 avril 2016
16 sept. 2011 à 20:04
la partie interesse est la suivante :
                  If NbFeuilles = 1 Then ' soit 2 pages
                        'PrintZoomPaperWidth()
                        'Largeur que Word doit utiliser pour mettre à l'échelle les pages imprimées, en twips (20 twips 1 point ; 72 points 1 pouce).
                        Dim PrintZoomPaperWidth As Double = (DocWord.PageSetup.PageWidth * 20)
                        'PrintZoomPaperHeight()
                        'Hauteur que Word doit utiliser pour mettre à l'échelle les pages imprimées, en twips (20 twips 1 point ; 72 points 1 pouce).
                        Dim PrintZoomPaperHeight As Double = (DocWord.PageSetup.PageHeight * 20)
                        '
                        'With DocWord.PageSetup
                        '.PaperSize = Microsoft.Office.Interop.Word.WdPaperSize.wdPaperA4
                        '.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientLandscape
                        'End With
                        With WordApp
                            .PrintOut(FileName:="", Range:=Microsoft.Office.Interop.Word.WdPrintOutRange.wdPrintAllDocument, Item:= _
        Microsoft.Office.Interop.Word.WdPrintOutItem.wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=Microsoft.Office.Interop.Word.WdPrintOutPages.wdPrintAllPages, _
        ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
        False, PrintZoomColumn:=2, PrintZoomRow:=1, PrintZoomPaperWidth:=11907, _
        PrintZoomPaperHeight:=16839)
                        End With
                    Else

Celle apres le esle n'est pas en tenir compte elle est aussi naze.
0