Bonjour,
Je souhaiterai lister dans une table l'ensemble des etiquettes de tous les contrôles de tous les formulaires de ma base de données. L'idée étant de permettre un remplacement systématique de tout quand on passe a une autre langue.
Je parviens sans problème à lister toutes les étiquettes qui ne sont rattachées à aucun controle. Mais dès que j'ai une listbox ou un textbox (je souhaite accéder au nom et au caption de l'étiquette ratachée au contrôle), ma routine se plante sur CStr(Ctrl.Caption).
J'ai essayé en remplacant Ctrl.ControlType = acListBox par Ctrl mais ça ne change rien
Ca doit être trivial mais je ne vois pas, même après moultes recherches sur le forum. Auriez-vous une idée, svp?
Je vous remercié.
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 Command0_Click() Dim oDb As DAO.Database Dim obj As AccessObject Dim frm As Form Dim Ctrl As Access.Control Dim rst As DAO.Recordset Set oDb = CurrentDb 'Lance la création de la table dico si besoin CreerTableDico oDb 'ouvre un recordset sur la table, il faut qu'elle soit créée au préalable Set rst = oDb.OpenRecordset("tblFrmctrl") For Each obj In Application.CurrentProject.AllForms 'Demande confirmation pour le formulaire en question 'Select Case MsgBox("Formulaire : " & obj.Name, vbQuestion + vbYesNoCancel) 'si OUI 'Case vbYes 'Ouvre le formulaire en mode création DoCmd.OpenForm obj.Name, acDesign Set frm = Forms(obj.Name) 'Applique le propriété à chaque controle For Each Ctrl In frm.Controls If Ctrl.ControlType = acListBox And Ctrl.Parent.Name = frm.Name Then 'Enrichit la table du dictionnaire rst.AddNew rst.Fields("FrmName") = CStr(Ctrl.Parent.Name) rst.Fields("CtrlName") = CStr(Ctrl.Name) rst.Fields("CaptionFr") = CStr(Ctrl.Caption) rst.Fields("CaptionNl") = "xxxxx" rst.Update End If Next Ctrl 'Enregistre et ferme le formulaire DoCmd.Close acForm, obj.Name, acSaveYes 'Si annuler alors, quitter le traitement 'Case vbCancel ' Exit Sub 'End Select Next obj rst.Close Set rst = Nothing Set oDb = Nothing End Sub
Partager