begin process at 2010 02 09 23:39:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > CREER DYNAMIQUEMENT UN FORMULAIRE

CREER DYNAMIQUEMENT UN FORMULAIRE


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Classé sous :form, dynamique Niveau :Débutant Date de création :27/09/2004 Vu :13 807

Auteur : trayak

Ecrire un message privé
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



 Sources du même auteur

GESTION D'OUVERTURE D'UNE BASE DONNÉE
CONNECTION À UN PROJET

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) GESTION DE PARC AUTOMOBILE AVEC SÉRIALISATION par guyr07
Source avec Zip Source avec une capture Source .NET (Dotnet) FICHIERS_CACHÉS_LECTURE_SEULE par Le Pivert
Source avec Zip Source avec une capture CHANGEUR D'ICONES par djgab21
Source .NET (Dotnet) DIRECTDISKACCESS par XelectroX
Source avec Zip Source avec une capture UTILITAIRE WAV, MID ET MP3 par SnkVrt

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) JEU DE PENDU (COUIC 1 DE +) par tresorsdevie
Source avec une capture Source .NET (Dotnet) CREATION DE CONTROLS DYNAMIQUE + DEPLACEMENT ET REDIMENTION ... par tresorsdevie
Source avec Zip Source avec une capture Source .NET (Dotnet) JEU PENDU (WIN FORM) par ahmed402
Source avec Zip Source avec une capture Source .NET (Dotnet) CRÉATION DE FORM ET DE CONTRÔLES par gillardg
Source avec Zip Source avec une capture Source .NET (Dotnet) AFFICHER DES BOUTONS DYNAMIQUEMENT SUR VOTRE FORM par ManuAntibes

Commentaires et avis

Commentaire de Saros le 27/09/2004 22:21:07

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

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

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 :-)

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...

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

Commentaire de dragon le 29/09/2004 14:15:09

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

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

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.

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

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

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

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales