IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Word Discussion :

Création de (ex) 3 documents à partir d'un modèle contenant des blocs de construction.


Sujet :

Word

  1. #1
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Création de (ex) 3 documents à partir d'un modèle contenant des blocs de construction.
    Bonjour,
    J'ai un modèle (.dotx) qui contient des blocs de construction qui correspondent à des chapitres "variables".
    Donc pour chaque chapitre j'ai plusieurs blocs de construction possibles, à choisir dans la catégorie de la galerie idoines.
    Ainsi, à partir du même modèle, je peux composer autant de docs différents, que de possibilités offertes par les blocs.

    J'aimerais que lorsque je choisis un chapitre, soit(ent) créé(s) en parallèle dans un (ou plusieurs) document(s) "conditionnel(s)", une doc relative aux choix réalisés précédemment.
    J'imagine qu'il me faudra autant de modèles que de docs à créer, et de blocs de construction/chapitres nécessaires pour chaque modèle.

    Mon souci c'est d'enclencher la genèse des autres docs à partir du premier.
    J'espère être clair.

    A ce stade, merci de m'avoir lu.
    Si en plus vous me comprenez, merci encore.
    Maintenant, avez-vous idée du processus à mettre en œuvre pour arriver à mes fins ?

    Zoulou_xm

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Zoulouxm Voir le message
    Bonjour,

    Dans un modèle .dotm, avez-vous la possibilité d'enregistrer dans une matrice les différents choix réalisés ?
    Ou dans un userform de présélectionner vos blocs et de les mémoriser dans une matrice ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour Eric,
    Merci de vous associer à ma réflexion.
    Effectivement, les choix de chapitres sont nombreux, mais finalement limités au contenu du modèle.
    On pourrait imaginer les répertorier à partir du contenu de la galerie des composants QuickPart personnalisés, ils y sont tous inclus, ou à partir du modèle lui-même, ils y sont tous inclus également. Je vais copier mon modèle et le convertir en .dotm pour voir si c'est envisageable.
    Si oui, dans une UserForm nous pourrions proposer les choix offerts pour chaque chapitre et permettre de les sélectionner, ce qui créerait mon premier doc "Mes_choix.docx" et ouvrirait un autre modèle prêt pour générer un doc "Explication_de_mes_choix".
    Si on peut "enregistrer" la sélection, en fonction de celle-ci, on peut, via une macro, composer "Explication_de_mes_choix" à partir de ses propres chapitres.
    Ou mieux, utiliser la sélection pour les deux documents ouverts en parallèle, si le chapitre porte le même nom dans les deux modèles, avec un contenu différent bien sûr.
    Désolé je pense à haute voix
    Je vais convertir et je reviens.

    Désolé je dois quitter pour ce soir...l'alarme va sonner...
    Je reprends lundi.

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Une alternative d'avant les blocs de construction. Faudrait peut-être adapter, s'if faut deux documents.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  5. #5
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci Clément,
    Effectivement l'article est intéressant, mais ça ...c'était avant...
    Il eut fallu s'assurer que le public visé dispose d'Excel (certainement) et Access (pas gagné), et débuter le doc avec ce principe et cette structure.
    Maintenant que tout est construit en blocs, la "refonte" serait un gros travail éventuellement voué à l'échec.
    Cependant, je garde l'idée. Pour une prochaine création, je testerai et vous dirai mon sentiment.

    Je vais éviter de me disperser et tester la matrice proposée par Eric.
    J'aurai certainement besoin de toutes vos lumières collectives sur ce sujet, c'est une première .
    Merci à vous.
    Zoulou

  6. #6
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour Eric,
    Vous proposez "dans un userform de présélectionner vos blocs et de les mémoriser dans une matrice"
    J'ai converti le dotx en dotm, comme dit plus haut.
    J'ai créé un userform pas de souci.
    Je ne vois pas comment "présélectionner" les blocs (est-ce le fait de les choisir dans le modèle ?), et je vois encore moins comment les mémoriser dans une matrice.
    J'ai cherché côté "matrice" mais je trouve des réponses qui ne semblent pas correspondre au besoin.
    Sans doute que "matrice" correspond à plusieurs usages. (Matrice sous équation, Matrice sous SmartArt, table_matrice sous Excel, Néo dans Matrice )

    De Zigo34 relayant Tony Jollans (merci à eux), j'ai trouvé ceci, qui ne laisse pas le choix mais insère le bloc défini dans la macro à partir du modèle. C'est bien aussi et proposer un choix à partir de là devrait être possible. Le tout est de lister le choix.

    J'ai oublié de préciser que mon modèle contient du texte "fixe" entre les paragraphes "variables", et donc, la position du paragraphe suivant, varie selon le premier choix, le second... et la présence ou non de texte fixe plus ou moins long entre ceux-ci. Ben oui sinon ...
    La liste des blocs en contient 98 avec entre 3 et 5 choix possibles par paragraphes.

    Si vous pouvez clarifier votre pensée, je vous en remercie.
    Zoulou_xm

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Zoulouxm Voir le message
    Bonjour,

    Il vous faut mettre un fichier en ligne contenant vos quickparts et votre userform pour que je vois la façon de les récupérer.

  8. #8
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Désolé Eric,
    La charte que j'ai signée m'interdit de le mettre en ligne.
    J'ai déterré "VBA Word 2007" de Anne Lavergne aux Editions ENI, il "calait l'armoire" et c'est heureux puisqu'elle y évoque la possibilité de lister les blocs de construction sous forme d'un tableau. YESSSS !
    Je vais transcrire le code qu'elle propose et je vois ce qu'il en est.
    J'espère qu'entre 2007 et 2019, le code reste compatible, étant donné que les blocs de construction ont un peu joué au yoyo entre les versions "j'y suis/j'y suis plus".
    Je vous tiens au courant.
    Merci
    Zoulou_xm

  9. #9
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour Eric,
    Voilà, j'ai transcrit ce que Anne Lavergne propose sous VBA Word 2007:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    Sub ListeBlocsConstruction()
    Dim gall As BuildingBlockTypes
    Dim cat As Category
    Dim bb As BuildingBlock
    Dim para As Paragraph
    Dim mytable As Table
    Dim i as integer, j as integer, v as integer
    'Editer pour chaque type, et chaque catégorie Le nom du type, de la catégorie, le nom du bloc de construction et son
    'Contenu non mis en forme séparé par un signe de tabulation, et un autre de paragraphe en fin de ligne, au point d'insertion du document actif
    For i = 1 To Templates(l) .BuildingBlockTypes.Count
    Set gall= Templates(l) .BuildingBlockTypes(i)
    	For j = 1 To gall.Categories.Count
    		Set cat = gall.Categories(j)
    		For v = 1 To cat.BuildingBlocks.Count
    			Set bb = cat.BuildingBlocks(v)
    			Selection.TypeText gall.Name & vbTab & cat.Name & vbTab
    			& bb.Name & vbTab & bb.Value & vbCr
    		Next v
    	Next j
    Next i
     
    'Certains blocs n'ont pas de signe de fin de paragraphe en fin de contenu,d'autres si.
    'enlever les paragraphes vides
    For Each para In ActiveDocument.Paragraphs
    	If para.Range.Text= vbCr Then
    		para.Range.Delete
    	End If
    Next para
     
    'Transformer le texte en tableau
    Set mytable = ActiveDocument.Range.ConvertToTable(Separator:=vbTab)
     
    'Trier la tableau par type, categorie et nom
    mytable.Sort ExcludeHeader:=False, FieldNumber:="Colonne l",
    	SortFieldType:=wdSortFieldAlphanumeric, _
    	SortOrder:=wdSortOrderAscending, _
    	FieldNumber2:="Colonne 2", SortFieldType2:=wdSortFieldAlphanumeric,
    	SortOrder2:=wdSort0rderAscending, FieldNumber3:="Colonne 3",
    	SortFieldType3:=wdSortFieldAlphanumeric,
    	SortOrder3:=wdSortOrderAscending
     
    'Ajouter une ligne de titre au tableau
    With Selection
     
    	'deplacer la selection au début du tableau
    	.HomeKey Unit:=WdTable
     
    	'Inserer une ligne au-dessus
    	.InsertRowsAbove 1
     
    	'Ajouter le texte à la 1ère ligne du tableau
    	.Tables(1) .Cell(l, 1) .Range.Text = "Galerie"
    	.Tables(l) .Cell(l, 2) .Range.Text = "Catégorie"
    	.Tables(1) .Cell( 1, 3) .Range.Text = "Nom"
    	.Tables(l) .Cell(l, 4) .Range.Text = "Contenu"
     
    	'Mettre en gras la 1ère ligne
    	.Tables(l) .Rows(ll .Range.Bold = True
     
    	'Ajouter les colonnes au contenu
    	.Tables(l) .AutoFitBehavior (wdAutoFitContent)
    End With
    End Sub
    Est-ce valable pour l'actuel Word 2019 ?
    Mes blocs sont directement enregistrés dans le modèle et non pas dans Building Blocks.dotx
    A plus tard.
    Zoulou_xm

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Zoulouxm Voir le message
    Et ça fonctionne ?

    Sinon, pour récupérer votre liste dans une matrice :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    Public MatriceBlocks() As Variant
    Public IndexMatrice As Integer
     
    Sub TestChargerLaMatriceBlocks()
     
    Dim I As Integer
     
        ChargerLaMatriceBlocks 1
     
        If IndexMatrice = 0 Then Exit Sub
     
        For I = LBound(MatriceBlocks, 2) To UBound(MatriceBlocks, 2)
            Debug.Print MatriceBlocks(0, I) & ", " & MatriceBlocks(1, I) & ", " & MatriceBlocks(2, I) & ", " & MatriceBlocks(3, I)
        Next I
     
    End Sub
     
     
    Sub ChargerLaMatriceBlocks(ByVal NumeroTemplate As Integer)
     
    Dim gall As BuildingBlockType
    Dim cat As Category
    Dim bb As BuildingBlock
    Dim I As Integer, j As Integer, v As Integer
     
        IndexMatrice = 0
        With Templates(NumeroTemplate)
     
             For I = 1 To .BuildingBlockTypes.Count '.BuildingBlockTypes.Count
                  Set gall = .BuildingBlockTypes(I)
                  For j = 1 To gall.Categories.Count
                          Set cat = gall.Categories(j)
                          For v = 1 To cat.BuildingBlocks.Count
                              Set bb = cat.BuildingBlocks(v)
                             ' Debug.Print bb.Type
                              ReDim Preserve MatriceBlocks(3, IndexMatrice)
                              MatriceBlocks(0, IndexMatrice) = gall.Name
                              MatriceBlocks(1, IndexMatrice) = cat.Name
                              MatriceBlocks(2, IndexMatrice) = bb.Name
                              MatriceBlocks(3, IndexMatrice) = bb.Value
                              IndexMatrice = IndexMatrice + 1
     
                            Set bb = Nothing
     
                         Next v
                       Set cat = Nothing
                  Next j
                  Set gall = Nothing
              Next I
        End With
     
    End Sub

  11. #11
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonsoir Eric,
    Je teste à l'instant les deux méthodes, et j'obtiens bien une liste des blocs dans la fenêtre d'exécution avec celle que vous proposez.
    Je pense que je me suis pris les doigts dans le clavier pour transcrire celui- d'Anne. Ou alors j'ai pas relu comme il aurait fallu...
    J'ai quelques "mauvaises surprises" qu'il me faut analyser dans les blocs.
    Pour certains j'obtiens le contenu du bloc sans les colonnes précédentes. Pour d'autres les infos sont conformes.
    On peut même retirer la colonne du contenu ("value" i thing ?) puisque seuls le nom, la galerie (Composants QuickPart personnalisés), la catégorie (une pour chaque paragraphe) et le modèle-porteur (pour modifier selon la doc composée) seraient nécessaires.

    Nom : 2019-07-24 20_39_56-Organisateur de blocs de construction.png
Affichages : 217
Taille : 25,0 Ko

    Mon raisonnement tient-il la route ?
    Merci pour cet excellent coup de main.
    J'ai un gros projet sur le feu, je ne peux pas être suffisamment réactif sur celui-ci en ce moment.
    Merci d'être patient donc...les nuits sont courtes
    Bonne soirée
    Cordialement
    Zoulou_xm

    PS: j'ai tenté d'importer la liste en CSV dans un xls mais l'interprétation du séparateur est mauvaise (une seule colonne)
    J'ai modifié la", " en "; " mais pas mieux.
    J'arrête là pour ce soir...

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Zoulouxm Voir le message
    Bonsoir,

    Regardez ce que vous pouvez faire avec ce code. L'idée est d'associer un bloc à un signet et de l'insérer. Cela me parle plus que le précédent code car je ne vois pas bien où vous voulez aller.
    A adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    Sub TesterInsererUnBloc()
     
        InsererUnBloc ActiveDocument, "Pictogrammes", "Signet2"
     
    End Sub
     
    Sub InsererUnBloc(ByVal DocEnCours2 As Document, ByVal NomDuPictogramme As String, ByVal NomDuSignet As String)
     
    Dim MonTemplate As Template
    Dim I As Integer
     
        Set MonTemplate = Application.Templates("C:\Users\Eric\AppData\Roaming\Microsoft\Document Building Blocks\1036\14\Building Blocks.dotx")
        With MonTemplate
             For I = 1 To .BuildingBlockEntries.Count
                 If .BuildingBlockEntries(I).Name = NomDuPictogramme Then
                    .BuildingBlockEntries(NomDuPictogramme).Insert Where:=DocEnCours2.Bookmarks(NomDuSignet).Range, RichText:=True
                 End If
             Next I
        End With
       Set MonTemplate = Nothing
     
    End Sub
    En admettant que vous ayez récupéré les collections BuildingBlockEntries de vos différents modèles dans une matrice, vous pourriez ensuite les réinjecter aux endroits choisis.

  13. #13
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonsoir Eric,
    Je vois l'idée pour l'insertion... ça semble intéressant et réaliste.
    Je vais devoir la tester, mais je dois finir un autre projet d'abord.
    Désolé c'est un peu "décousu"...faut vraiment que je prenne quelques jours de congé...

    Je marque une pause sur celui-ci ... faites comme moi.
    On se reparle dans quelques jours.
    Merci encore.
    Z

Discussions similaires

  1. Automatisation de génération des documents à partir d'un modèle
    Par imilou dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 27/03/2013, 20h41
  2. Réponses: 1
    Dernier message: 09/09/2011, 00h09
  3. Réponses: 11
    Dernier message: 08/02/2010, 11h13
  4. Réponses: 26
    Dernier message: 27/11/2008, 14h39
  5. Ouvrir nouveau document à partir d'un modèle
    Par Ofsco dans le forum Word
    Réponses: 13
    Dernier message: 28/12/2007, 10h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo