Aller au contenu

Impression sous vba à l\'aide


Messages recommandés

Posté(e)

Bonjour,

 

Je souhaite imprimer des dessins en batch en VBA. Pour cela j'ai fait une procédure qui me charge les dessins les uns après les autres suivant des critères qui me sont propre.

 

Mon problème est que je n'arrive pas à trouver l'instruction et le paramétrage des variables sûrement indispensable pour que cela fonctionne.

 

Actuellement avec la procédure ci-dessous, je sorts une page blanche à chaque dessin alors que le dessin s'affiche correctement dans l'onglet objet d'AutoCAD.

 

Quelqu'un peut-il m'aider ? Ca fait quelque temps que je planche sur le sujet sans solution.

 

 

 

 

 

Merci d'avance

 

Private Sub subPrint()

Dim varExtMax As Variant

Dim varExtMin As Variant

 

'Recherche des limites du dessin

varExtMax = ThisDrawing.GetVariable("extmax")

varExtMin = ThisDrawing.GetVariable("extmin")

'impression en mode étendu du dessin

ThisDrawing.Plot.PlotToDevice "Canon MP750 Series Printer.pc3"

End Sub

 

  • 2 semaines après...
Posté(e)

Salut,

 

Pour ta routine VBA, le mieux est de redefinir de A à Z l'impression . Voici un bout de ma routine d'impression de carnet de détails, pour que tu puisse comprendre comment fonctionne l'impression en VBA :

 

***

ThisDrawing.Activelayout.ConfigName = "PDF995.PC3"

ThisDrawing.ActiveLayout.CanonicalMediaName= "A3"

ThisDrawing.ActiveLayout.PaperUnits= acMillimeters

ThisDrawing.Regen acAllViewports

 

ptz1(0) = pt1(0)

ptz1(1) = pt1(1)

ptz2(0) = pt2(0)

ptz2(1) = pt2(1)

ZoomWindow ptz1, ptz2

 

ThisDrawing.ActiveLayout.SetWindowToPlot pt1, pt2

ThisDrawing.ActiveLayout.PlotType = acWindow

 

plotech = ScaleCart(numerocart) * blkscale * Scale01

 

ThisDrawing.ActiveLayout.SetCustomScale 1, plotech

ThisDrawing.ActiveLayout.PlotRotation = AngCart(numerocart)

ThisDrawing.ActiveLayout.CenterPlot = True

 

On Error Resume Next

Select Case StrAcadVer

Case "ACAD2002", "ACAD2004"

ThisDrawing.Plot.PlotToDevice

Case "ACAD2006"

ThisDrawing.SetVariable "BACKGROUNDPLOT", 0

ThisDrawing.Plot.PlotToDevice

ThisDrawing.SetVariable "BACKGROUNDPLOT", 1

Case Else

End Select

***

 

Explication :

 

Je définis l'imprimante, le papier, et en millimetres

 

Pt1 et Pt2 sont les 2 points limites d'un cartouche de dessin. J'en récupere les coordonnées x,y de chaque points (cela devient Ptz1 et Ptz2).

 

Je fais un zoom sur la zone à imprimer.

 

Je définis une impression de type fenêtre, avec les points Pt1 et Pt2

 

Je regle l'echelle d'impression suivant l'echelle du cartouche (suivant les projets, je change l'echelle d'un cartouche pour faire rentrer completement mon dessin).

 

Je centre le dessin sur le papier.

 

Je verifie la version d'autocad et je lances l'impression. En effet, suivant les dernieres versions d'autocad, il y a la fonction impression en arrière-plan. avec la variable BACKGROUNDPLOT, je la desactive.

 

***

 

Cette routine fonctionne parfaitement (ça fait + 6 mois qu'elle tourne sans problème sur les 2 postes de dessinateur de l'agence où je suis).

 

Cette routine couplée à une autre qui scanne le dessin complet à la recherche de blocs "Cartouches", et je passe au maximum 2mn pour imprimer un carnet de détails de 25 pages :D

 

Voila, si besoin de plus de conseil, n'hesite pas...

 

Christophe Rosé,

Dessinateur-metreur Etanchéité

 

bon, je retourne à ma p'tite routine de nettoyage de fichier DA

Posté(e)

Bonsoir à tous,

 

J'ai un problème avec la méthode :

 

CanonicalMediaName

 

il semble que celà ne fonctionne pas avec AutoCAD 2006, ou bien

je m' y prend mal.

 

Si je lis ces valeur stockées dansd le dessin, elles sont de

la forme :

 

"User268", "User1211" etc... et non pas "A3" , "A0" ou autre chaine de carractères

ascii.

 

Quelqu'un a t'il plus d'infos ?

 

Daniel OLIVES

Lyon

  • 8 ans après...
Posté(e) (modifié)

Bonjour,

Je ne connais que le vba microstation mais:

en jetant un oeil ici:

http://help.autodesk.com/view/ACD/2015/ENU/?guid=GUID-9F4784EE-3203-4C7C-A27E-720B25BB1BD9

on peut voir:

"ReDim Preserve point2(0 To 1) ' Change this to a 2D array by removing the Z position"

Tu rentres un Z dans "Pt2(2) = 0"

La fonction n'accepte que les XY:

-------------------------------

LowerLeft

Access: Input-only

Type: Variant (two-element array of doubles)

The X and Y values for the lower-left window.

UpperRight

Access: Input-only

Type: Variant (two-element array of doubles)

The X and Y values for the upper-right window.

-------------------------------

Si ça peut faire avancer le schmi..

LrDb

 

Me suis gouré!!! tu passes par Plot_p1() désolé...

Modifié par LrDb

Write a book about what ??

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é