Aller au contenu

Impression de la présentation avec vba


Messages recommandés

Posté(e)

Bonjour à tous, ma requête me semble simple mais je n'ai trouvé aucune information à ce sujet. J'aimerai un code vba qui imprimerait l'onglet présentation en format pdf qui ouvrirait le pdf directement. Si quelqu'un saurait comment faire je suis preneur !

Merci pour votre aide !

Posté(e)

Bonjour @SpecialOne54,

 

Il n'y a pas besoin de code VBA pour çà.

Dans les option de l'imprimante PDF, allez dans les options de celle-ci.

OUVERTURE-AUTOMATIQUE-D-UN-PDF-001.png

Puis cochez Afficher le résultat dans le visualiseur.

OUVERTURE-AUTOMATIQUE-D-UN-PDF-002.png

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Je sais qu'il n'y a pas besoin de vba pour cela mais j'aimerai le faire à partir de VBA. J'ai déjà un code qui permet de sauvegarder le fichier autocad et d'imprimer en pdf la vision du dessin. Cependant j'aimerai pouvoir faire de même mais avec l'onglet présentation pour ne pas à avoir zoomer manuellement sur la zone qu'on veut.

Posté(e)

Juste ouvrir le fcihier pdf ?

 

si tu as le chemin du pdf : tu peux ajouter ça :
 

   Set MonApplication = CreateObject("Shell.Application")
    MonApplication.Open (MonFichier)

 

Posté(e)

Le pdf n'est pas encore créé. J'aimerai un code qui permet d'imprimer l'onglet présentation en format pdf et dans la foulée de l'impression ouvrir le fichier pour qu'il apparaisse.

Posté(e)

a ok xD

result = ThisDrawing.Plot.PlotToFile(plotFileName)

result renvoie true si ok et false s'il y a une erreur

plotFileName est le chemin complet du pdf c:\...\fichier.pdf

si tu veux plus d'infos,hésite pas 😉

Posté(e)

Merci pour ta réponse !

Je suis assez débutant sur vba Autocad alors est ce que tu pourrais m'expliquer le fonctionnement de ton code ?

Cela permet de créer le pdf à partir de l'onglet présentation ?

Posté(e)
Il y a 3 heures, SpecialOne54 a dit :

Je sais qu'il n'y a pas besoin de vba pour cela mais j'aimerai le faire à partir de VBA. J'ai déjà un code qui permet de sauvegarder le fichier autocad et d'imprimer en pdf la vision du dessin. Cependant j'aimerai pouvoir faire de même mais avec l'onglet présentation pour ne pas à avoir zoomer manuellement sur la zone qu'on veut.

Pourrais-tu expliquer l'avantage qu'il y aurait d'imprimer en PDF à l'aide d'un code VBA. J'avoue ne pas comprendre la finalité de ta demande.

Si j'ai bien compris, mais peut-être que je me trompe, tu souhaiterais imprimer une présentation sans avoir besoin d'aller dedans. Soit.

Tu souhaiterais avoir la même vue que tu aurais dans ton espace objet. Mais comment feras-tu pour mettre ton dessin à une échelle particulière ?

Comment feras-tu pour gérer les calques dans la fenêtre de présentation, au cas échéant ?

Comment ferais-tu pour indiquer l'échelle d'impression du dessin sur ton cartouche ?

Quelques explications seraient le bienvenue pour comprendre exactement ta demande.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Alors je vais tâcher de te répondre de façon compréhensible.

L'idée est de rendre l'impression très rapide et accessible même à un débutant. Dans mon projet, je réalise le pointage de l'avancement des travaux directement grâce à des macros sur mon plan autocad. Une fois ce pointage réalisé, j'aimerai que le simple clic sur un bouton permette de sauvegarder le fichier autocad et également d'imprimer la présentation. La présentation serait quand à elle figée manuellement en amont sur la vue qu'on désire. L'appui sur un bouton l'imprimerait seulement en pdf et afficherait ce pdf sur l'écran directement.

Pour l'instant, j'ai fait une macro qui, en appuyant sur un bouton, sauvegarde le fichier autocad sous un certain nom et imprime en pdf sous format A3 paysage l'onglet objet à partir de la vue que j'avais de l'objet au moment ou j'ai appuyé sur le bouton.

