VBA : Insérer un QuickPart ailleurs que dans Selection.Range
Bonjour,
je dispose du code suivant qui permet d'insérer un QuickPart là où le curseur est présent :
Application.Templates(chemin).BuildingBlockEntries(nomSignet).Insert Where:=Selection.Range, RichText:=True
Le problème, c'est que lorsque je clique sur un objet (par exemple une image) et que j'essaye d'insérer le QuickPart, ça me met une erreur car Word essaye d'insérer le QuickPart dans l'image. Or moi les QuickPart ce sont des formes (cercles, triangles...). J'aimerai donc insérer le QuickPart dans la page active mais pas précisément là où il y a le curseur. Je pense donc que c'est "Where:=Selection.Range" qu'il faut changer, mais je ne sais pas par quoi y remplacer.. Quelqu'un aurai une suggestion ? :)
je dispose du code suivant qui permet d'insérer un QuickPart là où le curseur est présent :
Application.Templates(chemin).BuildingBlockEntries(nomSignet).Insert Where:=Selection.Range, RichText:=True
Le problème, c'est que lorsque je clique sur un objet (par exemple une image) et que j'essaye d'insérer le QuickPart, ça me met une erreur car Word essaye d'insérer le QuickPart dans l'image. Or moi les QuickPart ce sont des formes (cercles, triangles...). J'aimerai donc insérer le QuickPart dans la page active mais pas précisément là où il y a le curseur. Je pense donc que c'est "Where:=Selection.Range" qu'il faut changer, mais je ne sais pas par quoi y remplacer.. Quelqu'un aurai une suggestion ? :)
1 réponse
-
ModérateurBonjour,
Déjà, il faut savoir où tu veux l'insérer exactement. Tu dis "dans la page active", mais ce n'est pas précis.
Maintenant tu peux aussi tester quel est le type de sélection. Par exemple pour une image :
If Selection.Type = wdSelectionShape Then
...
Ce qui signifie : si la sélection actuelle est une image, alors...
Tu peux aussi tester qu'il n'y a pas de sélection :If Selection.Type <> 1
m@rina
-
Bonjour m@rina et merci beaucoup pour votre réponse.
Puisque, lorsque je sélectionne une image, je ne peux pas insérer le quickpart à cause du where:=selection.range, je cherche à insérer mon quickpart sur la page active mais pas sur la sélection. Est-ce possible de linsérer "par dessus" la sélection ? Mes formes ont des habillages "au-dessus du texte". Sinon par exemple pouvoir les inséree en milieu de page active, ou en haut de page active..enfin bref quelque part pas trop loin de la sélection mais pas directement sur la sélection :)
Bonne journée ensoleillée ;) -
-
Bonjour m@rina,
Ca me met l'erreur suivante : Erreur d'execution 2147467259 (80004005) : La méthode insert de l'objet building block a échoué.
Si j('essaye ce que tu m'a dit en ajoutant le Insertion.Collapse, ça me met Erreur d'execution 424 : Objet requis. Code :
Public Sub inserer(nomSignet As String)
Insertion.Collapse
Application.Templates(chemin).BuildingBlockEntries(nomSignet).Insert Where:=Selection.Range, RichText:=True
End Sub -
ModérateurBonsoir,
Cette erreur n'est pas relative au Collapse qui ne fait que bouger la sélection.
Quand on veut insérer des blocs par macro, il faut commencer par charger :
Templates.LoadBuildingBlocks
https://docs.microsoft.com/fr-fr/office/vba/api/word.templates.loadbuildingblocks?redirectedfrom=MSDN
Et au risque de me répéter, il ne doit pas y avoir d'erreur avec le where:=selection.range, car si une autre image est sélectionnée, elle sera remplacée. Ce n'est pas forcément ce qu'on souhaite mais ça ne génère pas d'erreur.
m@rina -
Bonjour m@rina :)
Avec le code suivant, la ligne jaune se met sur le Insertion.Collapse :
Sub insert (nomSignet as String)
Insertion.Collapse
Application.Templates(chemin).BuildingBlockEntries(nomSignet).Insert Where:=Selection.Range, RichText:=True
End Sub
Est ce que je me suis trompé qq part ?
Ensuite, sans le Insertion.Collapse, si jinsere par exemple lobjet de signet "photo1"issu de chemin, ça marche. Si je clique sur un control dimage et que je reessaye, ça met le msg d erreur et ça ne remplace pas mon controle d image par photo1, bizzard..
-