Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Formulaire 38 tables

11 réponses
Avatar
Perle-Marie
Bonjour aidez-moi svp!

J'ai monté une table avec 37 catégories d'emploi.

J'ai ensuite monté 37 tables avec 10 métiers pour chacune des catégories
d'emploi.

Je désire maintenant faire un formulaire avec une liste déroulante pour
choisir un des 37 métiers et ensuite une deuxième liste déroulante pour
sélectionner le métier se rapportant à la catégorie d'emploi sélectionnée.

Je veux que la deuxième liste déroulante contiennent seulement les métiers
se rapportant à la catégorie d'emploi sélectionnée dans la première liste
déroulante.

Comment fait-on? Merci infiniment.



--
Perle-Marie
La perle des Marie :-)

1 réponse

1 2
Avatar
Perle-Marie
Merci Argyro... le tout fonctionne :-)

Je vais passer pour une héroïne au bureau.

:-)


"Perle-Marie" a écrit dans le message de
news:
Bonjour Argyro... je travaille sur le formulaire...

Pourriez-vous me redonner le code à insérer en VBE svp. Dans votre dernier
message il apparaît dans une boîte de texte à ascenseur et on en voit pas
la
totalité. J'ai besoin du texte complet.

Merci.
--
Perle-Marie
La perle des Marie :-)



J'essaie ça et je vous reviens.

"Argyronet" a écrit dans le message
de
news:
Humm, c'est un peu normal, j'ai omis de vous préciser deux choses, dans
mon
élan...
Voici la solution détaillée et explicite est ici en texte et en image :
http://argyronet.developpez.com/office/access/selectitemlistAB/

Bonne fin d'année.
--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442 )
Empaquetage avec Runtime 2007 :
http://argyronet.developpez.com/office/access/runtime/2007/



J'y arrive toujours pas... je continue de bûcher....


"Argyronet" a écrit dans le
message
de
news:
Bonjour,
Je réponds donc à votre mail… Le principe est assez simple :
Vous devez avoir une table TBLcategories qui contient toutes les
catégories
possibles souhaitées. Dans cette table il existe 2 champs : le 1er
champ
définissant l'identifiant de la catégorie représentée par ce que
l'on
appelle
une clé primaire. Pour plus de commodité, nous appellerons ce champ
IDCategorie. Le préfixe ID définit le fait que ce champ est de type
Identifiant. Le 2ème champ NomCategorie, quant à lui, définit le nom
de
la
catégorie.
Vous devez ensuite avoir une seconde table TBLMétiers qui elle
contient
trois champs :
1 champ définissant l'identifiant du métier représenté par le nom
IDMetier,
1 second champ NomMétier qui représente le métier,
1 troisième champ qui définit la catégorie à laquelle le métier
appartient.
Plus de commodité, vous nommez ce champ avec le même nom que
l'identifiant
spécifié dans la table dont il dépend à savoir IDCategorie.
Par principe, ne mettez jamais d'accent dans les noms des champs.
En ce qui concerne les listes déroulantes, elles sont directement
fondées
sur chacune des tables. Une liste déroulante est composée de
colonnes.
Si
vous prenez l'Assistant Création de Contrôle et que vous lui
demandez
de
créer une liste déroulante sur l'une ou l'autre table, il va vous
proposer
par défaut de masquer la colonne numéro 1 puisqu'il sous-entend que
vous
avez
effectivement mis un identifiant UNIQUE représentant chacun des
enregistrements de la table en question. Il en est de même si vous
construisez le contrôle manuellement…
Pour la table TBLMétiers vous allez avoir une liste déroulante dont
la
propriété "Nbre colonnes" est égale à 3 et dont la propriété de
"Largeurs
colonnes" est égale à :
0cm ;5cm ;0cm
0cm pour la première colonne puisque l'on ne veut pas voir
l'identifiant
du
métier,
5 cm réservés au nom du métier que l'on veut voir effectivement dans
la
liste déroulante
Et à nouveau 0cm parce qu'on ne veut pas voir non plus la catégorie
à
laquelle il appartient.
On choisit 5cm mais on pourrait très bien prendre 6 ou 7 ça dépend
de
la
longueur du nom du métier là, ce sera à vous d'ajuster.
Vous la nommez cmbMetiers et laissez ou affectez sa propriété
Contenu
(RowSource) à vide et sa propriété Activé (Enabled) sera égal à Non
(False)
Pour ce qui concerne la liste déroulante des catégories, son
contrôle
posséde 2 colonnes avec le même principe, c'est-à-dire 0cm ;5cm
Vous le nommez cmbCategories et affectez sa propriété Contenu
(RowSource)
à
l'ensemble des enregistrements de la table à savoir :
"SELECT * FROM TBLCategories ORDER BY NomCategorie" sans les
guillemets
La propriété Activé (Enabled) sera égal à Oui (True)
Vous disposez vos deux contrôles juxtaposés sur le formulaire avec
la
liste
cmbCategories
à gauche, et l'autre liste déroulante cmbMetiers à droite.
Vous passer en Mode Formulaire pour pouvoir contrôler le bon
fonctionnement
de la liste déroulante des catégories : lorsque vous cliquez dessus,
vous
devez avoir la liste de toutes les catégories triées par ordre
alphabétique.
La liste déroulante des métiers est quant à elle verrouillée pour
l'instant.
Vous repassez alors en Mode Création et effectuez un clic droit sur
le
contrôle de liste déroulante cmbCategories : dans le menu
contextuel
qui
apparaît, vous choisissez "Créer code événement…".
Là, il est possible que vous voyez apparaître une boîte de dialogue
intermédiaire qui vous demande de choisir parmi trois rubriques. Si
tel
est
le cas, vous sélectionnez "Générateur de code" ce qui va
instantanément
ouvrir l'éditeur Visual Basic appelé Visual Basic Editor et abrégé
VBE.
Dans l'éditeur Visual Basic, une fenêtre blanche va vous proposer
d'écrire
un bout de code correspondant à l'événement avant mise à jour
(BeforeUpdate).
Private Sub cmbCategorie_BeforeUpdate(Cancel As Integer)
End Sub
C'est le code événement par défaut chaque fois que vous faites ce
genre
d'opération mais malheureusement, ce n'est pas cet événement qui
nous
intéresse puisque l'on veut pouvoir déclencher quelque chose après
avoir
choisi une catégorie et non avant. Rappelez-vous qu'un événement est
quelque
chose qui se passe lorsque l'utilisateur effectue une certaine
opération
"avant", "pendant", "après"…, etc. sur tel ou tel contrôle.
L'événement qui nous intéresse est celui ils se nomment "après mise
à
jour"
à savoir AfterUpdate.
Dans la partie haute de la fenêtre blanche sur laquelle vous êtes
actuellement focalisée, vous voyez apparaître de petites listes
déroulantes :
une qui porte le nom de votre contrôle à savoir "cmbCategorie" et
l'autre
qui
porte le nom de l'événement en cours à savoir "BeforeUpdate"… Les
deux
listes
déroulantes représentent respectivement pour l'une la liste des
contrôles
de
votre formulaire et l'autre la liste des événements potentiellement
affectables à chacun de ces contrôles. Il faut savoir qu'un contrôle
liste
déroulante ne possède pas les mêmes événements d'un contrôle bouton
de
commande par exemple et pour autant ils ont des événements communs.
Il
vous
appartiendra alors de choisir l'événement le plus approprié lorsque
tel
ou
tel contrôle sera utilisé sur votre formulaire. Le
Vous choisissez donc dans la liste de droite l'événement
AfterUpdate.
Ensuite, sur l'événement AfterUpdate de cmbCategories, vous pouvez
poser
le code que je vous ai soumis la première fois :
Private Sub cmbCategories_AfterUpdate()
Dim lngIDCat As Long
Dim SQL As String

'' Vérifie que l'on a cliqué sur une catégorie pour éviter le NULL
If Not IsNumeric(Me!cmbCategories) Then Exit Sub
'' Affecte la valeur de IDCategorie à la variable lngIDCat
lngIDCat = Me!cmbCategories
'' Construite la chaîne SQL avec la catégorie concernée
SQL = "SELECT IDMetier, NomMetier FROM TBLMetiers WHERE IDCat =" &
lngIDCat & " ORDER BY NomMetier"
'' Déverrouille la liste des métiers
cmbMetiers.Enabled = True
'' Donne le focus la liste des métiers
cmbMetiers.SetFocus
'' Déroule la liste des métiers
cmbMetiers.Dropdown
End Sub

Là, vous basculer de nouveau sur votre formulaire (Alt+Tab), vous
enregistrez de manière ne pas perdre votre travail et vous passez en
Mode
Formulaire une seconde fois.
À cet instant, lorsque vous cliquez sur la liste de gauche et que
vous
choisissez une catégorie, la liste déroulante de droite se
déverrouille
et
vous affiche les métiers correspondant à la catégorie sélectionnée.
Espérant avoir été assez clair cette fois, je vous souhaite plein de
courage
pour aboutir à vos fins.
Voilà…

--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442 )
Empaquetage avec Runtime 2007 :
http://argyronet.developpez.com/office/access/runtime/2007/



Bonjour Argyronet,

J'ai suivi votre suggestion. J'ai monté une nouvelle base avec 2
tables.
L'une qui contient 4 catégories d'emploi et l'autre, 34 métiers
(pour
tester
seulement).

Ce qui m'embête c'est à l'étape de l'association des RowSources :

Lorsque je sélectionne "Row Source" sous l'onglet "Data" dans la
première
liste combo (cmbCategories), j'ouvre la flèche et je sélectionne
"TBLCategories". Il n'y a pas d'autres options pour "ORDER BY
NomCategorie".
Où cela se trouve-t-il?

Également, lorsque je sélectionne "Row Source" sous l'onglet "Data"
dans
la
deuxième liste combo (cmbMetiers), je ne sais pas où trouver "= ""
et
propriété Enabled (Activé) = Faux". Où cela se trouve-t-il?

Pour l'instant (après 1 soirée entière passée sur ce damné
formulaire,
hihi), les chiffres de 1 à 4 affichent pour sélection dans la
première
liste
déroulante et les chiffres de 1 à 34 affichent dans la seconde.

Merci de me guider à nouveau. (Souvenez-vous que je suis très très
débutante).

:-)

--
Perle-Marie
La perle des Marie :-)



Bonjour,

Selon moi, ce choix de 37 tables n'est pas bon.
Il suffit d'avoir 2 tables...
Une pour les métiers et l'autre pour les catégories
Dans la table TBLCategories, on a un IDCat et un NomCategorie
Dans la table TBLMetiers, on a un IDMetier, un NomMetier et un
IDCat
qui
correspond à la catégorie.
Ensuite vous posez deux ComboBoxes dans votre formulaire et vous
associez
les RowSources (Contenu) respectives à
cmbCategories = SELECT * FROM TBLCategories ORDER BY NomCategorie
cmbMetiers = "" et propriété Enabled (Activé) = Faux

Ensuite, sur l'événement After_Update de cmbCategories, vous
pouvez
poser
le code suivant :
Private Sub cmbCategories_AfterUpdate()
Dim lngIDCat As Long
Dim SQL As String
If Not IsNumeric(Me!cmbCategories) Then Exit Sub
lngIDCat = Me!cmbCategories
SQL = "SELECT IDMetier, NomMetier FROM TBLMetiers WHERE IDCat
="
&
lngIDCat & " ORDER BY NomMetier"
cmbMetiers.Enabled = True
cmbMetiers.SetFocus
End Sub

--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN
2742982442 )
Empaquetage avec Runtime 2007 :
http://argyronet.developpez.com/office/access/runtime/2007/



Bonjour aidez-moi svp!

J'ai monté une table avec 37 catégories d'emploi.

J'ai ensuite monté 37 tables avec 10 métiers pour chacune des
catégories
d'emploi.

Je désire maintenant faire un formulaire avec une liste
déroulante
pour
choisir un des 37 métiers et ensuite une deuxième liste
déroulante
pour
sélectionner le métier se rapportant à la catégorie d'emploi
sélectionnée.

Je veux que la deuxième liste déroulante contiennent seulement
les
métiers
se rapportant à la catégorie d'emploi sélectionnée dans la
première
liste
déroulante.

















1 2