Liste déroulante de Tables - VB/VBA/VBS - Programmation
Marsh Posté le 29-04-2010 à 13:59:24
Hello
Déjà pour recuperer les tables, pas besoin de VBA.
Tu filtres la table MSysObjects, tu recuperes le valeur du champ Name où le type = 1
Comme tu n'as qu'un message a ton actif, on verra si tu reponds pour la partie VBA : recuperer les noms des champs de la table piochée.
Cordialement
Marsh Posté le 29-04-2010 à 14:33:23
Private Sub Form_load()
Dim t As TableDef, strTable As String
For Each t In CurrentDb.TableDefs
If Left(t.Name, 4) <> "MSys" And Left(t.Name, 1) <> "~" Then
strTable = strTable & t.Name & ";"
End If
Next t
Me.ListeTable.RowSourceType = "Liste valeurs"
Me.ListeTable.RowSource = strTable
End Sub
c'est la procédure que j'ai mise pour pouvoir sélectionner les tables d'ouvertes. Ca à l'air de marcher, ensuite on m'a dit que je pouvais créer une Table temporaire, une table de travail quoi, qui contiendrait un Champ "NomTable" qui recevrait le nom de la table sélectionner avec la liste déroulante du Formulaire, un champ "NomChamp" qui recevrait le nom des champs de la Table puis un champ "Position Champ" pour les garder dans l'ordre. je l'ai fais avec de l'aide voici le code :
Private Sub ListeTable_AfterUpdate()
Dim db As dao.Database: Set db = CurrentDb
db.Execute ("DELETE * FROM ParamSelectChamp;" ): 'Vide la table Param
Dim r As dao.Recordset: Set r = db.OpenRecordset("ParamSelectChamp" )
Dim t As dao.TableDef: Set t = db.TableDefs(Me.ListeTable): 'Pointe sur l'objet TableDef correspondant à la table choisie.
Dim f As dao.Field: For Each f In t.Fields: 'Parcours la liste des champs qui composent la table choisie
With r
.AddNew: 'Crée un nouvel enregistrement dans la table ParamSelectChamp
![NomTable] = t.Name: 'Met le nom de la table dans le champ [NomTable]
![NomChamp] = f.Name: 'Met le nom du champ dans le champ [NomChamp]
![PositionChamp] = f.OrdinalPosition: 'Met la position du champ dans le champ [PositionChamp]
.Update
End With
Next f
r.Close: Set r = Nothing: 'Ferme la ta table temporaire et libère la mémoire utilisée
db.Close: Set db = Nothing: 'Libère la mémoire utilisée
Me.Recalc: 'Force l'affichage du form à se mettre à jour.
End Sub
"ListeTable" c'est le nom de ma liste déroulante, et ça marche également ensuite pour recopier le nom des champs du Champ "NomChamp" de la Table Temporaire, dans les zones textes je sais pas trop comment m'y prendre...
Marsh Posté le 29-04-2010 à 14:35:34
alex'78 a écrit : |
Euh j'ai pas compris la question...?
Marsh Posté le 29-04-2010 à 14:56:01
C'est pas facile à expliquer sans image, en fait dans mon Formulaire Il y a une Liste déroulante qui au lieu de lister le contenu de Tables, liste les Tables elles-memes genre Table0 Table1 Table2 Table3, et donc je sélectionne la Table sur laquelle je souhaite faire des tris, ou des tests.
Et ces tris, j'aimerais les faire selon les Champs de ce Tables, j'ai donc mis des Zones de texte dans le Formulaire, qui sont là pour recevoir le Nom des champs de la Table que j'ai Sélectionné, et ça je sais pas trop comment le faire..
Si c'est toujours pas clair je link ce que j'ai posté, dessus il y a des images et les codes : http://www.developpez.net/forums/d [...] te-tables/
Voila j'espère que ce sera plus clair après avoir lu ça.
Marsh Posté le 29-04-2010 à 15:57:22
N'etant pas inscrit sur ce site, je n'ai pas accès aux images.
Donc comme je l'ai dit plus haut, pour recuperer les tables, pas besoin de VBA, une simple requete dans ta pioche pointant sur la table systeme MSysObjects et ca roule !
Pour ce faire :
Dans la propriété Contenu de ta pioche :
SELECT MSysObjects.Name, MSysObjects.Type FROM MSysObjects WHERE ((MSysObjects.Type)=1) ORDER BY MSysObjects.Name;
Tu auras donc les tables de ta base dans ta pioche, sans passer par du code.
Ensuite pour recuperer les champs de la table selectionné, il faut deja savoir combien tu as prevu de zone de texte. Si tu prevois 4 zones de textes, et que tu as 30 champs ca va poser souci.
Bref, donc ce que tu veux, c'est dans
TextBox1 mettre le champ1
TextBox2 mettre le champ2
TextBox3 mettre le champ3
Etc.
Alors, je pars du principe que :
ton formulaire se nomme Formulaire1
Tes TextBox se nomment TextBox1, TextBox2, TextBox3 etc.
Que ta pioche se nomme ListeTable
En mettant ce code ca fonctionne, je recupere bien, dans des zones de texte le nom des champs de mes tables
A mettre sur l'evenemment Apres MAJde ta pioche
Code :
|
La preuve en image
Marsh Posté le 29-04-2010 à 16:41:10
Haaaa ouai ça fonctionne très bien ça, merci beaucoup, juste une question, si aprèsMaj, il copie tout bien comme il faut mais qu'il me met la MsgBox avec "0" dedans, ça veut dire qu'il y a une erreur c ça ? si oui je vois pas laquelle :s
Marsh Posté le 29-04-2010 à 16:44:24
Oups j'ai oublié un truc...
Mea Culpa
En fait il passe dans erreur: vu que j'ai oublié de mettre un Exit Sub
Sans exit sub, il lit tout a la suite, donc il passe dans erreur, et affiche un message sans erreur, d'où le 0
Voila corrigé :
Code :
|
Marsh Posté le 30-04-2010 à 14:28:45
Merci ça marche très bien, après j'ai une question, c'est possible de lier un Formulaire se trouvant par exemple dans le groupe "Objets Non Associés" avec une Table se trouvant dans le groupe "Table" ?
Parce que dans mon formulaire, en face de chaqu'un des noms de Champ, il y a d'autres zones de texte ou listes déroulantes ou par exemple je choisi une Date "03/04/2005" un comparateur ">" pour avoir tt les dates supérieures à celle là ensuite je clique sur un bouton qui ouvre une requête, sauf que la requête se base sur la Table se trouvant dans le groupe "Table" donc bah je crois que ça pose problème lorsque je lui dis de lire les valeurs des zones de mon formulaire :s..
Si tu as une idée de la manière de procéder, peut-être qu'il y a + simple, peut-être que je me plante complètement, si tu as une solution ce serait super ^^
Marsh Posté le 30-04-2010 à 14:52:46
Fais un screen de ton formulaire car la je ne pige pas grand chose...
En fait ce que tu mets dans les textbox, va te permettre de faire des filtres ?
Marsh Posté le 30-04-2010 à 15:10:19
Oui en effet c'est pour filtrer, trier certaines informations de la base de données, ensuite en bas de ce Formulaire il a un bouton "Afficher Liste" j'ai rien mis dessus encore.
( on fait comment sur ce forum pour joindre une image ? le screen n'est pas sur un site x) )
Marsh Posté le 30-04-2010 à 15:44:08
Tu montes ton image sur un site, par exemple ici : http://imageshack.us/
Et tu la mets entre balise [img]
Marsh Posté le 28-04-2010 à 14:31:12
Bonjour,
J'ai une liste déroulante dans un Formulaire, sauf que j'aimerais ( en code VBA ) qu'au lieu qu'elle m'affiche par exemple, les différents enregistrement d'un champ, qu'elle m'affiche les différentes Tables ouvertes dans le Fichier Access où il y a le Formulaire que j'utilise.
Puis si je sélectionne une Table de la liste, que les noms des Champs de celle-ci s'affichent dans des zones textes distinctes ( ex : NomChamp1 dans ZoneTexte1, NomChamp2 dans ZoneTexte2 etc... )
J'utilise Access 2007 et cela fait seulement une semaine que j'ai découvert Access et le Visual Basic donc je suis un Débutant en la matière, mais je dois faire celà pour mon stage donc si vous avez des idées je suis preneur n'hésitez pas à bien détailler,
Merci d'avance pour votre aide
Coordialement, Alex