Formulaire 38 tables

Le
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 :-)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Argyronet
Le #6336521
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.

Comment fait-on? Merci infiniment.



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


Perle-Marie
Le #6374781
Merci mais tout cela est bien technique. Je suis débutante. Je l'ai spécifié
lors de mon inscription et je croyais que ça apparaîtrait quelque part.

Je vais tenter de suivre le tutorial que Titi a recommandé dans un autre
sujet du forum.

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

Comment fait-on? Merci infiniment.



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




Dom
Le #6374541
"paf le chien" message de news:
Enfin personnellement, chaque fois que j'ai complètement envisagé,
bécane éteinte, mon projet, d'abord sur papier, plus j'ai abouti mon
système d'information papier avant d'allumer la machine, moins j'ai eu
de temps ou de difficulté sur machine.

Même avec un outil de modélisation, je préfère quand même d'abord
abattre le maximum sur papier.



Salut paf,

+1 :-))), sauf que parfois, je zappe cette étape, n'étant ni analyste de
métier, ni programmeur (juste d'occasion...)

Dominique.

3stone
Le #6374501
Salut,

"paf le chien"
[...]
| j'ai bien envie de te recommander un cours Merise sur developpez.com qui
| est assez basique et illutré pour comprendre simplement la logique du
| stockage des données et de leur organisation


Perle-Marie pourrait lire ceci :
http://www.3stone.be/access/articles.php?lng=fr&pg"1

;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Perle-Marie
Le #6371451
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.

Comment fait-on? Merci infiniment.



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




Argyronet
Le #6342781
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.

Comment fait-on? Merci infiniment.



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






Perle-Marie
Le #6342111
J'y arrive toujours pas... je continue de bûcher....


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

Comment fait-on? Merci infiniment.



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








Argyronet
Le #6341861
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" 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.

Comment fait-on? Merci infiniment.



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











Perle-Marie
Le #6341201
J'essaie ça et je vous reviens.

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

Comment fait-on? Merci infiniment.



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













Perle-Marie
Le #6369531
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" 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" 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.















Publicité
Poster une réponse
Anonyme