bonjour,
voilà quelques jours que je cherche à réaliser dynamiquement un "arbre" du style "cause/conséquence" à l'aide de TextBox avec des données provenant d'une requête.
Je suis depuis hier ,grâce à pleins d'idées trouvées sur ce même forum, presque arrivé à mes fins...
Seulement je n'arrive pas à définir dynamiquement les valeurs de mes TextBox.
Je procède comme suit:
Je choisi une FAUTE dans une liste déroulante (cmbFAUTE) sur un formulaire, ensuite je clique sur le bouton Btn.
Cela ouvre le Formulaire FormA (déjà existant mais vide) en mode création et crée des controles suivant les données parcourues par le recordset.
Je vous soumet deux codes qui fonctionnent partiellement correctement:
Le premier m'affiche correctement les TextBox sur sur fomulaire, mais je n'arrive pas à affecter les sources aux contrôles.
Le second code, m'affiche une TextBox par colonne (CAUSE et CONSEQUENCE) de ma requête et je vois bien les valeurs, mais je dois passer d'un enregistrement à l'autre car il n'y a qu'un enristrement par "page"... alors que je souhaite avoir toutes les données sur le même "visuel" afin d'obtenir ma structure en "arbre"
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 Private Sub Btn_Click() Dim Db As DAO.Database Dim rst1 As DAO.Recordset Dim rst2 As DAO.Recordset Dim i, j, k As Integer Dim Controle As Control Set Db = CurrentDb() 'Ouvrir le formulaire en mode création DoCmd.OpenForm " FrmA", acDesign Set rst1 = Db.OpenRecordset("SELECT DISTINCT [CAUSE] FROM qryCauseConsequence WHERE FAUTE= '" & Me.cmbFAUTE & "'") i = 1 k = 1 While Not rst1.EOF 'Créer le contrôle i Set Controle = CreateControl("FrmA", acTextBox) With Controle 'lui affecter un nom .Name = "txt_ CAUSE " & i 'le positionner sur le formulaire .Left = 2000 .Top = 100 + j End With Set rst2 = Db.OpenRecordset("SELECT [CONSEQUENCE] FROM qryCauseConsequence WHERE [CAUSE]= '" & rst1("CAUSE") & "'") While Not rst2.EOF 'Créer le contrôle k Set Controle = CreateControl("FrmA ", acTextBox) With Controle 'lui affecter un nom .Name = "txt_ CONSEQUENCE " & k 'le positionner sur le formulaire .Left = 4000 .Top = 100 + j End With j = j + 520 rst2.MoveNext k = k + 1 Wend rst2.Close rst1.MoveNext i = i + 1 Wend rst1.Close Set rst1 = Nothing Set rst2 = Nothing Set Db = Nothing End Sub
J'aimerais savoir comment affecter une source dynamiquement à chaque contrôle en utilisant le premier code.
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 Private Sub Btn_Click() Dim Db As DAO.Database Dim rst1, rst2 As DAO.Recordset Dim i, j, k As Integer Set Db = CurrentDb() 'Ouvrir le formulaire en mode création DoCmd.OpenForm "FrmA", acDesign Set rst1 = Db.OpenRecordset("SELECT DISTINCT [CAUSE] FROM qryCauseConsequence WHERE FAUTE= '" & Me.cmbFAUTE & "'") Dim Controle(0 To 100) As Control i = 1, k = 1, j = 1000 While i <= rst1.Fields.Count 'Créer le contrôle i Set Controle(i) = CreateControl("FrmA", acTextBox) With Controle(i) .Name = "txt_ CAUSE" & i .Left = 2000 .Top = 100 + j .ControlSource = rst1.Fields(i - 1).Name End With Set rst2 = Db.OpenRecordset("SELECT [CONSEQUENCE] FROM qryCauseConsequence WHERE [CAUSE]= '" & rst1("CAUSE") & "'") While k < rst2.Fields.Count 'Créer le contrôle k Set Controle(k) = CreateControl("FrmA", acTextBox) With Controle(k) .Name = "txt_ CONSEQUENCE" & k .Left = 4000 .Top = 100 + j .ControlSource = rst1.Fields(k - 1).Name End With j = j + 520 rst2.MoveNext k = k + 1 Wend rst2.Close rst1.MoveNext i = i + 1 Wend rst1.Close Set rst1 = Nothing Set rst2 = Nothing Set Db = Nothing End Sub
En gros comment dire que txt_CAUSEi= valeur i de la colonne CAUSE et idem pour txt_CONSEQUENCE= valeur k de la colonne CONSEQUENCE.
Partager