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

VBA Word Discussion :

[WD 2010] Alimenter une lisbox avec la collection de styles de mon template


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur SLI / Doc technique
    Inscrit en
    Février 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur SLI / Doc technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 2
    Points : 5
    Points
    5
    Par défaut [WD 2010] Alimenter une lisbox avec la collection de styles de mon template
    Bonjour à tous,

    Je ne sais pas s'il est d'usage de se présenter quelque part sur ce forum.
    Je viens d'être envoyé sur un un projet qui consiste à créer un outil qui gère des processus d'édition, de compilation et de version de documentation technique en utilisant des modules Word et sharepoint.

    L'outil est codé en VBA depuis un an et presque terminé, mais je n'y connais presque rien, et il faut croire que la formation se fera...et bien par moi même (société de presta ingé.). ^^'

    Je commence à bidouiller un ajout demandé par l'utilisateur, qui me permet lors de l'ouverture des documents de:

    - Faire un update des styles en comparant ceux du template et ceux du document
    - Faire une comparaison à la recherche de styles qui ne sont plus utilisés dans le template mais présents dans le document
    - Ouvrir une fenêtre listant les styles disponibles afin de choisir le style qui remplacera ceux qui doivent être supprimés.

    J'ai fini le gros de la fonction mais je pêche sur l'alimentation de ma listbox avec les styles du template.

    Voilà comment je procède :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Property Let ListStyles(TempStylesList As Styles)
      ListBox1.Clear
      For Each i In TempStylesList
         Me.ListBox1.AddItem i ' ou alors Me.ListBox1.AddItem (i.NameLocal)
      Next i
    End Property
    J'utilise la propriété LET afin d'importer la variable TempStylesList qui est la liste de styles de mon templates, sans devoir créer de variable globale (je début avec LET et GET).

    Lorsque j'insère un msgbx pour voir la valeur de i, j'ai bien les styles qui s'affichent un par un.
    A la fin, mon userForm s'affiche avec une ListBox vide...

    L'idée étant que j'utilise la sélection pour ensuite lancer un Search and replace du style sur les textes visés.

    J'ai déjà essayé plusieurs manip, dont un ajout manuel de valeur (type .ListBox1.addItem "Blabla") pour être sur que tout le reste fonctionne (nommage de la liste etc).

    En espérant avoir été clair et pas trop long, ma question est donc:

    - Comment alimenter ma listbox avec la collection de style (ou le nom des styles) ?

    Merci d'avance, et n'hésitez pas à faire des retours sur la forme de mon sujet.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Ingénieur SLI / Doc technique
    Inscrit en
    Février 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur SLI / Doc technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 2
    Points : 5
    Points
    5
    Par défaut Solution
    Après plusieurs essais et modifications, j'ai enfin trouvé une solution.

    Je la partage ici au cas où ça puisse aider un francophone à l'avenir.

    Je ne sais pas précisément d'où vient le problème, mais j'ai remarqué que même lorsque je voulais ajouter une simple string dans la fenêtre, dans la propriété let, rien ne se passait.
    Par contre, lorsque je configurais la procédure initialize en allant chercher directement les styles dans le document template ouvert (ce que je voulais éviter), ça fonctionnait.

    J'en déduis qu'il y avait quelque chose de pas clair dans l'alimentation de la liste au sein de la propriété Let.

    Pour résoudre le problème sans passer par une variable globale, j'ai donc revu l'utilisation de la propriété Let au plus simple. Elle prend donc la collection de style venant du "code principal" et la stock dans une variable. Cette dernière est alors utilisée pour alimenter la liste une fois le bouton prévu à cette effet sélectionné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private TempStyles As Styles
     
    Public Property Let ListStyles(TempStylesList As Styles)
     Set TempStyles = TempStylesList 'copie la liste de style dans la variable TempStyles
    End Property
     
    Private Sub CommandButtonShow_Click()
        For Each i In TempStyles
            If TempStyles(i).Visibility = False Then 'Vérifie si le style à ajouté n'est pas Caché dans le template. Ne l'ajoute pas si c'est le cas.
                ListBox1.AddItem TempStyles(i).NameLocal 'ajoute le style dans la liste
            Else
        Next i
    End Sub
    Et pour l'appel du formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Set StyleForm = Replace_A_Style
    StyleForm.ListStyles = DocTemplate.Styles 'Passe la liste de styles
    Replace_A_Style.Show ' Affiche le formulaire
    Le problème n'était donc pas l'alimentation de la listbox avec une collection de styles, mais bien le mauvais passage de la variable dans les procédures du Userform.

    Note:
    Le bouton CommandButtonShow_Click() me permet d'alimenter la liste, d'abord visible comme vide par l'utilisateur. J'ai tenté d'alimenter directement via la procédure initialize, mais quelque chose ne tournait pas rond. Cela vient peut-être du fait que cette dernière est lancée lorsque le formulaire est "appelé" (Set StyleForm.ListStyles = Replace_A_Style), alors que la variable TempStyles n'est pas encore définie. Puis elle est relancée lorsque le formulaire est affiché, mais cela n'affichait pas le formulaire et continuait la procédure principale.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. alimenter une tables avec plusieurs formulaires
    Par vibalistic dans le forum VBA Access
    Réponses: 8
    Dernier message: 21/12/2007, 10h20
  2. alimenter une listbox avec données filtrées
    Par casefayere dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/12/2007, 23h42
  3. Modifier une ligne avec layout:collection
    Par imane_bennouna dans le forum Struts 1
    Réponses: 3
    Dernier message: 07/05/2007, 14h47
  4. Réponses: 12
    Dernier message: 22/06/2006, 12h09
  5. Alimenter une table avec une requête
    Par cboubou84 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 12/05/2006, 15h08

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