SNAPSHOT CATIA TO WORD

Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
- - Dernière réponse : 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

Afficher la suite 
Drikce06
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
5 -
Salut, pourquoi tu n'ouvres pas toi une appliaction word depuis la macro?
Drikce06
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
5 -
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
zavier666
Messages postés
267
Date d'inscription
mardi 7 septembre 2004
Statut
Membre
Dernière intervention
30 avril 2009
-
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
cs_Wanours
Messages postés
11
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
22 juillet 2009
-
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"
3dflix
Messages postés
44
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
20 février 2013
-
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
-
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...
skippower
Messages postés
7
Date d'inscription
vendredi 22 août 2008
Statut
Membre
Dernière intervention
18 novembre 2008
-
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.
3dflix
Messages postés
44
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
20 février 2013
-
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).
cs_Wanours
Messages postés
11
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
22 juillet 2009
-
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.
skippower
Messages postés
7
Date d'inscription
vendredi 22 août 2008
Statut
Membre
Dernière intervention
18 novembre 2008
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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.
nikos69003
Messages postés
8
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
5 décembre 2008
-
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
-
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
-
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.
cs_Wanours
Messages postés
11
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
22 juillet 2009
-
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
-
ç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)
nikos69003
Messages postés
8
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
5 décembre 2008
-
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.
cs_Wanours
Messages postés
11
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
22 juillet 2009
-
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
-
Cela peut-il venir de ma version de ppt (2002)?
nikos69003
Messages postés
8
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
5 décembre 2008
-
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?
cs_Wanours
Messages postés
11
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
22 juillet 2009
-
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
-
Le code est quelque poste au-dessus.
nikos69003
Messages postés
8
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
5 décembre 2008
-
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?
totham
Messages postés
1
Date d'inscription
mardi 13 mars 2012
Statut
Membre
Dernière intervention
14 mars 2012
-
bonjour,

je suis un peu perdu là, on met quoi alors dans powerpoint comme macro,
merci de votre réponse