Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Modifier des BuildingBlocks par macro


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Modifier des BuildingBlocks par macro
    Bonjour,

    je cherche à réorganiser mes BuildingBlocks en changeant tantôt leur Type, tantôt leur Catégorie. Seulement, ils sont tellement nombreux que je souhaite le faire en code et non via l'Organisateur de blocs qui est vraiment mal foutu de mon point de vue.

    Le problème c'est que je n'arrive pas à modifier à proprement parler les BuildingBlocks. Tout ce que j'arrive à faire c'est à ouvrir le BB à modifier et à en créer un nouveau après avoir récupérer les éléments.

    En gros ça donne ça.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim objBBE As BuildingBlockEntries
    Dim objBB As BuildingBlock
    Dim myRange As Range
     
    Set objBB = objTemplate.BuildingBlockTypes(wdTypeCustom1).Categories(i).BuildingBlocks(ii) (je vous épargne les boucles i et ii)
    Set Doc = Word.Application.Documents.Add
    Insertion du BB dans Doc
    Set myRange = Doc.Range(0, Doc.Paragraphs(Doc.Paragraphs.Count).Range.End)
    objBBE.Add objBB.Name, wdTypeAutoText, objBB.Category.Name, myRange


    Sauf que cette méthode m'oblige à chaque fois à ouvrir un doc et à insérer le BB parce que j'ai besoin de récupérer un objet Range ce que je n'arrive pas à faire directement en code.

    D'ailleurs ce n'est peut-être pas possible car autant j'arrive à modifier le nom des BB via la propriété Name, autant l'aide en ligne m'indique que la propriété Type est en lecture seule.

    Mais d'un autre côté l'organisateur de bloc lui permet ce genre de modifications donc je ne vois pas pourquoi on ne pourrait pas le faire directement via une macro.

    Du coup j'ai deux question :

    1) Est-il quand même possible de modifier directement un BB ce qui m'épargnerait le processus artisanal de Création/Suppression
    2) Si non, puis-je récupérer l'objet range d'un BB existant pour le transmettre à celui qui va le remplacer ?

    Je m'excuse d'ores et déjà pour le mal de crâne que j'ai peut-être occasionné à certains...

  2. #2
    Expert éminent sénior
    Citation Envoyé par ulyssep Voir le message

    Bonjour,

    Regardez cette discussion pour voir si elle peut vous être utile pour identifier vos objets : Creation-ex-3-documents-partir-d-modele-contenant-blocs-construction
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  3. #3
    Membre à l'essai
    Bonjour Eric, merci pour votre réponse et surtout merci pour le partage de cette discussion qui m'a permis d'en apprendre beaucoup.

    Hélas, cela n'a trait qu'à de l'insertion et de l'affichage/présentation des BB et non de leur modification à proprement parler. Je garde cependant les marcos qui y ont été partagés et qui vont me permettre de grandement améliorer certaines parties de code.

    Bonne journée.

  4. #4
    Expert éminent sénior
    Citation Envoyé par ulyssep Voir le message

    Ben non. Dès lors que l'objet est identifié (une variable instanciée), vous devez pouvoir travailler dessus.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  5. #5
    Membre à l'essai
    Dans ce cas il y a quelque chose qui m'échappe.

    Si j'écris objBB.Name = "NouveauNom" effectivement je n'ai pas de souci.

    Mais lorsque je fais objBB.Type.Index = 29 j'ai une erreur de compilation impossible d'affecter à une propriété en lecture seule.

  6. #6
    Expert éminent sénior
    Citation Envoyé par ulyssep Voir le message

    Tout n'est pas modifiable. Il faut aller voir dans l'aide en ligne pour l'objet et regarder ses propriétés pour voir celles qui sont en lecture/écriture.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  7. #7
    Membre à l'essai
    Citation Envoyé par Eric KERGRESSE Voir le message
    Tout n'est pas modifiable. Il faut aller voir dans l'aide en ligne pour l'objet et regarder ses propriétés pour voir celles qui sont en lecture/écriture.
    C'est ce que j'ai fait en tout premier lieu bien sûr.

    C'est pour ça que dans mon premier message j'écris :

    D'ailleurs ce n'est peut-être pas possible car autant j'arrive à modifier le nom des BB via la propriété Name, autant l'aide en ligne m'indique que la propriété Type est en lecture seule.

    Mais d'un autre côté l'organisateur de bloc lui permet ce genre de modifications donc je ne vois pas pourquoi on ne pourrait pas le faire directement via une macro.

    Du coup j'ai deux question :

    1) Est-il quand même possible de modifier directement un BB ce qui m'épargnerait le processus artisanal de Création/Suppression
    2) Si non, puis-je récupérer l'objet range d'un BB existant pour le transmettre à celui qui va le remplacer ?

###raw>template_hook.ano_emploi###