SNAPSHOT CATIA TO WORD

Utilisateur anonyme - 3 avril 2007 à 14:31
totham Messages postés 1 Date d'inscription mardi 13 mars 2012 Statut Membre Dernière intervention 14 mars 2012 - 14 mars 2012 à 03:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42061-snapshot-catia-to-word

totham Messages postés 1 Date d'inscription mardi 13 mars 2012 Statut Membre Dernière intervention 14 mars 2012
14 mars 2012 à 03:30
bonjour,

je suis un peu perdu là, on met quoi alors dans powerpoint comme macro,
merci de votre réponse
nikos69003 Messages postés 8 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 5 décembre 2008
5 déc. 2008 à 10:05
Ca marche.
En fait, il fallait rajouter la référence Microsoft Office 10.0 Object Librairy.
La référence Microsoft PowerPoint 10.0 Object Librairy ne sert à rien dans mon cas.
Par contre les images sont mal dimensionnées, mal centrées et elle se superpose les une sur les autres.
Quelqu'un a-t-il une solution?
nikos69003 Messages postés 8 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 5 décembre 2008
1 déc. 2008 à 10:00
Le code est quelque poste au-dessus.
cs_Wanours Messages postés 11 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 juillet 2009
28 nov. 2008 à 14:20
Tu pourrais copier coller ton code, et surtout, me dire exactement sur quel ligne le programme passe en erreur?
(je pense pas que ça viennent de la version de powerpoint)
nikos69003 Messages postés 8 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 5 décembre 2008
28 nov. 2008 à 09:30
Bon je confirme, l'image est bien créée correctement dans le répertoire temporaire, mais c'est à l'insertion dans ppt que ça foire.
Quelqu'un a-t-il une solution?
nikos69003 Messages postés 8 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 5 décembre 2008
28 nov. 2008 à 09:10
Cela peut-il venir de ma version de ppt (2002)?
cs_Wanours Messages postés 11 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 juillet 2009
24 nov. 2008 à 14:56
Euh...?? t'es sur???
Je vois pas pourquoi il t'afficherait "Vous devez ouvrir un fichier PowerPoint avant de lancer la macro !" si ça bug sur la ligne qui suit l'appel du message.
nikos69003 Messages postés 8 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 5 décembre 2008
24 nov. 2008 à 09:43
Petite info en plus:
le fichier PrintScreen.jpg est bien créé dans C:\Temp avec fond blanc, mais la boussole et l'arbre ne sont pas cachés.
nikos69003 Messages postés 8 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 5 décembre 2008
24 nov. 2008 à 09:21
ça bug à Kill (ADR)
'-----Action en cas d'abscence de fichier PowerPoint préalablement ouvert
OupsGOubliePowerPoint:
A = MsgBox("Vous devez ouvrir un fichier PowerPoint avant de lancer la macro !", 16, "Aucun fichier PowerPoint ouvert")
Kill (ADR)
cs_Wanours Messages postés 11 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 juillet 2009
23 nov. 2008 à 11:16
Bonjour Nikos69003,

Ce serait bien que tu debug en pas à pas (F8) pour qu'on sache ou ça bug.

Parce que vu la gestion d'erreur sommaire que j'avais mis en place, c'est pas parce que le code part en erreur dans le flag OupsGOubliePowerPoint, que c'est forcemenet du au fait que tu as oublié powerpoint

Si ça bug à la ligne Set oPPT CreateObject("PowerPoint.Application"), tente de remplacer cette ligne par Set oPPT GetObject(, "PowerPoint.Application")

(Attention, j'ai pas fait d'erreur, il y a bien une virgule à mettre dans la parenthèse.)

Théoriquement, CreateObject lance une nouvelle instance de powerpoint alors que GetObject va chercher le powerpoint déjà ouvert.
nikos69003 Messages postés 8 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 5 décembre 2008
21 nov. 2008 à 13:51
Marche pas: ça me met le message d'erreur "Vous devez ouvrir un fichier PowerPoint avant de lancer la macro !".
Evidemment, j'ai déjà ouvert un power point.
skippower Messages postés 7 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 18 novembre 2008
18 nov. 2008 à 16:36
Voici la macro modifié pour Powerpoint (je n'ai pas eu le temps de trouver la fonction qui permet de redimensionner les images depuis la macro) :

Sub CATMain()

'****************************************************************************************************
'Pour permettre l'utilisation de cette Macro, activez la librairie word dans l'éditeur VB de Catia
'Outils->Reference->Microsoft PowerPoint 9.0 Object Librairy
'il faut aussi créer le raccourci clavier pour afficher la boussole avec F8
'Crée par : Wanours (Version 2, mise à jour du 5 avril 2007)
'Modifiée par : S. Morey, le 22 aout 2008
'Modifications : snapshot en JPEG au lieu de BMP + insertion dans PowerPoint au lieu de Word
'****************************************************************************************************

On Error GoTo OupsGOubliePowerPoint

Call ShowHideTreeAndCompass

Dim MyViewer As Viewer
Set MyViewer = CATIA.ActiveWindow.ActiveViewer

Dim ADR As String
ADR = "C:\Temp\PrintScreen.jpg"

'-----Memorise le BackGround d'origine
Dim color(2)
Dim MyViewer_deb
Set MyViewer_deb = MyViewer
MyViewer_deb.GetBackgroundColor color

'-----Passe en fond blanc
MyViewer_deb.PutBackgroundColor Array(1, 1, 1)

'-----Capture d'image
MyViewer.CaptureToFile catCaptureFormatJPEG, ADR

'-----Retour au fond d'écran d'origine
MyViewer_deb.PutBackgroundColor (color)

'-----On réaffiche Boussole et Arbre
Call ShowHideTreeAndCompass

'-----Insertion dans PowerPoint
Set oPPT = CreateObject("PowerPoint.Application")
oPPT.ActiveWindow.Selection.SlideRange.Shapes.AddPicture FileName:=ADR, LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=50, Top:=100
Kill (ADR) 'Efface le fichier temporaire

Exit Sub

'-----Action en cas d'abscence de fichier PowerPoint préalablement ouvert
OupsGOubliePowerPoint:
A = MsgBox("Vous devez ouvrir un fichier PowerPoint avant de lancer la macro !", 16, "Aucun fichier PowerPoint ouvert")
Kill (ADR)

End Sub

'-----Sub pour cacher/afficher la boussole et l'arbre de spécification------
Sub ShowHideTreeAndCompass()

'Cache la boussole (raccourci à configurer!)
SendKeys "{F8}"
Call Pause(0.1)

'cache l'arbre
SendKeys "{F3}"
Call Pause(0.1)

End Sub

'------Sub de temporisation générique----------------------------------------
Sub Pause(Temps As Long)

Dim Check As Long
Dim Tempslim As Long

Tempslim = Timer + Temps

Do Until Check >= Tempslim
Check = Timer
DoEvents
Loop

End Sub
nikos69003 Messages postés 8 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 5 décembre 2008
18 nov. 2008 à 12:50
Pourriez-vous mettre la totalité du code pour la macro version power point.
skippower Messages postés 7 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 18 novembre 2008
27 août 2008 à 09:55
Voilà ce que donne l'aide en ligne :

Arrête momentanément l'exécution afin que le système d'exploitation puisse traiter d'autres événements.

Syntaxe

DoEvents( )

Remarques

La fonction DoEvents renvoie une valeur de type Integer représentant le nombre de feuilles ouvertes dans les versions autonomes de Visual Basic (Visual Basic Édition professionnelle, par exemple). DoEvents renvoie un zéro dans toutes les autres applications.

DoEvents passe la main au système d'exploitation jusqu'à ce que ce dernier ait terminé de traiter les événements de sa file d'attente et que tous les codes de la file d'attente SendKeys aient été transmis.

La fonction DoEvents est particulièrement indiquée pour les opérations simples que l'utilisateur veut annuler juste après les avoir lancées, comme par exemple la recherche d'un fichier. Pour les opérations nécessitant une exécution plus longue, l'opérateur pourra plus aisément rendre la main au processeur s'il a recours à un contrôle Timer ou à un composant EXE ActiveX. Dans ce cas, la tâche s'effectue de manière complètement indépendante, hors de votre application, le système d'exploitation gérant à la fois le multitâche et le partage du temps.

Attention Lorsque vous rendez la main de manière temporaire à votre processeur dans une procédure d'événement, veillez à ce que la procédure ne soit pas exécutée à nouveau par une autre portion de votre programme, avant que le résultat du premier appel ne soit renvoyé ; cette situation peut avoir des conséquences inattendues. En outre, n'utilisez pas DoEvents s'il existe un risque d'interaction imprévisible entre d'autres applications et votre procédure pendant que l'exécution est suspendue.
cs_Wanours Messages postés 11 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 juillet 2009
27 août 2008 à 09:44
Ben... c'est une bonne question.

La fonction "Pause" n'est qu'un copier/coller d'un truc que j'avais trouvé sur le net.

DoEvents est, je crois, une commande qui est surtout là pour que la boucle ne soit pas vide.

Si tu trouve plus d'info à ce sujet, je suis preneur.
skippower Messages postés 7 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 18 novembre 2008
27 août 2008 à 09:35
C'est très clair, merci.
Juste une dernière question : ça correspond à quoi la commande "DoEvents" ?
cs_Wanours Messages postés 11 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 juillet 2009
26 août 2008 à 19:07
Oula...

En fait, quand je relis le code, je trouve vraiment ça moche ;-)

En fait, pour cacher (ou afficher) la boussole et l'arbre, j'avais rien trouver d'autres comme bidouille que de simuler un appui sur les touches F8 et F5 avec la commande SendKeys. (voir "ShowHideTreeAndCompass")(je sais, c'est moche, mais j'étais pressé ;-))

Le problème, c'est que quand on lançait les deux SendKeys à la suite, CATIA perdait les pédale et la boussole ou l'arbre se cachait/s'affichait une fois sur deux, donc pas top.

Du coup, j'ai mis une tempo entre les SendKeys pour laisser traaannnnquilement CATIA retrouver ses petits.

Et donc, la tempo ("Pause"), c'est assez simple.

La variable en entrée "Temps", c'est le temps en seconde que la pause doit durer.

La variable Start, et ben... et ben elle n'est que le résultat de bidouillage et de version multiple et ne sert strictement à rien. (désolé:-o)

Avant la boucle "Do", on stock une valeur "Tempslim" qui est en fait la valeur du Timer jusqu'à laquelle on souhaite attendre.

Pour info, Timer est une objet qui est une espèce de chronomètre qui compte le temps en permanence.

Donc, en gros, je lui dis de regler le reveil jusqu'à Tempslim

Je fais une boucle ou il ne se passe rien (c'est vraiment moche), jusqu'à ce que l'horloge ai atteint Tempslim.

Après ça, on quitte la routine, le "Temps" souhaité de la pause s'est désormais écoulé.

Voilà, j'espère que j'ai été clair
skippower Messages postés 7 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 18 novembre 2008
26 août 2008 à 16:54
Non en fait ça ne lance pas de nouvelle instance de PowerPoint à chaque fois, ça marche comme pour Word...
Je vais maintenant essayer de redimensionner les images depuis la macro (je voudrais appliquer un facteur d'échelle), mais j'ai pas encore eut le temps de creuser la question...

Sinon Wanours est-ce que tu pourrais m'expliquer le principe de la "sub de temporisation générique" ? Parce que je ne comprends pas bien à quoi ça sert ni comment ça marche...

Merci par avance
cs_Wanours Messages postés 11 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 juillet 2009
25 août 2008 à 13:44
Effectivement, ça devrait marcher, par contre, je pense qu'a chaque lancement de ta macro, ça va ouvrir une nouvelle instance de PowerPoint.

Enfin, je pense...

A moins que ça soit bien fait et qu'il aille chercher le PowerPoint existant.

Pourras-tu me confirmer que ça marche comme tu veux?

Merci
skippower Messages postés 7 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 18 novembre 2008
25 août 2008 à 13:13
J'ai posé la question sur le forum "catiav5forum.de"
(http://www.catiav5forum.de/wbb3/wbb/index.php?page=Thread&postID=18862#post18862)
Un membre de ce forum m'a donné la solution : il faut créer auparavant un objet PowerPoint.Application.

Voilà ce que ça donne :

Set oPPT = CreateObject("PowerPoint.Application")
oPPT.ActiveWindow.Selection.SlideRange.Shapes.AddPicture FileName:=ADR, LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=-181, Top:=-117, Width:=1083, Height:=776

Il ne me reste plus qu'à faire un peu de ménage...

Merci pour votre aide.
cs_Wanours Messages postés 11 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 juillet 2009
25 août 2008 à 12:12
D'après moi, vu que tu lance la macro depuis catia, la commande "ActiveWindow" ne peut pas marcher, puisqu'elle correspond à la fenètre active de Catia, et pas de PowerPoint.

Ca veut donc dire que tu veux insérer un SnapShot de CATIA, dans la fenètre CATIA active... Forcement, ça bug.

Ce qu'il faut, c'est trouver un moyen de récuperer l'application PowerPoint dans CATIA...
skippower Messages postés 7 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 18 novembre 2008
25 août 2008 à 11:04
Bonjour,

Je pense avoir trouvé la ligne de code pour insérer l'image dans PowerPoint.

j'ai remplacé :
Selection.InlineShapes.AddPicture FileName:=ADR, LinkToFile:=False, SaveWithDocument:=True
Par :
ActiveWindow.Selection.SlideRange.Shapes.AddPicture(FileName:=ADR, LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=-181, Top:=-117, Width:=1083, Height:=776).Select

Pour trouver cette ligne de code, j'ai juste enregistré sous PowerPoint une macro pour coder la fonction "insérer une image" (je pense d'ailleurs avoir trouver un des clefs de la programmation VBA ;o) - Enregistrer puis copier/coller le bout de code).

Le problème c'est que ça ne marche pas !?!

J'obtient ce message d'erreur :

Run-time error '429':
ActiveX component can't create objet

Je me demande si ce n'est pas un problème de références. Bien entendu j'ai rajouter la librairie PowerPoint dans l'éditeur VBA...
Vous n'auriez pas une idée ?

Sinon j'ai essayé ta méthode 3DFLIX et ça marche très bien...

Mais j'aimerai quand même bien comprendre pourquoi est-ce que mon script ne marche pas !?!

Merci de votre aide.
cs_Wanours Messages postés 11 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 juillet 2009
25 août 2008 à 09:25
Bonjour à Skippower et 3dflix,

Quand je le relis, j'avoue que la ligne suivante est un peu obscur.
Selection.InlineShapes.AddPicture FileName:=ADR, LinkToFile:=False, SaveWithDocument:=True

Selection de quoi? Je sais plus. Certainement que par défaut, il prenait la selection dans word.


Je vous cache pas que j'étais plutôt novice à l'époque de ce code, et que j'avais du l'écrire en majeur partie à partir de copier coller de macro automatique.

Je te conseille donc de tenter le coup avec cette méthode.

Par contre, je suis preneur pour ton code 3dflix.
3dflix Messages postés 43 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 20 février 2013
25 août 2008 à 04:07
Bonjour, pour ma part ma macro fais une capture d'ecran de catia depuis excel ou power point. Principe: on lance la macro dans excel ou power point puis ça creer une image de catia dans excel (ou power point). je pourrai te l'envoyer qu'a la fin de mes vacances (a partir du 15 septembre).
skippower Messages postés 7 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 18 novembre 2008
22 août 2008 à 09:57
Bonjour,

tout d'abord merci pour ce code source, ça marche du tonnerre !?!
Je voudrais néanmoins le modifier pour faire un "Snapshot Catia to PowerPoint", car pour mon boulot je dois régulièrement faire des présentation sur PowerPoint.
Je débute totalement en programmation VBA, mais je crois que c'est cette ligne que je dois modifier :

Selection.InlineShapes.AddPicture FileName:=ADR, LinkToFile:=False, SaveWithDocument:=True

J'ai bon ?
Est-ce que c'est une commande spécifique à Word ? Parce que j'ai l'impression qu'il n'est fait nulle part mention d'un document Word dans ce code source.
Est-ce que quelqu'un aurait une idée ? L'équivalent de cette commande pour PowerPoint ?

Par avance merci.
cs_Wanours Messages postés 11 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 juillet 2009
31 oct. 2007 à 16:26
Bonjour 3DFLIX...

Euh, c'est une bonne question...

Ca fait 6 mois que j'ai posé ce code, et je me souviens plus trop comment il marche.
En plus, je suis pas un caïd du VBA Excel. Mais je me demandes si ça pose pas un problème d'utiliser "ActiveWindow" alors que tu lance le snapshot depuis Excel.

Logiquement, lorsque tu lance depuis Excel, y'a plus de fenètre active dans CATIA non?

J'ai jamais lancé de code depuis un autre soft. Le snapShot, je le lançais depuis CATIA
Essai de voir en pas à pas pour savoir s'il a bien "seté" le bon truc dans MyWiewer. (si c'est pas déjà fait)