Pour le pdf je n'aurai pas besoin de cartouche ou que l'échelle soit rappelée car il servirait seulement à l'aspect visuel et à figer l'avancement des travaux à une certaine date qui sera stipulée dans le nom du fichier.

En espérant avoir répondu à tes interrogations. Si non je t'écoute pour d'autres questions. 

Merci beaucoup !

Posté(e)

 

Tu peux connecter tes attributs a tes macro grâce aux objets.

Si ton cartouche est un bloc qui des attributs très facile de les renseigner 

Regarde dans mes réalisations tu comprendras ;-)

Posté(e)
Il y a 1 heure, Steven a dit :

Pourrais-tu expliquer l'avantage qu'il y aurait d'imprimer en PDF à l'aide d'un code VBA. J'avoue ne pas comprendre la finalité de ta demande.

Si j'ai bien compris, mais peut-être que je me trompe, tu souhaiterais imprimer une présentation sans avoir besoin d'aller dedans. Soit.

Tu souhaiterais avoir la même vue que tu aurais dans ton espace objet. Mais comment feras-tu pour mettre ton dessin à une échelle particulière ?

Comment feras-tu pour gérer les calques dans la fenêtre de présentation, au cas échéant ?

Comment ferais-tu pour indiquer l'échelle d'impression du dessin sur ton cartouche ?

Quelques explications seraient le bienvenue pour comprendre exactement ta demande.

Grâce aux variables, array, tableau et classes

Comme en lisp en faite 🙂

Ca fait dix ans que fait ça et ça marche pour moi et mes clients 😉

Par contre c'est plus simple si ton cartouche est un bloc 😉

Posté(e)
Il y a 23 heures, SpecialOne54 a dit :

Bonjour à tous, ma requête me semble simple mais je n'ai trouvé aucune information à ce sujet. J'aimerai un code vba qui imprimerait l'onglet présentation en format pdf qui ouvrirait le pdf directement. Si quelqu'un saurait comment faire je suis preneur !

Merci pour votre aide !

répondu par :

Il y a 20 heures, Curlygoth a dit :

a ok xD

result = ThisDrawing.Plot.PlotToFile(plotFileName)

result renvoie true si ok et false s'il y a une erreur

plotFileName est le chemin complet du pdf c:\...\fichier.pdf

si tu veux plus d'infos, hésite pas 😉

 

Posté(e)
Il y a 21 heures, Curlygoth a dit :

a ok xD

result = ThisDrawing.Plot.PlotToFile(plotFileName)

result renvoie true si ok et false s'il y a une erreur

plotFileName est le chemin complet du pdf c:\...\fichier.pdf

si tu veux plus d'infos,hésite pas 😉

Sub testimp()
' This example sends a plot of the current drawing
    ' to a file.
    
    'ThisDrawing.ActiveLayout.ConfigName = "DWF6 ePlot.pc3"
    
    ' Define the output file name.
    ' Use "" to use the drawing name as the file name.
    Dim plotFileName As String
    plotFileName = "MyPlot"
    
    Dim result As Boolean
        
    result = ThisDrawing.Plot.PlotToFile(plotFileName)

End Sub

A partir de l'aide VBA j'ai récupéré leur code exemple et cela imprime le pdf mais à partir de ma vue sur l'onglet dessin. J'aimerai que cela imprime en pdf mon onglet présentation.

De plus j'aimerai que le fichier s'ouvre lorsque le traçage est terminé

Posté(e)
il y a 36 minutes, SpecialOne54 a dit :

plotFileName est le chemin complet du pdf c:\...\fichier.pdf

si tu veux plus d'infos,hésite pas 😉

remplace "myPlot" par ton chemin de publication ou par une variable

Par exemple avec thisdrawing.path & "\" & "monpdf.pdf"

tu va générer un pdf de ta présentation dans le dessin de ton dessin

et il s'ouvrira si ton option par défault est d'ouvrir dans le visualiser pdf si tu ne veux pas modifier toute tes présentations :

   Set MonApplication = CreateObject("Shell.Application")
    MonApplication.Open (MonFichier)
Posté(e)
Il y a 2 heures, Curlygoth a dit :

remplace "myPlot" par ton chemin de publication ou par une variable

Par exemple avec thisdrawing.path & "\" & "monpdf.pdf"

tu va générer un pdf de ta présentation dans le dessin de ton dessin

et il s'ouvrira si ton option par défault est d'ouvrir dans le visualiser pdf si tu ne veux pas modifier toute tes présentations :

   Set MonApplication = CreateObject("Shell.Application")
    MonApplication.Open (MonFichier)

Quand je lance la macro et que je suis dans l'onglet "objet" cela imprime toujours ma vue et non pas la vue définie dans mon onglet présentation. De plus le fichier pdf ne s'affiche pas lorsque la macro est terminée.

Set MonApplication = CreateObject("Shell.Application")
    MonApplication.Open (MonFichier)
    Dim plotFileName As String
    
    y = CStr(Year(Now))
m = Right("0" + CStr(Month(Now)), 2)
D = Right("0" + CStr(Day(Now)), 2)
mydate = y + "-" + m + "-" + D
chantier = InputBox(Msg, "Quel étage de quel chantier ?")
    plotFileName = ThisDrawing.Path & "\" & "Pointage " & chantier & " " & mydate
    
    Dim result As Boolean
        
    result = ThisDrawing.Plot.PlotToFile(plotFileName)

Voici mon code. Je suis désolé de prendre de ton temps je suis certain que c'est pourtant simple et c'est juste que j'y comprends rien...

Merci !!

Posté(e)


Effectivement ! le shell il faut le mettre à la fin !

le code s’exécute de haut en  bas

donc tu ouvre ton fichier une fois qu'il est créer ! et d'ailleurs je pensais tu générait et que c'est s'ouvrais pas donc je suis a peu pres sur que tu n'aurais pas besoin du shell

 

pour cette partie

 y = CStr(Year(Now))
m = Right("0" + CStr(Month(Now)), 2)
D = Right("0" + CStr(Day(Now)), 2)
mydate = y + "-" + m + "-" + D

en une ligne :

mydate = format(date,"yyyy-mm-dd")

et pour imprimer la présentataion il faut qu'elle soit active ! (et donc en haut de ton code)

thisDrawing.ActiveLayout = ThisDrawing.Layouts(lay.Name)

Oui c'est simple mais il faut de la logique !

 

1°) déclarer les variable dont tu auras besoin et tout demander à l'utilisateur

2°) préparer le max d'érreur que peuvent générer un utilisateur

3°) faire "tourner le code" :

Si tu débute et pas d'ailleurs créer plein de petite fonction avec des nom explicites dans des modules nommer ! tu verras se sera plus simple surtout quand tu auras un code plus de 100.000 lignes

 

 

Posté(e)
Le 24/05/2023 à 18:05, Curlygoth a dit :

oui car c'est "A3" A3 c'est le nom d'une variable et je pense qu'elle est vide 😉

ThisDrawing.ActiveLayout = ThisDrawing.Layouts("A3")
Sub TestImp()
Set MonApplication = CreateObject("Shell.Application")
    Dim plotFileName As String

    ThisDrawing.ActiveLayout = ThisDrawing.layouts("A3")

mydate = Format(Date, "yyyy-mm-dd")
chantier = InputBox(Msg, "Quel étage de quel chantier ?")
    plotFileName = ThisDrawing.Path & "\" & "Pointage " & chantier & " " & mydate

    Dim result As Boolean

    result = ThisDrawing.Plot.PlotToFile(plotFileName)

    MonApplication.Open (MonFichier)
End Sub

Voici le code et malheureusement l'impression ne se réalise toujours et une erreur intervient lors du traçage

Posté(e)

 

plotFileName = ThisDrawing.Path & "\" & "Pointage " & chantier & " " & mydate
plotFileName = ThisDrawing.Path & "\" & "Pointage " & chantier & " " & mydate & ".pdf"

ta présentation a un plot ?

 

la partie shell tu peux l'enlever

pour info tu décalera tes variable juste sous la sub

tu devrais mettre en fonction la partie impression

Posté(e)
il y a une heure, Curlygoth a dit :

 

plotFileName = ThisDrawing.Path & "\" & "Pointage " & chantier & " " & mydate
plotFileName = ThisDrawing.Path & "\" & "Pointage " & chantier & " " & mydate & ".pdf"

ta présentation a un plot ?

 

la partie shell tu peux l'enlever

pour info tu décalera tes variable juste sous la sub

tu devrais mettre en fonction la partie impression

Comment le savoir si elle a un plot ?

Pourquoi pas oui il faudrait que je me renseigne la dessus

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité