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

Saisie de champs père et fils

4 réponses
Avatar
Marc Sanson
Bonjour,

C'est un peu long mais si j'ai la réponse, ceci pourra servir à d'autres (ce
sera déjà tapé). Par ailleurs, c'est un problème "de base" ou élémentaire.

Sous Access 2007, j'ai une table des pères et une table des fils et je
souhaite faire un formulaire de saisie des fils qui appelle, si nécessaire,
un formulaire de saisie des pères (lorsque le père n'existe pas dans la
table des pères).

Par exemple :
- la table des pères est une table de pays, contenant, outre l'identifiant
généré automatiquement, le nom du pays et le nom de la capitale du pays.
- la table des fils est une trable de cilles, contenant, outre l'identifiant
généré automatiquement, le nom de la ville, le nombre d'habitants de la
ville et la jointure avec la table des pays.

Je construis donc un formulaire "Saisie_Villes" avec un contrôle pour le nom
de la ville, un contrôle pour le nombre d'habitants de la ville et une liste
déroulante pour choisir le pays auquel appartient la ville (nom du champ :
"Saisie_Pays"). J'ajoute encore les boutons de validation, de sortie, etc
... nécessaires.

Ma liste déroulante contient le code VBA suivant lorsque je saisis un nom de
pays qui n'existe pas :

J'ai saisi le code suivant :
Private Sub Saisie_Pays_NotInList(NewData As String, Response As Integer)
If MsgBox (NewData & " n'appartient pas à la liste des pays." + vbCr + VbLf
+ "Voulez-vous l'ajouter ?", vbOKCancel, "Pays non répertorié") = vbOK Then
DoCmd.OpenForm "Saisie_Pays", , , , acFormAdd
Response = acDataErrAdded
Else
Response = acDateErrContinue
Saisie_Pays.Undo
End If
End Sub

Le formulaire "Saisie_Pays" comprend un contrôle pour le nom du pays, un
contrôle pour le nom de la capitale et les boutons de validation,
annulation, etc ...nécessaires.

Malheureusement, je suis confronté aux problèmes suivants :
- lorsque je saisis un nom de pays qui n'est pas dans la table des pays,
après avoir répondu "Oui" à la boîte de dialogue que la procédure Private
Sub Saisie_Pays_NotInList a fait apparaître, la boîte de dialoguie
"standard" d'Access apparaît quand même ("Le texte que vous avez entré n'est
pas un élément de la liste", etc ...) ; comment faire pour éviter de
l'afficher ?
- une fois que j'ai validé la saisie du nom du pays et de ses
caractéristiques (ici la capitale), lorsque je reviens sur le premier
formulaire ("Saisie_Villes"), la liste déroulante n'est pas mise à jour et
je repars sur la procédure "NotInList"; comment faire éviter cela ?
- enfin, j'aimerais bien que lorsque le formulaire "Saisie_pays" est ouvert,
le nom du pays que j'ai déjà tapé figure déjà dans le contrôle
correspondant.

D'avance, merci pour votre assistance.

4 réponses

Avatar
Michel_D
Bonjour,

Bonjour,

C'est un peu long mais si j'ai la réponse, ceci pourra servir à d'autres
(ce sera déjà tapé). Par ailleurs, c'est un problème "de base" ou
élémentaire.

Sous Access 2007, j'ai une table des pères et une table des fils et je
souhaite faire un formulaire de saisie des fils qui appelle, si
nécessaire, un formulaire de saisie des pères (lorsque le père n'existe
pas dans la table des pères).

Par exemple :
- la table des pères est une table de pays, contenant, outre
l'identifiant généré automatiquement, le nom du pays et le nom de la
capitale du pays.
- la table des fils est une trable de cilles, contenant, outre
l'identifiant généré automatiquement, le nom de la ville, le nombre
d'habitants de la ville et la jointure avec la table des pays.

Je construis donc un formulaire "Saisie_Villes" avec un contrôle pour le
nom de la ville, un contrôle pour le nombre d'habitants de la ville et
une liste déroulante pour choisir le pays auquel appartient la ville
(nom du champ : "Saisie_Pays"). J'ajoute encore les boutons de
validation, de sortie, etc ... nécessaires.

Ma liste déroulante contient le code VBA suivant lorsque je saisis un
nom de pays qui n'existe pas :

