Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2008, 17h02   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 5
Points : 2
Points : 2
Par défaut Remplir toutes les combobox d'un doc Word

Bonjour,

Comment puis-je accéder aux combobox (pas aux listes déroulantes de type champ de formulaire mais aux contrôles ActiveX combobox) placées directement dans un document Word ?

J'ai besoin d'accéder au nom de chaque contrôle pour une boucle du genre :
Code :
1
2
3
4
 
for each f in ThisDocument.fields
   x=f.Name
next f
l'objet FormField a bien une propriété .Name mais pas l'objet Field et les ComboBox figurent dans la collection Fields mais pas dans FormFields

Je dois utiliser des comboBox et non des champs de liste déroulante pour passer la barrière des 25 items

Si quelqu'un peut m'aider....

Merci d'avance

PS : je soulève ce problème car je veux alimenter automatiquement toutes les listes de mon document à partir de plages nommées Excel ou de tableaux Word. Je dois donc balayer toutes les comboBox et utiliser leur nom pour localiser la plage Excel ou le tableau Word à utiliser pour le remplissage....

Actuellement j'utilise ça :
Code :
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
 
Private Sub Document_Open()
    ' ouverture du document qui contient les tableaux pour les listes
    Documents.Open FileName:=CheminListes & "\" & NomListes, Visible:=False
    Set DocList = Documents(NomListes)
    ' on alimente chaque liste déroulante
    If Not Alimente("Civilités", Civilités) Then MsgBox "Table des Civilités non présente"
    If Not Alimente("Stagiaires", Stagiaires) Then MsgBox "Tables des Stagiaires non présente"
    If Not Alimente("Villes", Villes) Then MsgBox "Tables des Villes non présente"
    If Not Alimente("Stages", Stages) Then MsgBox "Tables des Stages non présente"
    If Not Alimente("Unités", Unités) Then MsgBox "Tables des Unités non présente"
    If Not Alimente("Dates", Dates) Then MsgBox "Tables des Dates non présente"
    DocList.Close
    Validé = False
    Valider.Enabled = True
End Sub
 
 
Function Alimente(NomDeLaListe As String, LaListe As ComboBox) As Boolean
    Alimente = False
    With DocList
        Dim Tableau, Cellule, Liste, Texte
        For Each Tableau In .Tables
            Liste = Tableau.Columns(1).Cells(1) ' la première ligne du tableau contient le nom de la liste
            Liste = Left(Liste, Len(Liste) - 2) ' retire la marque de fin de paragraphe et celle de fin de cellule
            If Liste = NomDeLaListe Then    ' si le nom de la liste correspond au tableau
                LaListe.Clear   ' on vide la liste
                For Cellule = 2 To Tableau.Columns(1).Cells.Count   ' on balaye le tableau
                    Texte = Tableau.Columns(1).Cells(Cellule).Range.Text
                    Texte = Left(Texte, Len(Texte) - 2)
                    If Cellule = 2 Then
                        LaListe.Text = Texte    ' la deuxième ligne contient 'Choisir dans la liste'
                                                ' elle est placée comme texte de la liste
                    Else
                        LaListe.AddItem Texte    ' le reste est ajouté dans la partie déroulante
                    End If
                Next Cellule
                Alimente = True
                LaListe.Enabled = True
                Exit Function
            End If
        Next Tableau    ' si le nom dans le tableau ne correspond pas au nom de la combobox
                        ' on passe au tableau suivant
    End With
End Function
Pour le moment cela marche mais je dois appeler ma fonction de remplissage pour chaque liste. C'est lourd et surtout il faut modifier le code VBa à chaque ajout ou suppression d'une combobox

Quelquechose du genre
Code :
1
2
3
4
5
 
Erreur=0
for each Cbx in ThisDocument.fields
   Erreur=Alimente(Cbx.Name,Cbx)
next Cbx
serait plus pratique...... si Cbx.Name fonctionnait

_________________
Cordialement
JC
nerim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 18h42   #2
Membre habitué
 
Avatar de wape
 
Inscription : février 2003
Messages : 90
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 90
Points : 101
Points : 101
Bonsoir,

Essasye de passer par la collection InlineShapes :

Code :
1
2
3
4
5
6
7
Dim oCtl As InlineShape
 
For Each oCtl In ThisDocument.InlineShapes
   If TypeName(oCtl.OLEFormat.Object) = "ComboBox" Then
      MsgBox oCtl.OLEFormat.Object.Name
   End If
Next oCtl
wape
wape est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 19h01   #3
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
J'ai déjà vu cette question ¿?
PS : j'aime mieux celui-ci !

Ces contrôles sont des champs.
Effectivement, tu as raison, j'avais fait fausse route, ils n'ont pas de Name.


Code :
ActiveDocument.Fields(1).Code
On peut peut-être se baser sur le contenu du code pour faire le tri ?

Qu'en penses-tu ?
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 21h48   #4
Invité de passage
 
Inscription : janvier 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 5
Points : 2
Points : 2
Par défaut Problème de ComboBox résolu

Bonjour et merci à vous deux

J'avais essayé la collection InlineShapes mais ça n'avait pas marché.

Je viens d'essayer le code de wape : ça marche nickel (je pense que je n'avais pas utilisé OLEFormat.Object)

Donc mon problème est résolu

Pour Heureux-Oli : la propriété code donne la même valeur pour toutes les combosbox "CONTROL Forms.ComboBox. 1 /s" ??? Donc inutilisable pour identifier les contrôles.

Merci encore

Cordialement

Jean
nerim est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h07.


 
 
 
 
Partenaires

Hébergement Web