VBA - ACCESS 2002 SP3 - Création formulaire - Help !!!!!

cs_trymeup Messages postés 6 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 9 novembre 2004 - 8 nov. 2004 à 00:21
cs_trymeup Messages postés 6 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 9 novembre 2004 - 8 nov. 2004 à 15:03
Bonjour, je suis vraiment novice en VBA et j'ai un soucis que je n'arrive pas à régler.

J'ai une requête qui me renvoie des résultats avec un nombre de colonnes qui peut varier. Donc impossible de l'afficher dans un formulaire figé. Aussi, j'ai pas mal recherché de code solutionner ce problème, et dans les sources j'ai trouvé le code suivant :

http://www.vbfrance.com/code.aspx?ID=26450

Dans le principe c'est tout à fait ce qu'il me faut. Seulement voila :

1) Je n'ai pas les composants DAO dans mon Access 2002
(normal ?) mais que ADO

2) ctl.DeleteControl "F_AFFICHAGE", ctl.Name ne marche pas chez moi !

Il faudrait adapter ce bout de code en ADO, ce dont je suis incapable, et faire en sorte que cette fonction de suppression des controles du formulaire fonctionne

Merci bcp de votre aide

3 réponses

inthecorner Messages postés 48 Date d'inscription mardi 10 décembre 2002 Statut Membre Dernière intervention 22 novembre 2004
8 nov. 2004 à 10:24
Quand tu es dans Microsoft Visual Basic..
Tu vas dans Outils--->Références.
Et tu ajoutes Microsoft DAO 3.6 Object Library

Amitiés :)
0
cs_trymeup Messages postés 6 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 9 novembre 2004
8 nov. 2004 à 14:22
Merci pour le DAO, effectivement j'avais pas du tout cherché ca au bon endroit...

Bon j'ai adapté le code mentionné plus haut à mes exigences :

Public Function create_form(sql As String) As Boolean
Dim frm As Form
Dim rst As DAO.Recordset
Dim Db As DAO.Database
Set Db = Application.CurrentDb
Dim ctl As Control
Dim i, j As Integer
' --Ouvrir le formulaire en mode modification et caché
DoCmd.OpenForm "Forml_X_Etats", acDesign, , , , acHidden
' --suppression de tous les contrôles avant de les créer de nouveau
For Each ctl In Forms!Forml_X_Etats.Controls
        ctl.DeleteControl "Forml_X_Etats", ctl.Name
Next ctl
' --Source de données de mon formulaire
Forms![Forml_X_Etats].RecordSource = sql
Set rst = Db.OpenRecordset(sql)
' --nous ne pensons pas que vous aurez plus de 100 contrôles
Dim controle(0 To 100) As Control
' --Création des contrôles
If rst.RecordCount <> 0 Then
    i = 0
    j = 1000
    While i < rst.Fields.Count
    
    ' -- Créer le contrôle i
    Set controle(i) = CreateControl("Forml_X_Etats", acTextBox)
    ' --lui affecter un nom
    controle(i).Name = rst.Fields(i).Name
    ' --le positionner sur le formulaire
    controle(i).left = 100 + j
    ' --Définir sa largeur
    controle(i).Width = 1150
    ' --source de données de ce contrôle
    controle(i).ControlSource = rst.Fields(i).Name
    
    i = i + 1
    j = j + 1150
    Wend
End If

rst.Close
Set rst = Nothing
Set Db = Nothing
' --Sauvegarder le formulaire
DoCmd.Save acForm, "Forml_X_Etats"
DoCmd.Close acForm, "Forml_X_Etats"
End Function



Le code fonctionne si le formulaire initial est vide. Seulement s'il comporte deja des controles, la fonction pour les supprimer ne marche pas :

ctl.DeleteControl "Forml_X_Etats", ctl.Name/i ne marche pas et me donne une erreur 438 "propriété ou méthode non gérée par cet objet"

Par quoi la remplacer pour vider mon formulaire ?

Deuxième petite chose, j'aimerai que le format des contrôles que j'ajoute soit le format "standard" (nombres avec le séparateur de millier en blanc), mais je ne connais pas la syntaxe a ajouter.

Merci
0
cs_trymeup Messages postés 6 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 9 novembre 2004
8 nov. 2004 à 15:03
heu... je vais me répondre tout seul :-)

j'ai résolu mon problème pour effacter les controles existant, il faut simplement modifier la fonction. De plus, j'ajoute qu'utilisée telle quelle, elle ne fait pas ce qu'on lui demande: en effet, le fait de supprimer le controle dans la boucle For Each, fait sauter access au controle suivant. Donc la boucle supprime un controle sur deux. Voici le code que j'ai mis pour corriger tout cela, et qui fonctionne tant bien que mal:

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

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

While i = 1
GoTo boucle:
Wend


Merci pour ceux qui voudront bien répondre a ma deuxieme question, a savoir comment affecter le format "standard" a un controle.
0
Rejoignez-nous