VBA Word et zones de dessins - VB/VBA/VBS - Programmation
Marsh Posté le 08-07-2015 à 18:26:38
Bonjour,
valeurs retournées : boîte → left = 60 ; top = 39,95
canevas → left = 29,15 ; top = 29,15
Avec le code suivant, je constate que le TextBox créé au sein du canevas renvoie les propriétés Left & Top du canevas :
Code :
|
Marsh Posté le 08-07-2015 à 19:26:13
Salut Marc L
Quelle version de word utilises tu ?
J'ai deux messages d'erreur avec ta macro : utilisation incorrecte du mot clé me, que j'ai remplacé ActiveDocument, et une incompatibilité de type à la ligne 7 (for each Ca etc.) que je ne sais pas corriger.
Marsh Posté le 08-07-2015 à 19:40:54
Tu as dû regarder l'aide VBA de Me : le code n'était pas dans un module mais dans ThisDocument …
Mon code renvoyant sous Word 2003 : Text Box 2 60 39,95
Canvas 4 29,15 29,15
Canvas 4: Text Box 5 29,15 29,15
Déduction : à l'intérieur d'un objet Canvas, un TextBox n'aurait pas de propriétés Left & Top intrasèques …
Marsh Posté le 08-07-2015 à 20:28:36
J'ai fait tourner ton code sous word 2003 : j'obtiens bien les mêmes résultats que toi. Par contre sous word 2010, ça plante à la ligne 7.
D'ailleurs ma macro ne retourne pas les mêmes valeurs sous 2003 et sous 2010. C'est un vrai sac de noeuds.
Sous 2010, elle donne bien le left et le top de la textbox dans le canvas, non pas en points, mais bien en vingtaines de points. D'où sort cette unité ?
Marsh Posté le 09-07-2015 à 18:14:22
Le plantage sous Word 2010 doit signifier un changement dans la structure objet, à fouiller dans l'aide VBA de cette version …
Et il te reste à effectuer une recherche "mondiale" sur le web pour obtenir plus d'information …
Marsh Posté le 09-07-2015 à 18:29:33
Salut
Si je déclare Ca As object, ça tourne, mais si jele déclare As Shape, ça plante.
Voici la macro modifiée :
Code :
|
La boucle de la ligne 36 donne les distances en points, les lignes 41 et 42 donnent les distances en vingtaines de points. Il s'agit pourtant du même objet !
Voici la copie de la fenêtre Exécution :
Formes dans la feuille
boite 1 40 19.95
canevas 100 99.95
Formes dans le canevas
boite 2(Boucle) 59.98189 39.98795
boite 2(Direct) 2.999094 1.999398
Pour la recherche "mondiale" j'ai déjà essayé, ça n'a rien donné.
Merci pour ta participation.
PS Sur l'autre forum, mon message a disparu. J'ai fait qqchose qu'il ne fallait faire ?
Marsh Posté le 09-07-2015 à 18:35:42
Même As Object, cela ne change rien sous 2003 …
Au moins c'est corrigé sous 2010 !
Marsh Posté le 09-07-2015 à 18:39:20
Une erreur de manipulation a interrompu mon message; je l'ai édité.
Marsh Posté le 09-07-2015 à 20:24:33
C'est juste avec la ligne 36 sous 2010, donc c'est réglé, non ?
L'autre forum ? (DVP ?) Un message ne disparaît pas comme cela sauf problème chez l'hébergeur …
Marsh Posté le 09-07-2015 à 20:47:40
Oui, oui, c'est réglé. Ce que je ne comprends pas, c'est que tantôt VBA utilise les points, tantôt la vingtaine de points ; ça ressemble à un gag. Et pourquoi donc utiliser la vingtaine de points ? C'est une unité anglo-saxonne ? C'est un bug non corrigé ? Je n'ai rien trouvé dans l'aide ni sur internet.
Bon, ça ne m'empêche pas de dormir, il suffit de multiplier par 20, et ça roule ...
Marsh Posté le 08-07-2015 à 16:12:06
Bonjour
En VBA Word 2010, je cherche à déplacer une forme dans une zone de dessin, en modifiant les propriétés .Left et .Top de l'objet Shape.
L'aide précise que ces propriétés expriment des distances mesurées en points.
Pour tester ces propriétés, j'ai écrit une petite macro qui place une zone de texte dans un canvas à 60 points du bord gauche et à 40 points du bord haut du canvas,
et une seconde zone de texte hors du canvas, à 60 points du bord gauche et 40 points du bord droit de la feuille.
Puis je récupère ces distances et les fait afficher dans des boites de messages.
Pour la TextBox hors canvas les valeurs renvoyées sont correctes et exprimées en points (60 et 39.95), mais pour l'autre, elles sont divisées par 20 (3 et 2) !
Il semblerait donc que dans une zone de dessin, VBA mesure les distances en vingtaines de points, ou alors je passe à côté de quelque chose.
Avez vous une explication ?
Voici le code de la macro :