J'ai saisi le code suivant :
Private Sub Saisie_Pays_NotInList(NewData As String, Response As Integer)
If MsgBox (NewData & " n'appartient pas à la liste des pays." + vbCr +
VbLf + "Voulez-vous l'ajouter ?", vbOKCancel, "Pays non répertorié") =
vbOK Then
DoCmd.OpenForm "Saisie_Pays", , , , acFormAdd
Response = acDataErrAdded
Else
Response = acDateErrContinue
Saisie_Pays.Undo
End If
End Sub

Le formulaire "Saisie_Pays" comprend un contrôle pour le nom du pays, un
contrôle pour le nom de la capitale et les boutons de validation,
annulation, etc ...nécessaires.

Malheureusement, je suis confronté aux problèmes suivants :
- lorsque je saisis un nom de pays qui n'est pas dans la table des pays,
après avoir répondu "Oui" à la boîte de dialogue que la procédure
Private Sub Saisie_Pays_NotInList a fait apparaître, la boîte de
dialoguie "standard" d'Access apparaît quand même ("Le texte que vous
avez entré n'est pas un élément de la liste", etc ...) ; comment faire
pour éviter de l'afficher ?
- une fois que j'ai validé la saisie du nom du pays et de ses
caractéristiques (ici la capitale), lorsque je reviens sur le premier
formulaire ("Saisie_Villes"), la liste déroulante n'est pas mise à jour
et je repars sur la procédure "NotInList"; comment faire éviter cela ?
- enfin, j'aimerais bien que lorsque le formulaire "Saisie_pays" est
ouvert, le nom du pays que j'ai déjà tapé figure déjà dans le contrôle
correspondant.

D'avance, merci pour votre assistance.


Essaye comme ceci (à adapter) :

Private Sub Saisie_Pays_NotInList(NewData As String, Response As Integer)
If MsgBox (NewData & " n'appartient pas à la liste des pays." + vbCr +
VbLf + "Voulez-vous l'ajouter ?", vbOKCancel, "Pays non répertorié") vbOK Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO [TablePays] (NomPays) VALUES (' & NewData & "');"
DoCmd.SetWarnings True
DoCmd.OpenForm "Saisie_Pays", , , "NomPays = '" & NewData & "'"
Response = acDataErrAdded
Else
Response = acDateErrContinue
Saisie_Pays.Undo
End If
End Sub

Avatar
Marc Sanson
Merci beaucoup,

Cela marche bien pour la création d'un nouvel enregistrement de la table des
pays mais l'ouverture du formulaire avec la condition (l'instruction
DoCmd.OpenForm "Saisie_Pays", , , "NomPays = '" & NewData & "'") ne me place
pas sur l'enregistrement du nouveau pays mais sur un nouvel enregistrement
(avec un formulaire filtré). Pour parvenir à ajouter la capitale, je dois
premièrement enlever le filtre et deuxièmement me positionner sur le dernier
enregistrement. Je suppose également qu'il me faut recourir à un recordset
pour que le nom de la capitale soit inscrit dans la table des pays car sinon
cela ne marche pas.

Merci de votre patience vis-à-vis d'un débutant ...



"Michel_D" a écrit dans le message de
news:
Bonjour,

Bonjour,

C'est un peu long mais si j'ai la réponse, ceci pourra servir à d'autres
(ce sera déjà tapé). Par ailleurs, c'est un problème "de base" ou
élémentaire.

Sous Access 2007, j'ai une table des pères et une table des fils et je
souhaite faire un formulaire de saisie des fils qui appelle, si
nécessaire, un formulaire de saisie des pères (lorsque le père n'existe
pas dans la table des pères).

Par exemple :
- la table des pères est une table de pays, contenant, outre
l'identifiant généré automatiquement, le nom du pays et le nom de la
capitale du pays.
- la table des fils est une trable de cilles, contenant, outre
l'identifiant généré automatiquement, le nom de la ville, le nombre
d'habitants de la ville et la jointure avec la table des pays.

Je construis donc un formulaire "Saisie_Villes" avec un contrôle pour le
nom de la ville, un contrôle pour le nombre d'habitants de la ville et
une liste déroulante pour choisir le pays auquel appartient la ville (nom
du champ : "Saisie_Pays"). J'ajoute encore les boutons de validation, de
sortie, etc ... nécessaires.