Bon courage...
3dflix Messages postés 43 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 20 février 2013
31 oct. 2007 à 13:33
Merci pour ton code.

Je m'en suis inspiré pour ecrire cela dans un module sous vba excel:

Sub SnapCatia()

Set CATIA = CreateObject("CATIA.Application")
Set MyViewer = CATIA.ActiveWindow.ActiveViewer

'-----Capture d'image
MyViewer.CaptureToFile catCaptureFormatJPEG, "G:\PrintScreen.jpg"

End Sub

Cela devrait permetre d'effectuer la capture directement depuis excel.
Or la capture en JPG est illisible.
C'est tu pourquoi?

(A savoir cette methode fonction pour toute les fonction mais pas pour la capture.)
cs_Wanours Messages postés 11 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 juillet 2009
4 avril 2007 à 16:05
En fait, dans mon travail, il m'est utile de pouvoir faire des impressions écrans rapidement de ce qui s'affiche dans Catia pour l'intégrer à un rapport par exemple.

Donc, il ne me sert à rien d'ouvrir un nouveau fichier word puisque je lance la macro que quand je bosse sur un rapport.

Mon objectif n'était pas de pouvoir créer une macro qui permet de faire une bibliothèque de printscreen dans word, mais d'insérer des images extraites de Catia dans mon document word.

Et je colle dans word à l'endroit ou se trouve le curseur, d'où le "selection", le fichier image stocké temporairement à l'adresse "ADR", sans lien avec le fichier "linkToFile:=false"
zavier666 Messages postés 266 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 30 avril 2009 1
3 avril 2007 à 17:23
Les sources concernant Catia sont rares donc merci!

A ce sujet, j'en ai posté quelques unes sur API @ la Loupe, rubrique Catia V5
http://xav.prog.power.free.fr

slts!
-------------------------------------------------
Toujours plus de VB6 et d'API => API @ la Loupe
http://xav.prog.power.free.fr
Utilisateur anonyme
3 avril 2007 à 14:33
On ne sait même pas à quoi ceci correspond:
Tu colles dans word serte, mais "selection", c'est quoi qui est sélectionné?
Selection.InlineShapes.AddPicture FileName:=ADR, LinkToFile:=False, SaveWithDocument:=True
Utilisateur anonyme
3 avril 2007 à 14:31
Salut, pourquoi tu n'ouvres pas toi une appliaction word depuis la macro?
Rejoignez-nous