Vb6 <--> Word

mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014 - 13 avril 2012 à 07:51
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 25 avril 2012 à 08:34
Bonjour,
je vous expose brièvement mon problème: je stocke dans une cellule Excel un texte au format RTF. Dans mon appli, j'ai besoin de manipuler ce texte (différentes polices, couleurs, gras, etc ...). Je pourrais faire une feuille et programmer un petit éditeur. Mais plutôt que réinventer la roue, j'ai pensé à me débrancher vers Word. Puis, quand j'ai fini, de revenir vers mon application. De plus, j'aimerais garder le contrôle total au cours de ce processus.
J'ai avancé dans cette direction. Mais j'éprouve pas mal de problèmes, car si je maîtrise assez bien le pilotage Excel, en revanche, je ne fais que commencer avec Word.
Quand j'insère un fichier RTF, une boite de dialogue me demande de confirmer la conversion (je n'en veux pas). Dans mon fichier Word, j'ai installé une macro dans ThisDocument (évènement Close) qui sauvegarde le document en format RTF, et efface le contenu du document pour la prochaine utilisation. Quand je rouvre ce fichier, la macro est désactivée. Pourquoi? Un message me dit que c'est l'application hôte qui aurait commis cette forfaiture, c'est à dire probablement mon appli VB6, dans laquelle je n'ai jamais rien programmé de tel !!
L'enregistreur de macros me semble plus difficile à mettre en oeuvre que sous Excel, surtout quand il s'agit de manipuler le texte.
Je n'ai toujours pas réussi à "synchroniser" la fin de l'utilisation de Word avec le retour du retour dans mon appli.
Bref, je rame, je galère et je perds un temps fou à corriger les problèmes et à trouver des solutions et je n'ai presque plus de cheveux à m'arracher.
Quelqu'un aurait-il une solution simple à me proposer? Peut-être que je me fourvoie en voulant utiliser Word. Voilà ...

Dernière remarque: la longueur du texte en Arial 12, par exemple, n'est pas la même dans un contrôle RichTextBox que sous Word. J'ai tout essayé pour arriver à une correspondance parfaite (marges, tailles de polices, utilisation des paramètres d'une structure LOGFONT, etc ...) Rien n'y fait. C'est une des raisons qui m'ont poussé à utliser Word puisqu'au final, c'est à travers Word que je veux imprimer le texte, entre autres.

Merci d'avance pour toutes vos suggestions.
JuJu

13 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 avril 2012 à 09:25
Bonjour,

ce que tu veux faire à un nom précis : piloter Word depuis VB6.
Piloter veut bien dire ce que cela dit : créer des objets (qui ne sont finalement que des espèces de pointeurs) pour passer à l'application ainsi "pilotée" les mêmes instructions que celles que l'on y écrirait directement (en VBA/Word en ce qui concerne le pilotage de Word).
C'est donc la connaissance de VBA/Word et non celle de VB6 qui intervient là.

Je te suggère donc de "séparer/isoler" le problème VBA/Word (sans même parler de VB6) dans une discussion ouverte dans le thème Langages dérivés VBA.



____________________
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. Je n'interviendrai qu'e
0
Utilisateur anonyme
13 avril 2012 à 17:40
Bonjour,

Quand je rouvre ce fichier, la macro est désactivée. Pourquoi? Un message me dit que c'est l'application hôte qui aurait commis cette forfaiture, c'est à dire probablement mon appli VB6, dans laquelle je n'ai jamais rien programmé de tel !!

Dans le jargon de la programmation en VBA, le terme "application-hôte" fait référence à l'application d'office qui héberge VBA (Excel, Word etc..) J'ai l'impression que ce sont les paramètrres de sécurité des macros qui sont en cause. Dans Word 2007 - 2010, il me semble que c'est dans le menu Fichier. Pour Excel 2003 et avant c'est dans Outils - Macros - Sécurité des macros...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 avril 2012 à 18:17
Dans mon fichier Word, j'ai installé une macro dans ThisDocument (évènement Close) qui sauvegarde le document en format RTF, et efface le contenu du document pour la prochaine utilisation.

C'est probablement dans cet effacement puis la manière de sauvegarder et/ou quitter que tout se fait.
Je ne connais pas Word mais me demande s'il a pensé à utiliser le bon pamamètre WdOriginalFormat parmi les trois possibles.
____________________
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. Je n'interviendrai qu'e
0
mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014
16 avril 2012 à 04:32
Bonjour,
D'accord avec ucfoutu j'ai 2 problèmes bien distincts : je veux effectivement piloter Word depuis VB6. Mon souci MAJEUR est de basculer temporairement vers Word puis de retourner dans mon appli COMME SI j'avais moi même programmé Word. Je souhaiterais comment dire ... une transparence entre mon appli et Word,comme si tout se passait le plus naturellement du monde. D'un autre côté, j'ai effectivement quelques soucis pour trouver les instructions Word adaptées à ce que je veux faire, mais petit à petit je progresse grâce aux tests que je fais et aux aides Word et VBA, sans compter le générateur de macros que je trouve un brin casse coudes. EN dernier recours je peux encore me tourner vers vous.

Je n'arrive toujours pas à régler le problème de désactivation des macros, mais je suis obstiné et j'ai bon espoir de trouver la faille.

Enfin tout ceci juste pour manipuler un texte publicitaire qui doit être parfaitement positionné sur une feuille A4. Je n'ai pas besoin de grand chose en fait : modifier les tailles de police, ajouter différentes couleurs à certains passages du texte, utiliser les options GRAS, ITALIQUE et SOULIGNE, et enfin pouvoir utiliser les fonctions classiques (couper, copier, coller). Cela est relativement aisé à programmer dans un contrôle RichTextBox qui a été conçu pour ça.

MAIS, comme je le faisais remarquer, la taille des polices, donc la hauteur et la longueur des textes n'est pas la même dans le RichTextBox et Word. Ce qui fait qu'un mot qu'on veut mettre en fin de phrase se retrouve au début dans Word. Ou un groupe de mots placé intentionnellement en début de ligne se trouve coupé entre la fin de la ligne précédente et la ligne courante !! Sans parler du contrôle des marges. C'est extrêmement agaçant ...

Voilu. Voilou. Voili ...
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 avril 2012 à 08:03
Bon,
1) Je suppose que tu as déjà passé l'étape "mise en situation de pilotage" (création des objets Word nécessaires). Si tel n'était pas le cas, tu trouveras sur ce forum ce qu'il te faut (mots clés : piloter ....). Même l'aide VB6 (MSDN) te montre, à la rubrique CreateObject, le principe d'accès à toute application supportant l'automation.
Pour toi : set .... = createObject("Word.Application")
2) je ne comprends pas cela :
MAIS, comme je le faisais remarquer, la taille des polices, donc la hauteur et la longueur des textes n'est pas la même dans le RichTextBox et Word

Les dimensions graphiques d'une chaîne de caractères ne dépendent pas de telle ou telle autre application !
Ton problème est donc à mon avis non au niveau de ces dimensions, mais à celui des unités utilisées pour les exprimer. VBA est en échelle de Points.
Si ton projet vb6 utilise une autre échelle (ScaleMode), tu dois donc transposer les dimensions en échelle de points. VB6 t'offre pour ce faire les fonctions ScaleX et ScaleY.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 avril 2012 à 08:14
Je voudrais par ailleurs appeler ton attention sur un aspect non négligeable :
Les dimensions graphiques d'une chaîne de caractères sont, sous VB6, obtenues par les méthodes TextWidth et TextHeight, sur la base des propriétés (taille, gras, nom, etc...) d'une seule police de caractères (données utilisées par ces deux méthodes). Ces méthodes ne sauraient être appliquées à une chaîne de caractères qui, contenues dans un contrôle tel une RichTextBox, serait constituée de plusieurs éléments dans des propriétés différentes de police. Lorsque tel est le cas, il convient de calculer les dimensions de chaque "élément distinct" puis d'en faire l'addition.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Utilisateur anonyme
16 avril 2012 à 19:14
Bonjour,

Je n'arrive toujours pas à régler le problème de désactivation des macros, mais je suis obstiné et j'ai bon espoir de trouver la faille.

As-tu vérifié les pareamètres de sécurité de Word comme je t'ai dit plus haut ?

Même que le temps que tu fais ton programme tu peux te faire et utiliser un certificat de sécurité.
0
mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014
24 avril 2012 à 05:13
Bonjour ucfoutu,
J'insiste, je persiste, je maintiens et je signe: la taille des textes n'est pas la même dans un RichTextBox et sous Word toutes choses étant égales. Pour te convaincre:

Prends une RichTextBox et mets la propriété Font à Arial 12 Regular. Même chose sous Word. Tapes le MEME texte dans les 2 (par exemple 12 lettres "w" à la queue leu leu. Fais un print screen des 2 que tu récupères dans paint. Tu verras bien qu'il y a une différence notable. En zoomant au maximum dans paint c'est évident. SI on accepte de gâcher du papier pour une telle carabistouille, on le remarque également.

J'ai mis la propriété ScaleMode de ma Form de Twips à Points. Même résultat. J'ai utilisé une PictureBox qui dispose de la propriété ScaleMode. Même résultat. J'ai tripoté sous Word les paramètres de la police, même le crénage dont je serais bien foutu de dire à quoi ça sert. Je n'arrive à aucune équivalence. La seule à peu près satisfaisante consiste à mettre le Zomm de la police Word à 97% ...

Voilà
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 avril 2012 à 07:39
Tu tires trop vite tes conclusions, mJuJu.
1) Ce n'est que maintenant que tu parles d'impression.
2) Il n'y a alors pas que le scalemode de ton Form ou/et celui de ta picturebic, qui interviennent. Pourquoi ? tout simplement parce que l'objet qui va recevoir l'impression n'est ni ton Form, ni ta PuctureBox, mais bel et bien ton objet Printer.
L'objet Printer est lui également doté :
- d'une propriété hdc
- d'une propriété ScaleMode



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 avril 2012 à 07:57
Ah oui (aussi) :
un print screen des 2

Tu n'obtiens de cette manière rien d'autre qu'une image (pixelisation) de ton écran.
Ne confonds pas taille réelle et taille d'affichage à l'écran !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Utilisateur anonyme
24 avril 2012 à 17:26
Bonjour,

Tu ne peux pas imprimer un RichTextBox VB6 sans programmation supplémentaire:

Lien entre .net et VB6.

Traduction automatique

Original anglais
0
mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014
25 avril 2012 à 08:19
Merci à tous ceux qui ont bien voulu se pencher sur mon petit problème. Je clos ici le débat. Ce n'est pas la peine de continuer : tout ce que vous me dites est correct, mais ne fais pas avancer le schmilblick, malheureusement. Je vais me passer de Word et trouver un autre moyen de m'en sortir. Dommage. A bientôt peut-être pour d'autres aventures ...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 avril 2012 à 08:34
Re :
ou (mais ce sera du boulot) mettre en oeuvre ce que je t'esposais Lundi dernier vers 8 heures.
Si tu t'y lances, il te faudra utiliser les fonctions que tu trouveras dans un "source" que j'ai récemment déposé :
Tapez le texte de l'url ici.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous