Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CREER DYNAMIQUEMENT UN FORMULAIRE


Information sur la source

Catégorie :Fichier / Disque Classé sous : form, dynamique Niveau : Débutant Date de création : 27/09/2004 Vu : 12 565

Note :
4,5 / 10 - par 2 personnes
4,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

Cette fonction permet de créer un formulaire dynamique et de le mettre en page, d'ajouter aussi des évenements, ... il est conseillé d'utiliser un formulaire existant au lieu de créer un nouveau formulaire parce que Access aura du mal dans le cas de la création d'un nouveau formulaire à voir ce formulaire récemment crée. Dans cet exemple nous utilisons un formulaire existant soit "F_AFFICHAGE" que nous modifions à notre guise.
 

Source

  • Public Function create_form(sql As String) As Boolean
  • Dim frm As Form
  • Dim rst As Recordset
  • dim ctl as control
  • dim i, j as integer
  • ' --Ouvrir le formulaire en mode modification et caché
  • DoCmd.OpenForm "F_AFFICHAGE", acDesign
  • , , , , acHidden
  • ' --suppression de tous les contrôles avant de les créer de nouveau
  • For Each ctl In Forms!F_AFFICHAGE.Controls
  • ctl.DeleteControl "F_AFFICHAGE", ctl.Name
  • Next ctl
  • ' --Source de données de mon formulaire
  • Forms![F_AFFICHAGE].RecordSource = sql
  • Set rst = Currentdb.OpenRecordset(sql)
  • ' --nous ne pensons pas que vous aurez plus de 100 contrôles
  • Dim controle(1 To 100) As Control
  • ' --Création des contrôles
  • If rst.RecordCount <> 0 Then
  • i = 1
  • j = 1000
  • While i < rst.Fields.Count
  • ' -- Créer le contrôle i
  • Set controle(i) = CreateControl("F_AFFICHAGE", acTextBox)
  • ' --lui affecter un nom
  • controle(i).Name = "TXT_" & rst.Fields(i).Name
  • ' --le positionner sur le formulaire
  • controle(i).Left = 100 + j
  • ' --Définir sa largeur
  • controle(i).Width = 1150
  • ' --Définir sa couleur de fond
  • controle(i).BackColor = "14742270"
  • ' --Définir son effet visuel
  • controle(i).SpecialEffect = 0
  • controle(i).BackStyle = 0
  • controle(i).BorderStyle = 1
  • ' --source de données de ce contrôle
  • controle(i).ControlSource = rst.Fields(i).Name
  • i = i + 1
  • j = j + 1150
  • Wend
  • End If
  • ' --Création des entêtes
  • j = 1000
  • i = 1
  • While i < rst.Fields.Count
  • Set controle(i) = CreateControl("F_AFFICHAGE", acTextBox, acHeader)
  • controle(i).Name = "HD_" & rst.Fields(i).Name
  • controle(i).Left = 100 + j
  • controle(i).Width = 1150
  • controle(i).Height = 700
  • controle(i).BackColor = "10081789"
  • controle(i).SpecialEffect = 0
  • controle(i).BorderStyle = 1
  • controle(i).TextAlign = 2
  • controle(i).FontWeight = 700
  • controle(i).ControlSource = "='" & rst.Fields(i).Name & "'"
  • i = i + 1
  • j = j + 1150
  • Wend
  • rst.close
  • set rst = Nothing
  • ' --Sauvegarder le formulaire
  • DoCmd.Save acForm, "F_AFFICHAGE"
  • End Function
Public Function create_form(sql As String) As Boolean
Dim frm As Form
Dim rst As Recordset
dim ctl as control
dim i, j as integer
' --Ouvrir le formulaire en mode modification et caché
DoCmd.OpenForm "F_AFFICHAGE", acDesign
, , , , acHidden
' --suppression de tous les contrôles avant de les créer de nouveau
For Each ctl In Forms!F_AFFICHAGE.Controls
        ctl.DeleteControl "F_AFFICHAGE", ctl.Name
Next ctl
' --Source de données de mon formulaire
Forms![F_AFFICHAGE].RecordSource = sql
Set rst = Currentdb.OpenRecordset(sql)  
' --nous ne pensons pas que vous aurez plus de 100 contrôles
Dim controle(1 To 100) As Control
' --Création des contrôles
If rst.RecordCount <> 0 Then
    i = 1
    j = 1000
    While i < rst.Fields.Count
    ' -- Créer le contrôle i
    Set controle(i) = CreateControl("F_AFFICHAGE", acTextBox)
    ' --lui affecter un nom
    controle(i).Name = "TXT_" & rst.Fields(i).Name
    ' --le positionner sur le formulaire
    controle(i).Left = 100 + j
    ' --Définir sa largeur
    controle(i).Width = 1150
    ' --Définir sa couleur de fond
    controle(i).BackColor = "14742270"
    ' --Définir son effet visuel
    controle(i).SpecialEffect = 0
    controle(i).BackStyle = 0
    controle(i).BorderStyle = 1
    ' --source de données de ce contrôle
    controle(i).ControlSource = rst.Fields(i).Name
    i = i + 1
    j = j + 1150
    Wend
End If
' --Création des entêtes
j = 1000
i = 1
While i < rst.Fields.Count
        Set controle(i) = CreateControl("F_AFFICHAGE", acTextBox, acHeader)
        controle(i).Name = "HD_" & rst.Fields(i).Name
        controle(i).Left = 100 + j
        controle(i).Width = 1150
        controle(i).Height = 700
        controle(i).BackColor = "10081789"
        controle(i).SpecialEffect = 0
        controle(i).BorderStyle = 1
        controle(i).TextAlign = 2
        controle(i).FontWeight = 700
        controle(i).ControlSource = "='" & rst.Fields(i).Name & "'"
        i = i + 1
        j = j + 1150
Wend
rst.close
set rst = Nothing
' --Sauvegarder le formulaire
DoCmd.Save acForm, "F_AFFICHAGE"
End Function

Commentaires et avis

signaler à un administrateur
Commentaire de Saros le 27/09/2004 22:21:07

Met-le dans la catégorie VBA...

signaler à un administrateur
Commentaire de Saros le 27/09/2004 22:22:34

Enfin sans vouloir t'offenser ni quoi que ce soit, mais en voyant comme ça on a tendance à croire que c'est du VB tout court et bon...
Enfin c'est comme tu veux

signaler à un administrateur
Commentaire de Inekman le 28/09/2004 12:18:25

le "DoCmd", c'est bien dans Access que je le trouve.

Dans Visual Basic 6 j'ai jamais eu l'occasion de l'utiliser et je l'ai jamais vu non plus d'ailleurs :-)

signaler à un administrateur
Commentaire de Saros le 28/09/2004 12:57:42

C'est un peu ça qui m'a perturbé, au départ je savais plus trop de quoi il était question dans le code...

signaler à un administrateur
Commentaire de dragon le 29/09/2004 14:14:01

justement ce qu'il va me faloir dans 1 ou 2 mois pour mon projet a ma job.

Faudra juste améliorer un peu et le convertir en .Net, mais bon, la base est la

faudrais pouvoir personnaliser un peut (logo et mise en forme personnaliser, qui sera constante pour tout les formulaire)

en plus faudrais faire des catégories ou regroupement de donnée. Mais bon, dès que je serai rendu la, je vais le faire, a moins que ton projet est pas fini et que c'était dans tes intention de continuer ton créateur de formulaire

signaler à un administrateur
Commentaire de dragon le 29/09/2004 14:15:09

je suis d'accord, c'est du VBA et non fichier/disque

signaler à un administrateur
Commentaire de trymeup le 08/11/2004 15:09:38

Merci bcp pour ce code qui m'a bien aidé dans le developpement d'un projet sur access. Toutefois, j'ai eu qq petits soucis avec l'effacement préalable des controles dans le formulaire. En effet, la fonction "ctl.DeleteControl "F_AFFICHAGE", ctl.Name
" ne fonctionnais pas chez moi. De plus l'effacement d'un controle dans la boucle for each, fait "sauter" Access d'un controle, d'où un controle sur deux effacé. J'ai posté mes solutions dans le topic suivant :

http://www.vbfrance.com/forum.v2.aspx?ID=328430

Salutations

