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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| Public Sub creaChamp(SQL As String)
Dim rs As DAO.Recordset
Dim txtX As TextBox, fldX As Field, ctrlX As Control, labelX As Label
Dim frmName As String
Dim i As Integer, flgError As Boolean
i = 300
frmName = "frmSub"
DoCmd.OpenForm frmName, acDesign, , , , acHidden 'On ouvre en mode Création et caché
'Efface tous les champs existrants
'On va balayer les contôles (For... Next) et le supprimer
'Cependant quand on supprime un contrôle, la collection est modifiée !
'On va donc boucler avec Do until et refaire le balayage jusqu'à ce qu'il n'y ait plus de contrôle
Do Until Application.Forms(frmName).Controls.Count = 0
For Each ctrlX In Application.Forms(frmName).Controls
DeleteControl frmName, ctrlX.Name 'Suppression du contrôle
Next ctrlX
Loop
'Fin effaçage
Set rs = CurrentDb.OpenRecordset(SQL)
For Each fldX In rs.Fields
Set txtX = Access.CreateControl(frmName, acTextBox, , "Détail", fldX.Name) 'Création d'un textBox
txtX.Name = fldX.Name 'Met le nom du controle = au nom du champ
Set labelX = Access.CreateControl(frmName, acLabel, , txtX.Name, fldX.Name, 150, i, 1000, 300) 'Création d'une étiquette associée au champ
labelX.Name = "Label_" & fldX.Name
'Met l'étiquette avec la légende du champ ou si erreur avec le nom du champ
flgError = False
On Error GoTo Err_Label
labelX.Caption = fldX.Properties("Caption") 'récupère la légende du champ
On Error GoTo 0
If flgError Then labelX.Caption = fldX.Name
txtX.Move labelX.Left + labelX.Width + 75, i, 1000, 300 'Met le champ à droite de l'étiquette
i = i + 600
Next fldX
DoCmd.Save acForm, frmName
Exit Sub
Err_Label:
flgError = True
Resume Next
End Sub |
Partager