Ma liste déroulante contient le code VBA suivant lorsque je saisis un nom
de pays qui n'existe pas :

J'ai saisi le code suivant :
Private Sub Saisie_Pays_NotInList(NewData As String, Response As Integer)
If MsgBox (NewData & " n'appartient pas à la liste des pays." + vbCr +
VbLf + "Voulez-vous l'ajouter ?", vbOKCancel, "Pays non répertorié") =
vbOK Then
DoCmd.OpenForm "Saisie_Pays", , , , acFormAdd
Response = acDataErrAdded
Else
Response = acDateErrContinue
Saisie_Pays.Undo
End If
End Sub

Le formulaire "Saisie_Pays" comprend un contrôle pour le nom du pays, un
contrôle pour le nom de la capitale et les boutons de validation,
annulation, etc ...nécessaires.

Malheureusement, je suis confronté aux problèmes suivants :
- lorsque je saisis un nom de pays qui n'est pas dans la table des pays,
après avoir répondu "Oui" à la boîte de dialogue que la procédure Private
Sub Saisie_Pays_NotInList a fait apparaître, la boîte de dialoguie
"standard" d'Access apparaît quand même ("Le texte que vous avez entré
n'est pas un élément de la liste", etc ...) ; comment faire pour éviter
de l'afficher ?
- une fois que j'ai validé la saisie du nom du pays et de ses
caractéristiques (ici la capitale), lorsque je reviens sur le premier
formulaire ("Saisie_Villes"), la liste déroulante n'est pas mise à jour
et je repars sur la procédure "NotInList"; comment faire éviter cela ?
- enfin, j'aimerais bien que lorsque le formulaire "Saisie_pays" est
ouvert, le nom du pays que j'ai déjà tapé figure déjà dans le contrôle
correspondant.

D'avance, merci pour votre assistance.


Essaye comme ceci (à adapter) :

Private Sub Saisie_Pays_NotInList(NewData As String, Response As Integer)
If MsgBox (NewData & " n'appartient pas à la liste des pays." + vbCr +
VbLf + "Voulez-vous l'ajouter ?", vbOKCancel, "Pays non répertorié") > vbOK Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO [TablePays] (NomPays) VALUES (' & NewData &
"');"
DoCmd.SetWarnings True
DoCmd.OpenForm "Saisie_Pays", , , "NomPays = '" & NewData & "'"
Response = acDataErrAdded
Else
Response = acDateErrContinue
Saisie_Pays.Undo
End If
End Sub



Avatar
Michel_D
Bonjour,

Tu as bien fait correspondre les noms de champs de ta table dédié au Pays ?

PS:[NomPays] est un nom de champ de la table [Pays].

Merci beaucoup,

Cela marche bien pour la création d'un nouvel enregistrement de la table
des
pays mais l'ouverture du formulaire avec la condition (l'instruction
DoCmd.OpenForm "Saisie_Pays", , , "NomPays = '" & NewData & "'") ne me
place
pas sur l'enregistrement du nouveau pays mais sur un nouvel enregistrement
(avec un formulaire filtré). Pour parvenir à ajouter la capitale, je dois
premièrement enlever le filtre et deuxièmement me positionner sur le
dernier
enregistrement. Je suppose également qu'il me faut recourir à un recordset
pour que le nom de la capitale soit inscrit dans la table des pays car
sinon
cela ne marche pas.

Merci de votre patience vis-à-vis d'un débutant ...



"Michel_D" a écrit dans le message
de news:
Bonjour,

Bonjour,

C'est un peu long mais si j'ai la réponse, ceci pourra servir à
d'autres (ce sera déjà tapé). Par ailleurs, c'est un problème "de
base" ou élémentaire.

Sous Access 2007, j'ai une table des pères et une table des fils et
je souhaite faire un formulaire de saisie des fils qui appelle, si
nécessaire, un formulaire de saisie des pères (lorsque le père
n'existe pas dans la table des pères).

Par exemple :
- la table des pères est une table de pays, contenant, outre
l'identifiant généré automatiquement, le nom du pays et le nom de la
capitale du pays.
- la table des fils est une trable de cilles, contenant, outre
l'identifiant généré automatiquement, le nom de la ville, le nombre
d'habitants de la ville et la jointure avec la table des pays.

Je construis donc un formulaire "Saisie_Villes" avec un contrôle pour
le nom de la ville, un contrôle pour le nombre d'habitants de la
ville et une liste déroulante pour choisir le pays auquel appartient
la ville (nom du champ : "Saisie_Pays"). J'ajoute encore les boutons
de validation, de sortie, etc ... nécessaires.

Ma liste déroulante contient le code VBA suivant lorsque je saisis un
nom de pays qui n'existe pas :

J'ai saisi le code suivant :
Private Sub Saisie_Pays_NotInList(NewData As String, Response As
Integer)
If MsgBox (NewData & " n'appartient pas à la liste des pays." + vbCr
+ VbLf + "Voulez-vous l'ajouter ?", vbOKCancel, "Pays non
répertorié") = vbOK Then
DoCmd.OpenForm "Saisie_Pays", , , , acFormAdd
Response = acDataErrAdded
Else
Response = acDateErrContinue
Saisie_Pays.Undo
End If
End Sub

Le formulaire "Saisie_Pays" comprend un contrôle pour le nom du pays,
un contrôle pour le nom de la capitale et les boutons de validation,
annulation, etc ...nécessaires.

Malheureusement, je suis confronté aux problèmes suivants :
- lorsque je saisis un nom de pays qui n'est pas dans la table des
pays, après avoir répondu "Oui" à la boîte de dialogue que la
procédure Private Sub Saisie_Pays_NotInList a fait apparaître, la
boîte de dialoguie "standard" d'Access apparaît quand même ("Le texte
que vous avez entré n'est pas un élément de la liste", etc ...) ;
comment faire pour éviter de l'afficher ?
- une fois que j'ai validé la saisie du nom du pays et de ses
caractéristiques (ici la capitale), lorsque je reviens sur le premier
formulaire ("Saisie_Villes"), la liste déroulante n'est pas mise à
jour et je repars sur la procédure "NotInList"; comment faire éviter
cela ?
- enfin, j'aimerais bien que lorsque le formulaire "Saisie_pays" est
ouvert, le nom du pays que j'ai déjà tapé figure déjà dans le
contrôle correspondant.

D'avance, merci pour votre assistance.


Essaye comme ceci (à adapter) :

Private Sub Saisie_Pays_NotInList(NewData As String, Response As Integer)
If MsgBox (NewData & " n'appartient pas à la liste des pays." + vbCr +
VbLf + "Voulez-vous l'ajouter ?", vbOKCancel, "Pays non répertorié") >> vbOK Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO [TablePays] (NomPays) VALUES (' & NewData &
"');"
DoCmd.SetWarnings True
DoCmd.OpenForm "Saisie_Pays", , , "NomPays = '" & NewData & "'"
Response = acDataErrAdded
Else
Response = acDateErrContinue
Saisie_Pays.Undo
End If
End Sub






Avatar
Marc Sanson
Merci de tes conseils. Après ton premier message, en réfléchissant "un peu",
j'ai réussi à faire ce que je voulais ; c'est grâce à tes conseils qui m'ont
"débloqué" (ça faisait un moment que je cherchais et je ne trouvais nulle
part la solution alors que j'ai trouvé des tas de solutions à des questions
que je ne me pose pas ...).

J'ai même réussi à ajouter dans ma liste déroulante un choix "Nouveau pays"
et à le traiter convenablement ! La dernière chose que je ne sais pas faire
(mais cela n'est pas grave) est, quand j'ai choisi cette option ("Nouveau
pays") et que j'ai saisi les caractéristiques dudit pays, de revenir sur le
premier formulaire en ayant ce pays sélectionné dans ma liste déroulante. Je
verrai cela plus tard pour améliorer le confort.

Cordialement - Marc Sanson

"Michel_D" a écrit dans le message de
news:%
Bonjour,

Tu as bien fait correspondre les noms de champs de ta table dédié au Pays
?

PS:[NomPays] est un nom de champ de la table [Pays].

Merci beaucoup,

Cela marche bien pour la création d'un nouvel enregistrement de la table
des
pays mais l'ouverture du formulaire avec la condition (l'instruction
DoCmd.OpenForm "Saisie_Pays", , , "NomPays = '" & NewData & "'") ne me
place
pas sur l'enregistrement du nouveau pays mais sur un nouvel
enregistrement
(avec un formulaire filtré). Pour parvenir à ajouter la capitale, je dois
premièrement enlever le filtre et deuxièmement me positionner sur le
dernier
enregistrement. Je suppose également qu'il me faut recourir à un
recordset
pour que le nom de la capitale soit inscrit dans la table des pays car
sinon
cela ne marche pas.

Merci de votre patience vis-à-vis d'un débutant ...



"Michel_D" a écrit dans le message
de news:
Bonjour,

Bonjour,

C'est un peu long mais si j'ai la réponse, ceci pourra servir à
d'autres (ce sera déjà tapé). Par ailleurs, c'est un problème "de base"
ou élémentaire.

Sous Access 2007, j'ai une table des pères et une table des fils et je
souhaite faire un formulaire de saisie des fils qui appelle, si
nécessaire, un formulaire de saisie des pères (lorsque le père n'existe
pas dans la table des pères).

Par exemple :
- la table des pères est une table de pays, contenant, outre
l'identifiant généré automatiquement, le nom du pays et le nom de la
capitale du pays.
- la table des fils est une trable de cilles, contenant, outre
l'identifiant généré automatiquement, le nom de la ville, le nombre
d'habitants de la ville et la jointure avec la table des pays.

Je construis donc un formulaire "Saisie_Villes" avec un contrôle pour
le nom de la ville, un contrôle pour le nombre d'habitants de la ville
et une liste déroulante pour choisir le pays auquel appartient la ville
(nom du champ : "Saisie_Pays"). J'ajoute encore les boutons de
validation, de sortie, etc ... nécessaires.

Ma liste déroulante contient le code VBA suivant lorsque je saisis un
nom de pays qui n'existe pas :

J'ai saisi le code suivant :
Private Sub Saisie_Pays_NotInList(NewData As String, Response As
Integer)
If MsgBox (NewData & " n'appartient pas à la liste des pays." + vbCr +
VbLf + "Voulez-vous l'ajouter ?", vbOKCancel, "Pays non répertorié") =
vbOK Then
DoCmd.OpenForm "Saisie_Pays", , , , acFormAdd
Response = acDataErrAdded
Else
Response = acDateErrContinue
Saisie_Pays.Undo
End If
End Sub

Le formulaire "Saisie_Pays" comprend un contrôle pour le nom du pays,
un contrôle pour le nom de la capitale et les boutons de validation,
annulation, etc ...nécessaires.

Malheureusement, je suis confronté aux problèmes suivants :
- lorsque je saisis un nom de pays qui n'est pas dans la table des
pays, après avoir répondu "Oui" à la boîte de dialogue que la procédure
Private Sub Saisie_Pays_NotInList a fait apparaître, la boîte de
dialoguie "standard" d'Access apparaît quand même ("Le texte que vous
avez entré n'est pas un élément de la liste", etc ...) ; comment faire
pour éviter de l'afficher ?
- une fois que j'ai validé la saisie du nom du pays et de ses
caractéristiques (ici la capitale), lorsque je reviens sur le premier
formulaire ("Saisie_Villes"), la liste déroulante n'est pas mise à jour
et je repars sur la procédure "NotInList"; comment faire éviter cela ?
- enfin, j'aimerais bien que lorsque le formulaire "Saisie_pays" est
ouvert, le nom du pays que j'ai déjà tapé figure déjà dans le contrôle
correspondant.

D'avance, merci pour votre assistance.


Essaye comme ceci (à adapter) :

Private Sub Saisie_Pays_NotInList(NewData As String, Response As
Integer)
If MsgBox (NewData & " n'appartient pas à la liste des pays." + vbCr +
VbLf + "Voulez-vous l'ajouter ?", vbOKCancel, "Pays non répertorié") >>> vbOK Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO [TablePays] (NomPays) VALUES (' & NewData &
"');"
DoCmd.SetWarnings True
DoCmd.OpenForm "Saisie_Pays", , , "NomPays = '" & NewData & "'"
Response = acDataErrAdded
Else
Response = acDateErrContinue
Saisie_Pays.Undo
End If
End Sub