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/02/2008, 13h15   #1
Invité de passage
 
Inscription : février 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 5
Points : 1
Points : 1
Par défaut listbox en cascade provenant d'access

Voici mon problème :
A l’ouverture de mon fichier.doc, j’ai un Userform qui apparaît avec plusieurs listbox(ou combobox).
•listbox1 pour le nom
•listbox2 pour le prenom
•listbox3 pour le code postal

Je souhaiterais que les données apparaissent en cascade en fonction des choix de l’utilisateur. Les données se trouvant dans une base access. La table destinataires se compose comme ceci :

Nom Prénom CP Rue Localité
Dupont Pierre 1000 rue de la station Bruxelles
Dupont Pierre 4000 rue de la gare Liege
Dupont Pierre 3000 rue de l’arbre Namur
Dupont Marcel 1000 rue du marais Bruxelles
Dupuis Marcel 1000 rue des champs Bruxelles
Dupuis Pierre 1000 rue du roi Bruxelles
Dupuis Paul 1000 rue du prince Bruxelles


Quelqu’un pourrait-il m’aider, je bloque à la seconde listbox. Merci d’avance
air023 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2008, 17h18   #2
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
Tu dois utiliser du DAO pour extraire les données des tables.

Le contenu de ton ListBox1 doit servir de critère pour le second et les deux premiers pour le troisième.
__________________
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/02/2008, 18h42   #3
Invité de passage
 
Inscription : février 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 5
Points : 1
Points : 1
Par défaut voici mon code pour la listbox1

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
Private Sub UserForm_Initialize()
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\fichier.mdb;"
rst.Open "SELECT [table.Nom] FROM table GROUP BY [table.Nom] ORDER BY [table.Nom]; ", cnn, adOpenStatic
    rst.MoveFirst
    With Me.combobox1
        .Clear
        Do
            .AddItem rst![table.Nom]
            rst.MoveNext
        Loop Until rst.EOF
    End With
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
    Exit Sub
End Sub

Private Sub combobox1_Change()
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\fichier.mdb;"
rst.Open "SELECT [table.Nom],[table.prenom] FROM table WHERE [table.Nom]='" & Me.combobox1.Value & "' ORDER BY [table.prenom], cnn, adOpenStatic"

    rst.MoveFirst
    With Me.combobox2
        .Clear
        Do
            .AddItem rst![table.prenom]
            rst.MoveNext
        Loop Until rst.EOF
    End With
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
    Exit Sub
End Sub
air023 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2008, 19h12   #4
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
Perso, lorsque je travaille avec Access, je préfère utiliser du DAO.

Code :
1
2
3
4
5
6
7
8
9
10
Dim rs as SAO.Recordset
Dim sql as String
 
sql = "Select Nom From Table GroupBy Nom Orderby Nom"
set rs = CurrebtDB.OpenRecordset(sql)
While not rs.EOF
    Me.Combo1.additem  rs.fileds("Nom")
    rs.moveNext
Wend
.....
On récupère les valeurs pour le premier combo !

Pour le second combo, on possède une valeur à utiliser en critère.

C'est la clause SQL qui va changer

Code :
sql = "Select table.Nom, table.Prenom Form Table Where Nom = '" & Me.Combo1 & "';"
Pour le dernier combo, on va utiliser deux critères.
__________________
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/02/2008, 20h07   #5
Invité de passage
 
Inscription : février 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 5
Points : 1
Points : 1
Ok merci pour ta réponse, je teste cela demain sur mon fichier et je te tiens au courant. Bonne soirée
air023 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 14h15   #6
Invité de passage
 
Inscription : février 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 5
Points : 1
Points : 1
Par défaut MERCI mon problème est solutioné, voici mon code



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
Private Sub ComboBox1_Change()
Me.ComboBox2.Clear
Dim db As DAO.database
Dim rq_ent As DAO.Recordset
Set db = opendatabase("I:\courrier\combobox\fichier.mdb")
Set req_ent = db.OpenRecordset("SELECT [table.NOM],[table.PRENOM] FROM [Table] GROUP BY [table.NOM], [table.PRENOM] HAVING [table.NOM] = '" & Me.ComboBox1.Value & "' ORDER BY [table.NOM], [table.PRENOM];")
'Si des enregistrements correspondent à la requête alors
If req_ent.RecordCount > 0 Then
'se placer sur le premier enregistrement
req_ent.MoveFirst
'Tant que ce n'est pas la fin des enregistrements
Do While req_ent.EOF = False
'ajouter dans la combo l'enregistrement en cours
ComboBox2.AddItem req_ent![table.PRENOM]
'passer à l'enregistrement suivant
req_ent.MoveNext
'refaire
Loop
'sinon
Else
'mettre dans la zone de texte un message qui signale qu'il n'y a pas d 'enregistrements
ComboBox2.Text = "inconnu"
'fin si
End If
End Sub
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
Private Sub UserForm_Initialize()
On Error GoTo UserForm_Initialize_Err
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=I:\courrier\combobox\fichier.mdb;"
rst.Open "SELECT [table.NOM] FROM [table] GROUP BY [table.NOM] ORDER BY [table.NOM]; ", cnn, adOpenStatic
    rst.MoveFirst
    With Me.ComboBox1
        .Clear
        Do
            .AddItem rst![table.NOM]
            rst.MoveNext
        Loop Until rst.EOF
    End With
UserForm_Initialize_Exit:
    On Error Resume Next
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
    Exit Sub
UserForm_Initialize_Err:
    MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!"
    Resume UserForm_Initialize_Exit
End Sub
air023 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 03h39.


 
 
 
 
Partenaires

Hébergement Web