signaler à un administrateur
Commentaire de cotmar le 18/05/2005 11:08:38

Salut amigos,
Ce code est une vraie aubaine.
J'ai eu la même difficulté que la personne précédente en fait.
Sinon, j'aimerais savoir comment créer objets (différents des texbox) qui soient en fonction des types de valeurs qu'il charge de la base (par exemple une checkbox si il trouve du bouléen...).
J'ai peut être un début de solution, mais c'est pas tellement satisfaisant à ce qu'il me semble.
Qu'en dites vous ?
A bientôt.
Marco.

signaler à un administrateur
Commentaire de observatoire le 03/05/2006 10:27:27

Bonjour,
Je crée une interface utilisateur sur VBA Access et je souhaite dans un formulaire (Form1)créer un sous-formulaire (Form2) affichant les données d'une requête. Je me suis servie de ce code pour créer le sous-formulaire, et ça marche plutôt bien, avec quelques modifications :

' --suppression de tous les contrôles avant de les créer de nouveau
boucle:
i = 0

For Each ctl In Forms!F_AFFICHAGE.Controls
i = 1
DeleteControl "F_AFFICHAGE", ctl.Name
Next ctl

While i = 1
GoTo boucle:
Wend

ET

' --nous ne pensons pas que vous aurez plus de 100 contrôles
Dim controle(0 To 100) As Control


J'ai juste un petit problème: avec ce code, mon sous-formulaire (Form2) serait défini par défaut en mode création (je n'ai pas identifié le pourquoi du comment!) ce qui empêche donc l'ouverture du formulaire (Form1) en mode formulaire.

Si vous savez comment régler ce problème...

à bientôt

signaler à un administrateur
Commentaire de drari le 03/05/2007 17:28:15

Petites incoherences dans le code
il faut insérer l'égalité aussi sinon il manquera toujours un champs au formulaire
While i <= rst.Fields.Count

signaler à un administrateur
Commentaire de drari le 03/05/2007 17:36:20

Autres remarque le count des fields en VBA n'est pas le même que celui des controles
Les controles commencent bien à 1 d'ou le i = 1
par contre dans un recordset (rst) le count commence à 0 donc i-1 dans ce cas-ci
controle(i).Name = "TXT_" & rst.Fields(i-1).Name

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Gestion dynamique de form [ par fieldy8 ] Bonjour,je desirerai faire une gestion dynamique de formj'ai une form et une sous-form ma sous-form est de type tableau mais je voudrai pouvoir choisi MDI Chargement de form dynamique ??? [ par pcpunch ] Slt je vais essayer d etre clair, car suis un peu crever lolJe dev un petit editeur d'image, g une formMdi et un form1 qui contien un picturebox afin Form dynamique [ par Frans ] Bonjour,J'aimerais créer un formulaire dynamique. Je m'explique : j'ai un TreeView sur la gauche de mon écran, et il faudrait que la partie droite soi creation dynamique de form [ par yannn ] J'ai pu voir qu'il etait possible de rajouter de maniere dynamique ( en cliquant sur un controle ) des text box, des list box, des file box ... avec l Création dynamique picturebox [ par servlinks ] Bonjour,je sais qu'il y a eu bcp de réponse à une question similaire à la mienne sauf que j'ai quelques petites variantes.J'aimerais pouvoir créer des Liste dynamique de boutons dans un form [ par renaud93 ] Mon souhait serait de cr&#233;er une liste de boutons par prog dans un formulaire. Le nombre de boutons n&#146;est pas connu &#224; l&#146;avance, il Excel Dynamique : Mise a jour automatique d'une Form. [ par Popol005 ] Bonjour a tous,J'aimerais savoir s'il est possible de raffraichir automatiquement une form.En effet, j'ai un fichier excel qui est mis a jour automati Access + impression form graph croisé dynamique [ par bossun ] salut, j'ai une appli Access qui tourne plutot bien... quand un utilisateur veut imprimer un formulaire graphique Corisé dynamique, access m'affiche l Form dynamique sous VBA dans Access [ par ssmiling ] Dans un formulaire dynamique, j'ai plusieurs boutons de commande &#224; qui je dois attribuer (au travers d'une boucle) dans la propri&#233;t&#233; .o


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.