Dans un document Word, j'ai créé une forme de type "Flèche" (via la barre
d'outils "Dessin"). Le type de la forme n'a pas d'importance.
J'enregistre ensuite le document Word.
Si je sélectionne ensuite la flèche en cliquant dessus puis ferme le
document Word, le document se ferme bien sans la question "Voulez-vous
enregistrer les modifications ?"; ceci est normal puisque aucune
modification n'a été apportée au document.
Si par contre je lance une macro qui sélectionne la même flèche par VBA
(cf ActiveDocument.Shapes("Flèche").Select , "Flèche" étant le
nom de la forme, la sélection de la flèche se fait bien.
Par contre si je ferme le document Word dans la foulée, apparaît le message
"Voulez-vous enregistrer les modifications ?" alors qu'aucune modification
du document n'a été effectuée.
Comment se fait-il que le fait d'uniquement sélectionner une forme via VBA
fasse croire à Word qu'une modification a été effectuée dans le document
Word, alors que cela n'a pas été le cas ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Anacoluthe
Bonjour !
'Patrick_67' nous a écrit ...
Comment se fait-il que le fait d'uniquement sélectionner une forme via VBA fasse croire à Word qu'une modification a été effectuée dans le document Word, alors que cela n'a pas été le cas ?
Tiens oui c'est drôle. Je ne l'avais jamais remarqué !
Encore une bizarrerie de vba (on ne va pas appeler ça un beug !) qui s'explique peut-être par l'idée du concepteur de word-vba que si on sélectionne un objet, c'est pour faire qqch avec ;-) Comme ce n'est pas toujours simple avec les shapes, il s'est dit qu'en forçant .Saved à False dès la sélection ça irait plus vite !
En pratique, je ne vois rien de bien gênant dans cette curiosité. Si votre code peut être amené à sélectionner une forme sans rien faire avec (??) et que cette pseudo modification dérange, enregistrez avant la Shape.Select la valeur du Document.Saved et rétablissez-la après.
Rappelons enfin qu'un bon code vba ne sélectionne pas... ;-) (C'est l'enregistreur de macros qui sélectionne)
Anacoluthe « La vraie question est : pourquoi sélectionner? Et je ne connais pas la réponse. » - Albert JACQUARD
Bonjour !
'Patrick_67' nous a écrit ...
Comment se fait-il que le fait d'uniquement sélectionner une forme via VBA
fasse croire à Word qu'une modification a été effectuée dans le document
Word, alors que cela n'a pas été le cas ?
Tiens oui c'est drôle. Je ne l'avais jamais remarqué !
Encore une bizarrerie de vba (on ne va pas appeler ça un beug !)
qui s'explique peut-être par l'idée du concepteur de word-vba
que si on sélectionne un objet, c'est pour faire qqch avec ;-)
Comme ce n'est pas toujours simple avec les shapes, il s'est
dit qu'en forçant .Saved à False dès la sélection ça irait
plus vite !
En pratique, je ne vois rien de bien gênant dans cette
curiosité. Si votre code peut être amené à sélectionner
une forme sans rien faire avec (??) et que cette pseudo
modification dérange, enregistrez avant la Shape.Select
la valeur du Document.Saved et rétablissez-la après.
Rappelons enfin qu'un bon code vba ne sélectionne pas... ;-)
(C'est l'enregistreur de macros qui sélectionne)
Anacoluthe
« La vraie question est : pourquoi sélectionner?
Et je ne connais pas la réponse. »
- Albert JACQUARD
Comment se fait-il que le fait d'uniquement sélectionner une forme via VBA fasse croire à Word qu'une modification a été effectuée dans le document Word, alors que cela n'a pas été le cas ?
Tiens oui c'est drôle. Je ne l'avais jamais remarqué !
Encore une bizarrerie de vba (on ne va pas appeler ça un beug !) qui s'explique peut-être par l'idée du concepteur de word-vba que si on sélectionne un objet, c'est pour faire qqch avec ;-) Comme ce n'est pas toujours simple avec les shapes, il s'est dit qu'en forçant .Saved à False dès la sélection ça irait plus vite !
En pratique, je ne vois rien de bien gênant dans cette curiosité. Si votre code peut être amené à sélectionner une forme sans rien faire avec (??) et que cette pseudo modification dérange, enregistrez avant la Shape.Select la valeur du Document.Saved et rétablissez-la après.
Rappelons enfin qu'un bon code vba ne sélectionne pas... ;-) (C'est l'enregistreur de macros qui sélectionne)
Anacoluthe « La vraie question est : pourquoi sélectionner? Et je ne connais pas la réponse. » - Albert JACQUARD
Anacoluthe
Re !
Si votre code peut être amené à sélectionner une forme sans rien faire avec (??)
Ah pardon, je n'avais pas pensé au cas où on sélectionne pour copier dans le presse-papiers. Effectivement dans ce cas on sélectionne sans rien modifier ensuite...
Anacoluthe « La vraie question est : pourquoi sélectionner? Et je ne connais pas la réponse. » - Albert JACQUARD
Re !
Si votre code peut être amené à sélectionner
une forme sans rien faire avec (??)
Ah pardon, je n'avais pas pensé au cas où on sélectionne
pour copier dans le presse-papiers. Effectivement dans ce
cas on sélectionne sans rien modifier ensuite...
Anacoluthe
« La vraie question est : pourquoi sélectionner?
Et je ne connais pas la réponse. »
- Albert JACQUARD
Si votre code peut être amené à sélectionner une forme sans rien faire avec (??)
Ah pardon, je n'avais pas pensé au cas où on sélectionne pour copier dans le presse-papiers. Effectivement dans ce cas on sélectionne sans rien modifier ensuite...
Anacoluthe « La vraie question est : pourquoi sélectionner? Et je ne connais pas la réponse. » - Albert JACQUARD
Patrick_67
Merci Anacoluthe pour tes interventions.
Voici quelques explications complémentaires liées à mon besoin.
J'ai deux documents Word. Un document Word principal (disons Principal.doc) et un autre qui contient quelques formes prédéfinies (disons Formes.doc).
Une fois dans Principal.doc, je lance une macro qui : 1. ouvre Formes.doc 2. sélectionne une forme puis la copie 3. colle la forme sélectionnée dans Principal.doc 4. referme Formes.doc
Le problème cité plus haut apparait donc au moment de la fermeture de Formes.doc.
Pour l'instant, j'ai effectivement ajouté une instruction de type "Saved=True" pour Formes.doc juste avant de fermer Formes.doc et bien évidemment il n'y a plus de message.
Voici donc une question complémentaire : * ActiveDocument.Shapes("Flèches").Select * Selection.Copy Est-il possible de regrouper ces 2 instructions en une seule du type : * ActiveDocument.Shapes("Flèches").Copy ce qui éviterait le "Select" et contournerait éventuellement le problème cité + haut ?
J'ai essayé mais le "Copy" direct provoque étonnemment un message d'erreur.
Merci pour d'autres idées à ce sujet.
Patrick.
"Anacoluthe" a écrit dans le message de news: eCo2$
Re !
Si votre code peut être amené à sélectionner une forme sans rien faire avec (??)
Ah pardon, je n'avais pas pensé au cas où on sélectionne pour copier dans le presse-papiers. Effectivement dans ce cas on sélectionne sans rien modifier ensuite...
Anacoluthe « La vraie question est : pourquoi sélectionner? Et je ne connais pas la réponse. » - Albert JACQUARD
Merci Anacoluthe pour tes interventions.
Voici quelques explications complémentaires liées à mon besoin.
J'ai deux documents Word. Un document Word principal (disons Principal.doc)
et un autre qui contient quelques formes prédéfinies (disons Formes.doc).
Une fois dans Principal.doc, je lance une macro qui :
1. ouvre Formes.doc
2. sélectionne une forme puis la copie
3. colle la forme sélectionnée dans Principal.doc
4. referme Formes.doc
Le problème cité plus haut apparait donc au moment de la fermeture de
Formes.doc.
Pour l'instant, j'ai effectivement ajouté une instruction de type
"Saved=True" pour Formes.doc juste avant de fermer Formes.doc et bien
évidemment il n'y a plus de message.
Voici donc une question complémentaire :
* ActiveDocument.Shapes("Flèches").Select
* Selection.Copy
Est-il possible de regrouper ces 2 instructions en une seule du type :
* ActiveDocument.Shapes("Flèches").Copy
ce qui éviterait le "Select" et contournerait éventuellement le problème
cité + haut ?
J'ai essayé mais le "Copy" direct provoque étonnemment un message d'erreur.
Merci pour d'autres idées à ce sujet.
Patrick.
"Anacoluthe" <nopub_anacoluthe@Ouanadoo.fr> a écrit dans le message de news:
eCo2$rdvFHA.596@TK2MSFTNGP12.phx.gbl...
Re !
Si votre code peut être amené à sélectionner
une forme sans rien faire avec (??)
Ah pardon, je n'avais pas pensé au cas où on sélectionne
pour copier dans le presse-papiers. Effectivement dans ce
cas on sélectionne sans rien modifier ensuite...
Anacoluthe
« La vraie question est : pourquoi sélectionner?
Et je ne connais pas la réponse. »
- Albert JACQUARD
Voici quelques explications complémentaires liées à mon besoin.
J'ai deux documents Word. Un document Word principal (disons Principal.doc) et un autre qui contient quelques formes prédéfinies (disons Formes.doc).
Une fois dans Principal.doc, je lance une macro qui : 1. ouvre Formes.doc 2. sélectionne une forme puis la copie 3. colle la forme sélectionnée dans Principal.doc 4. referme Formes.doc
Le problème cité plus haut apparait donc au moment de la fermeture de Formes.doc.
Pour l'instant, j'ai effectivement ajouté une instruction de type "Saved=True" pour Formes.doc juste avant de fermer Formes.doc et bien évidemment il n'y a plus de message.
Voici donc une question complémentaire : * ActiveDocument.Shapes("Flèches").Select * Selection.Copy Est-il possible de regrouper ces 2 instructions en une seule du type : * ActiveDocument.Shapes("Flèches").Copy ce qui éviterait le "Select" et contournerait éventuellement le problème cité + haut ?
J'ai essayé mais le "Copy" direct provoque étonnemment un message d'erreur.
Merci pour d'autres idées à ce sujet.
Patrick.
"Anacoluthe" a écrit dans le message de news: eCo2$
Re !
Si votre code peut être amené à sélectionner une forme sans rien faire avec (??)
Ah pardon, je n'avais pas pensé au cas où on sélectionne pour copier dans le presse-papiers. Effectivement dans ce cas on sélectionne sans rien modifier ensuite...
Anacoluthe « La vraie question est : pourquoi sélectionner? Et je ne connais pas la réponse. » - Albert JACQUARD