IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Formulaire de saisie multi-utilisateurs : besoin d'aide sur plusieurs points [AC-2010]


Sujet :

IHM

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de Données
    Inscrit en
    Janvier 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de Données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2015
    Messages : 79
    Points : 20
    Points
    20
    Par défaut Formulaire de saisie multi-utilisateurs : besoin d'aide sur plusieurs points
    Bonjour,

    je développe une application ACCESS pour faciliter la saisie de données (27 champs à saisir ou sélectionner dans une liste) qui pourra au final, être utilisée par plusieurs personnes en même temps.

    Un des champs est un numéro de dossier.

    La particularité de ce numéro de dossier et qu'il n'est pas unique.
    C'est à dire que quand une personne décide de saisir une nouvelle "ligne", il faut incrémenter de 1 le numéro de dossier, mais une fois la ligne saisie (et enregistrée), elle a la possibilité de saisir une autre ligne avec le même numéro de dossier.

    j'ai donc commencé une base ACCESS.

    j'ai plusieurs tables :
    - TAB_SUIVI : Table avec les 27 champs à saisir
    - TAB_NUM-DOSSIER : Table avec un champ "Num_Dossier" et une ligne
    - Plusieurs tables avec les valeurs possibles pour des listes de sélection

    J'ai également plusieurs formulaire indépendants :
    F_PRINCIPAL : qui a juste 3 boutons
    - Nouvelle saisie
    - Export Excel (en VBA, Ouvre une boite de dialogue pour choisir un emplacement et exporter la table TAB_SUIVI au format Excel)
    - Quitter

    Quand on clique sur nouvelle saisie, cela va mettre à jour le champ num_dossier de TAB_NUM-DOSSIER (juste faire un +1 sur la valeur)
    et ouvrir le formulaire F_SAISIE_NOUV_NUM_DOSSIER

    Ce formulaire possède donc les 27 champs à saisir ainsi que 3 boutons :
    - Valider saisie et revenir au menu principal
    - Valider Saisie et nouvelle saisie avec même numéro dossier
    - Annuler saisie et revenir au menu principal.

    j'ai géré pour que, quand cela est nécessaire, certains champs soient une liste avec un choix à faire.
    J'ai testé le bouton "Valider saisie et revenir au menu principal" en insérant une ligne de quelques champs dans une table de test et cela fonctionne. (VBA) reste à faire la requête pour les 27 champs (c'est long...)

    On arrive maintenant sur les choses que je n'arrive pas (encore) à faire :

    1 : Je voudrais que le champ "Num_Dossier" du formulaire soit automatiquement la valeur du numéro de dossier fraîchement mis à jour (et idéalement sans possibilité de modifier ce numéro de dossier).
    2 : Quand je clique sur "Valider Saisie et nouvelle saisie avec même numéro dossier", je voudrais que cela enregistre comme pour le 1er bouton, mais au lieu revenir au menu principal, je voudrais réafficher le formulaire vide avec le même numéro de dossier.

    je ne sais pas si il faut passer par une variable (et donc une fonction pour récupérer cette variable) ou simple un résultat d'une requête SELECT sur la table TAB_NUM-DOSSIER.

    Est ce que j'oublie des choses ?

    Restera ensuite à gérer le multi-utilisateur. (chose que je n'ai jamais fait non plus)

    Avec cette méthode, il y aura des numéro de dossier inutilisés mais ce n'est pas bien grave. (si une personne clique sur "Nouvelle saisie" puis annule, mais je ne vois pas comment gérer cela sinon en multiutilisateur (je ne peux pas remettre l'ancien numéro de dossier, car si une autre personne a commencé une saisie, ce numéro aura été mis à jour)

    bref, je veux bien un peu d'aide.

    Merci d'avance.

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Ghana

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 109
    Points : 155
    Points
    155
    Par défaut
    Bonjour,

    La présentation de votre projet est détaillée (sur le plan fonctionnel), toutefois les points sur lesquels vous achoppez semblent principalement reposer sur des questions de gestion des flux de données (mcd, requêtes sources, codes), points sur lesquels nous (enfin, moi du moins ) ne disposons pas suffisamment d'éléments pour vous donner un coup de main.

    Cette question de requêtes sources se pose d'autant plus que vous évoquez quelque chose qui sonne étrangement :
    ... reste à faire la requête pour les 27 champs (c'est long...)
    Sinon :
    1 : Je voudrais que le champ "Num_Dossier" du formulaire soit automatiquement la valeur du numéro de dossier fraîchement mis à jour (et idéalement sans possibilité de modifier ce numéro de dossier).
    Par exemple, pouvez-vous nous dire ici comment vous incrémentez votre num_dossier, et comment vous "rattachez" vos "lignes" à ce dernier ?

    2 : Quand je clique sur "Valider Saisie et nouvelle saisie avec même numéro dossier", je voudrais que cela enregistre comme pour le 1er bouton, mais au lieu revenir au menu principal, je voudrais réafficher le formulaire vide avec le même numéro de dossier.
    Ici, il conviendrait je pense de nous préciser quelle(s) action(s) est/sont attachée(s) à votre 1er bouton, quel est le mode d'ouverture de votre formulaire, ainsi que sa requête source.

    Restera ensuite à gérer le multi-utilisateur. (chose que je n'ai jamais fait non plus)
    Effectivement, il convient je pense de se concentrer sur les premiers points, avant de vous poser la question de vos besoins en la matière et du choix de la technique la plus appropriée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de Données
    Inscrit en
    Janvier 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de Données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2015
    Messages : 79
    Points : 20
    Points
    20
    Par défaut
    Merci bien.

    je n'ai pas eu le temps de poster un message hier soir, mais j'ai reussi à faire ce que je voulais.

    Citation Envoyé par 3ug3n Voir le message
    Bonjour,

    La présentation de votre projet est détaillée (sur le plan fonctionnel), toutefois les points sur lesquels vous achoppez semblent principalement reposer sur des questions de gestion des flux de données (mcd, requêtes sources, codes), points sur lesquels nous (enfin, moi du moins ) ne disposons pas suffisamment d'éléments pour vous donner un coup de main.

    Cette question de requêtes sources se pose d'autant plus que vous évoquez quelque chose qui sonne étrangement :


    Sinon :

    Par exemple, pouvez-vous nous dire ici comment vous incrémentez votre num_dossier, et comment vous "rattachez" vos "lignes" à ce dernier ?



    Ici, il conviendrait je pense de nous préciser quelle(s) action(s) est/sont attachée(s) à votre 1er bouton, quel est le mode d'ouverture de votre formulaire, ainsi que sa requête source.
    quel bouton ? Nouvelle saisie ?

    voici une copie du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Private Sub BTN_NOUVELLE_SAISIE_Click()
     
     
    DoCmd.SetWarnings False
     
    ' incrémentation référentiel Num_dossier
    DoCmd.OpenQuery "REQ_NOUVEAU_NUM_DOSSIER"
     
    Dim requete As Recordset
    Dim sql As String
    Dim LeNumDossier As String
     
    ' Exécution de la requête pour récupérer le numéro de dossier mis à jour :
    sql = " SELECT TAB_Num_Dossier.[Num Dossier] FROM TAB_Num_Dossier;"
    Set requete = CurrentDb.OpenRecordset(sql)
    ' première ligne de résultat :
    requete.MoveFirst
    ' Récupération de la valeur de la colonne [Num Dossier]
    LeNumDossier = requete("[Num Dossier]")
     
    ' Affichage nouveau numéro de dossier (pas obligatoire)
    MsgBox "Nouveau N° Dossier = " & LeNumDossier
     
    DoCmd.SetWarnings True
     
    ' Ouverture formulaire nouvelle saisie
    DoCmd.OpenForm "F_SAISIE_NOUV_NUM_DOSSIER"
     
    ' Remplissage automatique du champ NUm Dossier dans le formulaire par la valeur
    Forms!F_SAISIE_NOUV_NUM_DOSSIER!Num_Dossier.Value = LeNumDossier
     
    End Sub
    et le code de la requête de mise à jour : UPDATE TAB_Num_Dossier SET TAB_Num_Dossier.[Num Dossier] = TAB_Num_Dossier.[Num Dossier]+1;

    et il n'y a pas de requête source, Le formulaire de saisie est un formulaire indépendant.

    le code pour le bouton "Enregistrer Saisie + Retour au menu principal" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Private Sub BTN_REC_MENU_Click()
    On Error GoTo Err_BTN_REC_MENU_Click
     
    Dim S_REQ1 As String
    Dim S_REQ2 As String
    Dim S_REQ As String
     
    S_REQ1 = "INSERT INTO TAB_Suivi_CGPS_CRC ( Année, Mois, Jour, Num_Dossier_Attribué, Type_Demande, Nom, Prénom, Statut, Situation, Nb_Cartes_Demandées, Dossier_Complet, Dossier_Incomplet, Justificatif_Manquant_1, 2Justificatif_Manquant_1, Justificatif_Manquant_3, Justificatif_Manquant_4, Date_Envoi_Courrier, Cartes_Accordées, Cartes_Accordées_Sur_Dérogation, Cartes_Refusées, Motif_Refus, Demandes_Classées_Sans_Suite, Cartes_Délivrées, Num_Carte, Date_Début_Validité_Carte, [Date_Envoi_Cartes-duplicata_Courrier_Refus_Classement_dossier], Observations )"
    S_REQ2 = "values ('" & Me.Année.Value & "', '" & Me.Mois.Value & "', '" & Me.Jour.Value & "', '" & Me.Num_Dossier.Value & "', '" & Me.Type_demande.Column(1) & "', '" & Me.Nom.Value & "', '" & Me.Prenom.Value & "', '" & Me.Statut.Column(1) & "', '" & Me.Situation.Column(1) & "', '" & Me.Nb_Cartes_Demandées.Value & "', '" & Me.Dossier_complet.Value & "', '" & Me.Dossier_incomplet.Value & "', '" & Me.Justificatif_manquant_1.Column(1) & "', '" & Me.Justificatif_manquant_2.Column(1) & "', '" & Me.Justificatif_manquant_3.Column(1) & "', '" & Me.Justificatif_manquant_4.Column(1) & "', '" & Me.Date_envoi_courrier.Value & "', '" & Me.Cartes_Accordées.Value & "', '" & Me.Cartes_accordées_sur_dérogation.Value & "', '" & Me.Cartes_refusées.Value & "', '" & Me.Motif_Refus.Column(1) & "', '" & Me.Demandes_classées_sans_suite.Value & "', '" & Me.Cartes_délivrées.Value & "', '" & Me.Num_Carte.Value & "', '" & Me.Date_Debut_Validité_Carte.Value & "', '" & Me.Date_Envoi_Carte.Value & "', '" & Me.Observations.Value & "');"
    S_REQ = S_REQ1 & S_REQ2
     
    Dim MyDB As DAO.Database
    Set MyDB = CurrentDb()
    MyDB.Execute S_REQ
    MsgBox "Saisie enregistrée dans la table"
     
    ' Vidage des champs Texte (TODO : A Verifier si nécessaire)
    Dim Cmp As Control
    For Each Cmp In Me.Controls
    If Cmp.ControlType = acTextBox Then Cmp.Value = ""
    Next Cmp
     
     
    ' Fermeture du formaulaire
    DoCmd.Close
     
    Exit_BTN_REC_MENU_Click:
        Exit Sub
     
    Err_BTN_REC_MENU_Click:
        MsgBox Err.Description
        Resume Exit_BTN_REC_MENU_Click
     
    End Sub

    Pour le Bouton "Enregistrer Saisie + Nouvelle Saisie avec même numéro de dossier", le code se ressemble (il faudrait même idéalement que je fasse une ou plusieurs fonctions), sauf qu'au lieu de revenir au formulaire principal, je récupère la valeur num dossier, je ferme et j'ouvre à nouveau le formulaire de saisie et j'affecte la valeur du num de dossier au champ numéro de dossier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ...
    ' Récupérateur Valeur Num Dossier
    LeNumDossier = Me.Num_Dossier.Value
    ...
    ' Fermeture du formaulaire
    DoCmd.Close
     
    'réouverture du formulaire
    ' Ouverture formulaire nouvelle saisie
    DoCmd.OpenForm "F_SAISIE_NOUV_NUM_DOSSIER"
     
    'F_SAISIE_NOUV_NUM_DOSSIER.Num_Dossier.Value = resultat
    Forms!F_SAISIE_NOUV_NUM_DOSSIER!Num_Dossier.Value = LeNumDossier
    ...
    c'est d'ailleurs cette dernière ligne qui m'a permis de remplir le champ avec la valeur du numéro de dossier.

    Effectivement, il convient je pense de se concentrer sur les premiers points, avant de vous poser la question de vos besoins en la matière et du choix de la technique la plus appropriée.
    maintenant que le reste fonctionne, reste cela à voir effectivement.

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Ghana

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 109
    Points : 155
    Points
    155
    Par défaut
    Bonjour,

    C'est parfait si vous êtes parvenu à vos fins !

    ...et il n'y a pas de requête source, Le formulaire de saisie est un formulaire indépendant.
    C'est ce que je m'étais dit à la lecture de votre premier message.

    Je suppose que vous avez de bonnes raisons, mais y remédier vous permettrait de simplifier considérablement votre projet, sans parler des questions de fiabilité de vos données !
    En effet, une partie des codes que vous avez postée reproduit des fonctionnalités, et de manière incomplète, l'intégrité référentielle qui est une des principales raisons d'être d'un SGBDR ; cette discussion en est une bonne illustration à mon avis.

    Vu le soin que vous avez apporté à l'écriture de votre VBA, je présume que vous savez où vous allez.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur de Données
    Inscrit en
    Janvier 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de Données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2015
    Messages : 79
    Points : 20
    Points
    20
    Par défaut
    Effectivement, je connais pas trop mal SQL et VBA, mais je ne connais pas bien les fonctionnalités d'ACCESS, donc il y a peut être moyen de faire plus simple, ou plus rapide.
    pour ce qui est de l'intégrité référentielle, il n'y a rien de bien compliqué dans cette application (une table principale et des tables pour les champs "récurrent", et pour ce qui est du formulaire, pour les champs récurrents, c'est à chaque fois une liste basée sur la table de référence.)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide pour créer un formulaire de connexion multi utilisateurs
    Par nurdinosda dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 12/10/2011, 18h58
  2. besoin d'aide sur un formulaire multi champs
    Par franckor dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/10/2009, 09h59
  3. Besoin d'aide sur les formulaires
    Par Jb-One36 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 22/07/2007, 15h28
  4. besoin d'aide sur un point dans la FAQ
    Par Jim_Nastiq dans le forum Delphi
    Réponses: 11
    Dernier message: 28/03/2007, 10h09
  5. besoin d'aide sur un formulaire
    Par Atchoum_002 dans le forum Langage
    Réponses: 6
    Dernier message: 06/10/2005, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo