Formulaire d'ajout et tables liées

migou

XLDnaute Nouveau
Bonjour,

je débute sous Access, j'ai réalisé la base de données suivante :

Ce lien n'existe plus

Le problème est que cette base n'est pas destinée à être utilisée par moi-même et qu'il me faut créer une interface simple permettant d'ajouter des clients ou des commandes.

Ce que je souhaite faire, c'est un formulaire dans lequel :

- on saisit les informations sur le client
- on sélectionne la société à laquelle il appartient à partir d'une zone de liste déroulante (contenant la liste des sociétés de la table société). Si la société n'est pas référencée alors on laisse la possibilité d'en ajouter une.
- on valide pour insérer l'enregistrement dans la base

Cela signifie qu'au moment de la sélection de la société par zone de liste déroulante, lorsque l'utilisateur sélectionne le nom d'une société existante, le numéro de celle-ci doit automatiquement se compléter à la fois dans num_soc et dans num_soc_CE.

Si la société n'existe pas alors un numéro devrait être généré (le champs num_soc est en numéro_auto) à la fois pour num_soc et pour num_soc_CE (le même).

Seulement je ne m'en sors pas, je n'arrive pas à comprendre le mode de fonctionnement des formulaires. Autant pour une table seule c'est assez simple, d'ailleurs Access peut en générer automatique, autant dans mon cas je ne voie pas.

J'en appelle à votre aide. Pouvez-vous m'éclairer en m'expliquant la marche à suivre ?

Merci par avance.
 

migou

XLDnaute Nouveau
Re : Formulaire d'ajout et tables liées

Je ne savais pas qu'on devait renseigner ces champs, je pensais que c'était automatique. Le problème est donc résolu pour ce qui est du sous-formulaire abonnement grâce à votre aide précieuse.

Je m'en vais refaire mon sous-formulaire LIGNECOMMANDE pour y intégrer les commandes.

Merci.
 

migou

XLDnaute Nouveau
Re : Formulaire d'ajout et tables liées

Re-bonjour,

je n'arrive toujours pas à régler ce problème pour les commandes. J'ai modifié le formulaires pour qu'il soit lié à commande mais j'ai cette fois un autre message d'erreur lorsque je je souhaite ajouter une commande pour un client. Celui-ci me spécifie "Modifications non effectuées, risques de doublons dans champs index". Pourtant il ne me semble pas y avoir de doublon, j'ai donc du faire une erreur dans la construction du sous-formulaire.

De plus je mélange désormais les informations des tables COMMANDE (numéro, date) et LIGNECOMMANDE (prix, quantité, code) et j'aurai voulu, si c'est possible, que celles-ci s'auto-complètent. Par exemple si je rentre un numéro de commande qui existe déjà dans la table commande, la date soit automatiquement renseignée.

A l'inverse si le numéro de commande entré n'existe pas, alors il faudrait qu'une nouvelle commande soit générée à partir de ce numéro et des champs "date" et "paiement en ligne" fraîchement renseignés.

Une autre question : que dois-je faire pour que les modifications ne soient prises en compte qu'au moment ou je clique sur le bouton d'enregistrement ?

Merci encore pour l'aide que vous m'apportez, j'espère ne pas trop en abuser.

Edit : lien de la base mise à jour : https://www.dropbox.com/s/3xwxj5uesp277ec/Base Client.accdb
 
Dernière édition:

chris

XLDnaute Barbatruc
Re : Formulaire d'ajout et tables liées

Bonjour

Il y a une relation de 1 à n entre commande et lignes de commande : il faut un formulaire commande et un sous formulaire ligne sinon Access ne comprend pas et c'est pourquoi en choisissant une commande existante, il croit qu'on en crée une nouvelle donc un doublon.

A partir du moment où le formulaire est lié aux tables, l'enregistrement est immédiat.

On peut éviter cela

  • soit en passant par des tables temporaires mais cela complique beaucoup
  • soit en interdisant le déplacement d'un enregistrement à l'autre (c'est cet événement qui valide la modification ou saisie) et en gérant donc la validation de chaque enregistrement.
    Mais dans une relation de 1 à N, il y a de toute façon un moment où il faut valider l'enregistrement commande pour pouvoir saisir une ligne...
 

migou

XLDnaute Nouveau
Re : Formulaire d'ajout et tables liées

D'accord, mais alors comment faire en sorte d'afficher l'ensemble des commandes d'un client ?

Je joins une nouvelle fois la base mis à jour : https://www.dropbox.com/s/3xwxj5uesp277ec/Base Client.accdb

Avec ce principe, ne s'affiche qu'une seule des commandes du client. Pour cli02, on voit qu'il a passé la commande 123456789 et l'on peut également voir son contenu. Mais on ne peut pas voir ses autres commandes s'il en a.

Du coup j'ai essayé de proposer une zone de liste déroulante dans le champs du numéro de commande, qui aurait proposé le choix les commandes du client en-cours de visualisation, mais je n'ai pas réussi. Je m'y suis peut être mal prit :

SELECT num_cde FROM Commande WHERE pseudo_cli = ??? ORDER BY num_cde; (que dois-je mettre dans le where ?)

Dans la même logique, il faudrait que lorsque je clique sur le bouton d'ajout d'un enregistrement, le champs pseudo_cli_CE soit automatiquement complété avec le nom du client "en-cours".

Merci encore.
 

chris

XLDnaute Barbatruc
Re : Formulaire d'ajout et tables liées

Bonjour

Les boutons magnétoscope en bas permettent de passer d'une commande à une autre ou d'en saisir une nouvelle >*

Tu peux éventuellement les masquer et remplacer par d'autres boutons...
 

chris

XLDnaute Barbatruc
Re : Formulaire d'ajout et tables liées

Boujour

Non si le formulaire est bien lié au client, tu ne vois que les commandes de ce client.

Tu as trois séries de boutons magneto dans ton formulaire : une pour les clients, une pour les commandes, une pour les lignes de commandes. Moi je parle de celle du niveau commandes.

C'est pourquoi il serait sans doute plus simple de ne pas afficher celle du niveau client qui fait double emploi avec ta liste déroulante.
 
Dernière édition:

migou

XLDnaute Nouveau
Re : Formulaire d'ajout et tables liées

Merci chris,

ça fonctionne effectivement, c'est rassurant. Cependant ce n'est pas très ergonomique et c'est pourquoi je me permet de vous embêter encore une fois.

Comment puis-je récupérer l'information sur le pseudo du client (la clé) sur lequel on est positionné de sorte à l'utiliser dans une requête SQL du formulaire commande. Mon objectif est d'utiliser la table COMMANDE pour permettre la sélection dans une zone de liste déroulante du numéro de commande, et de rajouter un champs comptant le nombre de commandes du client sélectionné.

En somme je souhaiterais écrire ces 2 requêtes :

SELECT num_cde FROM COMMANDE WHERE pseudo_cli_CE = 'pseudo_cli';

SELECT count(*) FROM COMMANDE WHERE pseudo_cli_CE = 'pseudo_cli';

pseudo_cli désignant le client sur lequel on est positionné sur le formulaire.

Merci par avance.
 

chris

XLDnaute Barbatruc
Re : Formulaire d'ajout et tables liées

Bonjour

Masquer les boutons magnétoscope et remplacer par un autre bouton est simple mais si tu passes par une liste déroulante, il faut la coupler avec la 1ère et là il faut du VBA.

Idem pour mettre à jour le champ qui devrait contenir le nombre de factures : en mode multi ligne c'est simple mais en formulaire unique c'est plus compliqué.

Je te l'ai déjà dit : vouloir tout mettre dans un formulaire unique ne me parait pas forcément adapté à la saisie : as-tu bien fait la cinématique de tes processus.

Tu débutes en Access et tu pars sur un formulaire complexe sans avoir bien intégré toute la logique de l'outil.
Sans VBA certaines choses ne sont pas faisables.
 

migou

XLDnaute Nouveau
Re : Formulaire d'ajout et tables liées

Merci encore pour ta réponse. Je m'obstine à tout mettre sur le même formulaire (à vrai dire il ne me reste presque plus que ça à faire et et les problèmes devraient être terminés).

Comme je te l'ai dit je débute sous Access, par contre j'ai des notions de VBA Excel et de VBScript, donc à défaut de maîtriser les objets propres à Access je connais bien la syntaxe. Je vais tenter par ce biais.

A+
 

chris

XLDnaute Barbatruc
Re : Formulaire d'ajout et tables liées

Re

Dans ce cas en ajoutant une liste déroulante nommée Choix (prend l'habitude de donner des nom aux objets d'Access) en haut du formulaire COMMANDE, le code événementiel suivant au lieu de ta macro, rattaché à la liste déroulante qui permet de choisir un client, devrait marcher.
Code:
Private Sub Modifiable35_AfterUpdate()
    ' Rechercher l'enregistrement correspondant au contrôle.
    Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[pseudo_cli] = '" & Me![Modifiable35] & "'"
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
  'Recalculer la liste des factures
    Forms![Formulaire CLIENT]![COMMANDE]![Choix] = Null
    Forms![Formulaire CLIENT]![COMMANDE]![Choix].Requery
End Sub

Cette liste Choix est associée à une requête qui filtre les commandes selon pseudo_cli comme tu l'avais indiqué et le code permet de réactualiser la requête quand tu change de client.

Dans la mesure où on peut changer de client selon d'autres manips, il faudra sans doute, associer le code des 2 dernières lignes à ces cas.
 
Dernière édition:

migou

XLDnaute Nouveau
Re : Formulaire d'ajout et tables liées

Bonjour,

désolé pour le temps de réponse mais j'ai du mettre en pause la base.

N'ayant pas réussi à implémenter le code que vous m'avez proposé, j'en ai fait un autre qui me semble convenir :

Code:
Private Sub zdl_client_Click()

    On Error Resume Next
    Dim pseudo As String
    pseudo = zdl_client.Value

    Forms![Formulaire CLIENT]![COMMANDE]![choix].RowSourceType = "Table/Requête"
    Forms![Formulaire CLIENT]![COMMANDE]![choix].RowSource = "SELECT num_cde FROM COMMANDE WHERE pseudo_cli_CE = '" & pseudo_cli & "';"
    On Error GoTo 0

End Sub


Edit : je m'en suis finalement sorti pour tout le reste grâce au VBA. Merci pour votre aide.
 
Dernière édition:

Statistiques des forums

Discussions
312 344
Messages
2 087 448
Membres
103 546
dernier inscrit
mohamed tano