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

Access Discussion :

Aide à la création d'une base de données [Toutes versions]


Sujet :

Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Aide à la création d'une base de données
    Bonjour, Messieurs, Mesdames
    Je cherche une personne qui pourrait crée une base donnée en suivant un cahier des charges.
    J'ai essayé de mon coté, malheureusement le temps me manque énormément.
    Si des personnes sont intéressées, je vous communiquerais plus en détail le Cdc.
    En échange a vrai dire je ne sais pas, mais nous pouvons en parlons en message privée.
    Cordialement
    G

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Gerald.j

    Règle 1

    Le propre du forum est d'entraider mais pas de faire quelque chose à ta place.

    Règle 2

    En échange a vrai dire je ne sais pas, mais nous pouvons en parlons en message privée.
    Nous sommes sur un forum communautaire, donc les explications fournies doivent servir à tous.

    Règle 3

    J'ai essayé de mon coté, malheureusement le temps me manque énormément.
    Nous non plus nous avons peu de temps ! donc nous sommes prêts à aider, à donner notre énergie, notre temps et le sourire ... si le candidat s'investit de son côté.

    Donc partant de ces trois règles, nous ne fermerons pas la porte mais un effort de ton côté nous permettraient de te donner le coup de pouce nécessaire.

    Cordialement

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Access
    Bonjour jimbolion !

    J'ai enregistré les trois règles !
    En échange...: Je me débrouille dans certaine applications, après je pensais être bon en access

    Il est vrai.
    J'ai encore un certain nombre de jours a y consacrer.
    Je vous remercie, j'essaierai de peu vous opportunit, et ne soyez pas choqué par mes questions des fois un peu simpliste.

    Voici mon cdc:
    Création d'une base de donnée permettant de trouver des rapports de stages avec différents facteurs. (secteur, service matière, outils, nom de l'entreprise,lieu géographique,)
    Ansi avoir une liste d'entreprise correspondant a la recherche avec un résumé des rapports.

    Cette base de donné doit pouvoir être mise a jour par une personne.
    Rentré une nouvelle entreprise par exemple, un nouveau rapport. Sachant qu'il peut avoir plusieurs rapport pour une entreprise.

    Ou suis je rendu ? :
    J'ai divisé le travail en deux partie distinct.
    Rechercher et mise a jour.
    Actuellement je suis sur la mise a jour:
    La personne arrive sur un formulaire ou il rentre son nom + prénom.
    Il arrive ensuite sur un autre formulaire ou il rentre sont stage.
    Soit il trouve l'entreprise dans la liste déroulante, sinon il crée un nouvelle.
    Quand il a rempli toutes les cases il tombes sur un état il confirme ou non.

    Voila, je sais que des fois je m'explique mal, si vous souhaitez le fichier access, pas de problème

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Mon premier problème:
    Lorsque la personne rentre son nom + prénom dans le 1er formulaire (formulaire étudiant), pas de problème il est enregistré dans la table (table étudiant).
    Par contre au formulaire suivant (formulaire stage) j'aimerai qu'il soit relié avec son nom+prénom, c'est a dire dans la table (table stage) il y a l'ID de étudiant crée précédemment dans le formulaire étudiant.

  5. #5
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 134
    Points : 84 788
    Points
    84 788
    Billets dans le blog
    15
    Par défaut
    Salut Gerald.j,

    Jimbolion

    Citation Envoyé par Gerald.j Voir le message
    Mon premier problème:
    j'aimerai qu'il soit relié avec son nom+prénom, c'est a dire dans la table (table stage) il y a l'ID de étudiant crée précédemment dans le formulaire étudiant.
    @ Gerald.j : avez-vous créé la relation 1 à plusieurs entre la table t_Etudiant et la table t_Stage ? Cela en supposant qu'un étudiant peut faire 1 ou plusieurs stages.

    Cordialement,
    Malick
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Gerald.j bonjour,
    milkoseck


    Tout peut aller très vite, mais d'abord comme le rappelle à juste escient milkoseck, envoie nous le schéma de tes relations et de tes tables.

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Nom : Capture d'écran 2016-02-28 20.10.03.png
Affichages : 427
Taille : 179,8 Ko
    Bonjour

    Voici mes relations entre les différentes tables

    Cordialement

    G.

  8. #8
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Gerald.j

    Avant d'aller plus loin, il va falloir reprendre quelques notions élémentaires de base :

    Nous nommerons une table T_Nomtable ainsi T_Stages (au pluriel car une table est susceptible de contenir n enregistrements).

    Ensuite si tu décides de normaliser tes champs comme un id_nomdetable fais le sur l'ensemble des entités (Id_Entreprise dans ce cas)

    ensuite pas d'accents ni d'espaces dans les champs (matière, Tel secretariat...)

    pas de noms réservés tel que Nom (dans la table Entreprise)

    Ensuite il est préférable d'utiliser des tables de regroupements (ou jonctions nommées TJ_NomTable) plutôt qu'offrir n occurrences de tes valeurs dans chaque table). Cette remarque est valable pour Matieres, Secteurs et Services. Demain si tu souhaites ajouter une matière ton modèle n'est plus viable.

    exemple T_Stages(id_stage,...)
    T_Matieres (id_Matiere)
    Tj_MatieresStages (#idStage, #idmatiere) Mettre une contrainte d'unicité sur une clé composite afin de ne pas accepter deux fois la même matière sur le même stage.

    Cldt

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Nom : Capture d'écran 2016-02-29 00.15.46.png
Affichages : 323
Taille : 188,9 Ko

    Voila en espérant avoir bien fait

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Ensuite il est préférable d'utiliser des tables de regroupements (ou jonctions nommées TJ_NomTable) plutôt qu'offrir n occurrences de tes valeurs dans chaque table). Cette remarque est valable pour Matieres, Secteurs et Services. Demain si tu souhaites ajouter une matière ton modèle n'est plus viable.

    exemple T_Stages(id_stage,...)
    T_Matieres (id_Matiere)
    Tj_MatieresStages (#idStage, #idmatiere) Mettre une contrainte d'unicité sur une clé composite afin de ne pas accepter deux fois la même matière sur le même stage.
    J'ai testé avec la table T_Matieres 1. Par contre je ne sais pas comment faire avec cette méthode pour le formulaire ci-joint.

    Nom : Capture d'écran 2016-02-29 00.16.09.png
Affichages : 234
Taille : 106,8 Ko

  11. #11
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Gerald.j bonjour

    Renommage de T-Matieres 1 en T_Matieres et du fait plus aucun id_Matiere (clé étrangère) ne doit figurer dans T_Stages.

    Procéder de la même façon pour Outils, Secteurs, ServicesAccueils.

    Si on imagine que les matières desservies pour un même stage sont identiques, ton modèle n'est pas viable car en mettant l'id étudiant dans la table stages cela veut dire que tu auras plusieurs entrées pour le même stage (une table de jonction dans ce cas sera nécessaire : T_Stagiaires, T_Stages et TJ_StagesStagiaires).
    Il faut également définir quelles sont les clés à rattacher à chaque entité.

    l'Entreprise est t'elle liée au stage ou à l'étudiant ? de même que pour le tuteur ? En fonction de ces réponses les champs seront à insérer dans stages ou stagiaires.

    Pour la construction des tables de jonctions, la technique du sous formulaire est à privilégier.

    http://claudeleloup.developpez.com/t...us-formulaire/

    et

    http://claudeleloup.developpez.com/t...che-pere-fils/

    Cldt

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bonjour

    J'ai suivi les tutoriels ! Génial !
    Je dois vous avouer que j'ai eu du mal au début.
    Mais je suis arrivé a une maquette/Brouillon.
    Voici ci-joint une photo.
    Par contre comme vous pouvez le voir, quand un stage (le 1 ici) à plusieurs secteur il est répété plusieurs fois. Comment puis-je y remédier sachant qu'il y a seulement 3 secteurs max par stage.
    Et est-il possbile de cliquer sur le sujet (stage) voulu et avoir ainsi un état qui approfondit les informations (Résumé de stage, numéro de téléphone secrétaire, qui est le tuteur, date etc...)
    Et comment ne pas afficher la ligne "######".

    Cordialement

    Nb: Je viens de remarquer que mon vrai prénom est sur les photo Gérald.j étant mon pseudo internet je continue avec lui

    Nom : Capture d'écran 2016-03-03 00.39.02.png
Affichages : 290
Taille : 87,6 Ko

  13. #13
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Gerald.j bonjour,

    Oui je vois que tu as bien bossé, mais avant d'aller plus loin j'aimerai être sûr du modèle et de tes relations. Je voudrai être sûr que tu as bien tenu compte de mes observations

    Ensuite nous nous occuperons de ton formulaire.

    ps j'avais pas remarqué la photo, mais l'exemple choisi le Var qui est mon département (hasard ou pas ?)

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l'Entreprise est t'elle liée au stage ou à l'étudiant ? de même que pour le tuteur ? En fonction de ces réponses les champs seront à insérer dans stages ou stagiaires.
    l'Entreprise ainsi que le tuteur sont liée au stage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (une table de jonction dans ce cas sera nécessaire : T_Stagiaires, T_Stages et TJ_StagesStagiaires).
    Je comprends que pour Secteurs, outils, services et matière on est une table jonctions car il peut avoir plusieurs entrée pour un stage.
    Par contre il y a seulement un étudiant pour un stage. Alors est-il nécessaire d'avoir une table TJ_EtudiantStage ?

    Voici une photo ci-jont des relations actuelles.

    Pour le Var oui et non Je suis également du Var. Et quand j'ai fait un exemple bidon le département venu a mon esprit c'est le var

    Nom : Capture d'écran 2016-03-03 14.31.36.png
Affichages : 396
Taille : 109,1 Ko

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bonjour

    J'ai également un autre petit soucis.
    Voyez-vous quand je veux rajouter un outils ou un service d'accueil, je n'ai plus rien dans le formulaire. ( Cf les photos)
    Nom : Capture d'écran 2016-03-04 02.24.44.png
Affichages : 328
Taille : 96,5 Ko
    Le formulaire normale si je puis dire

    Nom : Capture d'écran 2016-03-04 02.25.09.png
Affichages : 317
Taille : 99,6 Ko
    Ici les sources du formulaire

    Nom : Capture d'écran 2016-03-04 02.25.31.png
Affichages : 246
Taille : 80,6 Ko
    Et quand je rajoute dans les resources outils ou service d'accueil, j'ai ça.

    D'ailleurs j'ai l'idée de mettre plus de critères de sélections. Deux secteurs par exemple. Mais comme il peut avoir seulement un nom par zone de texte j'avais l'idée de refaire le programme mais en changeant Filtre par Filtres.
    Mais je n'y arrive pas en "juste" remplaçant filtre par filtres dans le code ci-joint:

    Le code initiale (Provenant du tutoriel que vous m'avez indiqué) mais modifié a mon formulaire (1er photo)

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    '--------------Partie du code valable quel que soit le formulaire-----------------
    '                                                                                V
    Option Compare Database
    Option Explicit
     
    Dim sConteneur As String
    Private Sub Form_Open(Cancel As Integer)
      Dim ctl As Control
      'Recherche du nom du conteneur
      For Each ctl In Me.Controls
        If ctl.ControlType = acSubform Then
            sConteneur = ctl.Name
            Exit Sub
        End If
      Next ctl
    End Sub
    Public Sub Actu()
      On Error GoTo GestionErreurs
      Dim ctl As Control
      Me(sConteneur).LinkMasterFields = ""
      Me(sConteneur).LinkChildFields = ""
      For Each ctl In Me.Controls
         If Left(ctl.Name, 6) = "filtre" And Not IsNull(Me(ctl.Name)) Then
             Me(sConteneur).LinkChildFields = Me.cntrVINS.LinkChildFields _
                 & "[" & Right(ctl.Name, Len(ctl.Name) - 6) & "];"
             Me(sConteneur).LinkMasterFields = Me.cntrVINS.LinkMasterFields _
                 & "[" & ctl.Name & "];"
         End If
      Next ctl
      Exit Sub
    GestionErreurs:
      Select Case Err.Number
        Case 2335  'survient à partir de la 2e affectation d'un champ fils (sans conséquence)
          Resume Next
        Case Else
          MsgBox "Erreur dans Sub Actu : " & Err.Number & " " & Err.Description
      End Select
    End Sub
     
     
    Private Sub btTout_Click()
      Dim ctl As Control
      For Each ctl In Me.Controls
         If Left(ctl.Name, 6) = "filtre" Then
             Me(ctl.Name) = Null
         End If
      Next ctl
      Call Actu
    End Sub
    '                                                                                ^
    '-------Fin de la partie du code valable quel que soit le formulaire--------------
    '
    '
    '--------------Partie du code à adapter selon vos critères de choix---------------
    '                                                                                V
     
     
    Private Sub FiltreNom_EN_AfterUpdate()
      Call Actu
    End Sub
     
    Private Sub FiltreDepartement_DE_AfterUpdate()
      Call Actu
    End Sub
     
    Private Sub FiltreMatiere_AfterUpdate()
        Call Actu
    End Sub
     
    Private Sub FiltreSecteur_AfterUpdate()
        Call Actu
    End Sub
     
    Private Sub Filtreoutils_AfterUpdate()
        Call Actu
    End Sub
    Cordialement

    Gerald.j

  16. #16
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Gerald.j,

    Peux tu m'envoyer copie de ta base sans données confidentielles car de nombreuses raisons peuvent être à l'origine du phénomène :

    le nombre de jointures et l’absence d'une valeur dans une table héritée est sans doute à l'origine du problème. Les jointures externes peuvent dans ce cas être utilisées

    - construction du forms et ss/forms
    - construction de la requête et utilisation des filtres

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  17. #17
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Gerald.j,

    La construction de ta requête nécessite des jointures, de fait si un outil ou un service d'accueil n'existe pas, les enregistrements ne seront pas affichés. Il faut donc utiliser des jointures externes comme décrit sur l'image suivante :


    Nom : Capture1.JPG
Affichages : 354
Taille : 125,5 Ko

    Procéder de la même façon pour les outils

    ta requête source de de données de ton sous formulaire devenant ainsi :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T_Stages.ID_Stage, T_Entreprises.Nom_EN, T_Departements.Departement_DE, T_Tuteurs.Nom_TU, T_Secteurs.Secteur, T_Stages.Titre_Stage, T_Matieres.Matiere, T_Outils.Outils, [T_Services d'accueil].[Services d'accueil]
    FROM T_Tuteurs INNER JOIN ((((((T_Departements INNER JOIN T_Entreprises ON T_Departements.ID_Departement = T_Entreprises.ID_Departement) INNER JOIN T_Stages ON T_Entreprises.ID_Entreprise = T_Stages.ID_Entreprise) INNER JOIN (T_Matieres INNER JOIN TJ_MatiereStage ON T_Matieres.[ID_Matiere 1] = TJ_MatiereStage.ID_Matiere) ON T_Stages.ID_Stage = TJ_MatiereStage.ID_Stage) LEFT JOIN (T_Outils RIGHT JOIN TJ_OutilsStage ON T_Outils.[ID_Outils 1] = TJ_OutilsStage.ID_Outils) ON T_Stages.ID_Stage = TJ_OutilsStage.ID_Stage) INNER JOIN (T_Secteurs INNER JOIN TJ_SecteurStage ON T_Secteurs.[ID_Secteurs 1] = TJ_SecteurStage.ID_Secteur) ON T_Stages.ID_Stage = TJ_SecteurStage.ID_Stage) LEFT JOIN ([T_Services d'accueil] RIGHT JOIN TJ_ServiceAStage ON [T_Services d'accueil].[ID_service d'accueil 1] = TJ_ServiceAStage.[ID_Service d'accueil]) ON T_Stages.ID_Stage = TJ_ServiceAStage.ID_Stage) ON T_Tuteurs.ID_Tuteur = T_Stages.ID_TU;

    pour ta partie filtres de recherche, il te faudra je pense passer par une autre techniques consistant à modifier toi même le recordsource de ton sous formulaire et en utilisant in dans les filtres de recherche grâce à des zones de listes autorisant le mode multiselect.

    Regarde cette discussion :

    http://www.developpez.net/forums/d15...multicriteres/

    Cldt

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  18. #18
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2016
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bonjour

    Alors j'ai essayé de régler le problème de "multi-répétition" avec le discussion, même autre. (J'ai essayé de incorporer un sous-sous formulaire fMatiereStage dans le sous formulaire fstage)
    J'ai également essayé de mettre plus de zone de texte, je me disais que si il y avait la place il le prendrai
    Cf. photo

    Auriez-vous d'autre piste à suivre ?

    Cordialement

    Gerald.jNom : unspecified.png
Affichages : 201
Taille : 289,5 Ko

  19. #19
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Gerald.j,

    ton problème est dans la constitution du sous formulaire !

    l'explication est un peu complexe mais j'essaie de te faire un retour et quelques explications sur la façon de le réaliser ces prochains jours (le temps me manque hélas)

    cldt

    jmb
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  20. #20
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Gerald.j bonjour,

    Donc je vais te fournir l'approche à ta solution qu'il faudra que tu fasses évoluer sur le principe d'une zone de liste multi-select (cette partie étant la plus facile à réaliser avec un peu de réflexions) !

    I. La constitution du formulaire :

    En basant ta requête sur la jointure des différentes tables de jonction, il est évident que la source de données de ton sous formulaire se basera sur cette requête et affichera autant de lignes que de matières, outils... dédiés à un stage. L'approche de la problématique n'est pas bonne et il va falloir penser autrement. Malgré tout la recherche doit pouvoir s'établir sur l'ensemble des filtres proposés. Nous allons donc partir de cette requête utilisant les jointures pour appliquer les filtres nécessaires.

    Nous allons utiliser la technique de cafeine :

    http://cafeine.developpez.com/access...echerchemulti/

    ou Loufab

    http://loufab.developpez.com/tutorie...ss/recherche1/

    je te conseille une lecture de ces tutoriels avant de finaliser la lecture de ma réponse.

    Nous allons donc insérer cette procédure dans le formulaire recherche :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Sub cherchestages()
    Dim CF_Filtre_D As Date, CF_Filtre_F As Date
    Dim SQL_String As String
    '
    ' constitution de la requête initiale
    '
    SQL_String = "SELECT T_Stages.ID_Stage, T_Entreprises.Nom_EN, T_Departements.Departement_DE, T_Tuteurs.Nom_TU, T_Secteurs.Secteur, T_Stages.Titre_Stage, T_Matieres.Matiere, T_Outils.Outils, "
    SQL_String = SQL_String & "[T_Services d'accueil].[Services d'accueil] FROM T_Tuteurs INNER JOIN ((((((T_Departements INNER JOIN T_Entreprises ON T_Departements.ID_Departement = T_Entreprises.ID_Departement)  "
    SQL_String = SQL_String & "INNER JOIN T_Stages ON T_Entreprises.ID_Entreprise = T_Stages.ID_Entreprise) INNER JOIN (T_Matieres INNER JOIN TJ_MatiereStage ON T_Matieres.[ID_Matiere 1] = TJ_MatiereStage.ID_Matiere) "
    SQL_String = SQL_String & "ON T_Stages.ID_Stage = TJ_MatiereStage.ID_Stage) LEFT JOIN (T_Outils RIGHT JOIN TJ_OutilsStage ON T_Outils.[ID_Outils 1] = TJ_OutilsStage.ID_Outils) ON T_Stages.ID_Stage = TJ_OutilsStage.ID_Stage) INNER JOIN (T_Secteurs INNER JOIN TJ_SecteurStage ON T_Secteurs.[ID_Secteurs 1] = TJ_SecteurStage.ID_Secteur) "
    SQL_String = SQL_String & "ON T_Stages.ID_Stage = TJ_SecteurStage.ID_Stage) LEFT JOIN ([T_Services d'accueil] RIGHT JOIN TJ_ServiceAStage ON [T_Services d'accueil].[ID_service d'accueil 1] = TJ_ServiceAStage.[ID_Service d'accueil]) ON T_Stages.ID_Stage = TJ_ServiceAStage.ID_Stage) ON T_Tuteurs.ID_Tuteur = T_Stages.ID_TU "
    '
    ' Passage des filtres
    '
    SQL_String = SQL_String & "WHERE (((1)=1) "
    '
    If Nz(Me.FiltreNom_EN, "") > "" Then
            SQL_String = SQL_String & " AND (([T_Entreprises].Nom_EN)='" & Nz(Protected_Quote(Me.FiltreNom_EN), "") & "')"
    End If
    '
    If Nz(Me.FiltreDepartement_DE, "") > "" Then
            SQL_String = SQL_String & " AND (([T_Departements].Departement_DE)='" & Nz(Protected_Quote(Me.FiltreDepartement_DE), "") & "')"
    End If
    '
    If Nz(Me.FiltreMatiere, "") > "" Then
            SQL_String = SQL_String & " AND (([T_Matieres].Matiere)='" & Nz(Protected_Quote(Me.FiltreMatiere), "") & "')"
    End If
    '
    If Nz(Me.FiltreSecteur, "") > "" Then
            SQL_String = SQL_String & " AND (([T_Secteurs].Secteur)='" & Nz(Protected_Quote(Me.FiltreSecteur), "") & "')"
    End If
    '
    If Nz(Me.Filtreoutils, "") > "" Then
            SQL_String = SQL_String & " AND (([T_Outils].Outils)='" & Nz(Protected_Quote(Me.Filtreoutils), "") & "')"
    End If
    '
    If Nz(Me.FiltreServicesAccueil, "") > "" Then
            SQL_String = SQL_String & " AND (([T_Services d'accueil].[Services d'accueil]='" & Nz(Protected_Quote(Me.FiltreServicesAccueil), "") & "')"
    End If
    '
    ' Tri sur Entreprise
    '
    SQL_String = SQL_String & ") ORDER BY [T_Entreprises].Nom_EN;"
    '
    ' Enregistrement dans la requête Qry_Stages permettant
    ' d'effectuer le regroupement
    '
    CurrentDb.QueryDefs("Qry_Stages").SQL = SQL_String
    '
    ' on passe la nouvelle requête et on rafraichit
    '
    Me.cntrVINS.Form.RecordSource = "Qry_Stages_Group"
    Me.cntrVINS.Requery
    '
    Me.Requery
    End Sub
    Ce code reconstitue donc la requête telle que présentée aujourd'hui et permettant la recherche multi-filtres.

    Code sql : 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
    SELECT T_Stages.ID_Stage,
           T_Entreprises.Nom_EN,
           T_Departements.Departement_DE,
           T_Tuteurs.Nom_TU,
           T_Secteurs.Secteur,
           T_Stages.Titre_Stage,
           T_Matieres.Matiere,
           T_Outils.Outils,
           [T_Services d'accueil].[Services d'accueil]
    FROM T_Tuteurs
    INNER JOIN ((((((T_Departements
                     INNER JOIN T_Entreprises ON T_Departements.ID_Departement = T_Entreprises.ID_Departement)
                    INNER JOIN T_Stages ON T_Entreprises.ID_Entreprise = T_Stages.ID_Entreprise)
                   INNER JOIN (T_Matieres
                               INNER JOIN TJ_MatiereStage ON T_Matieres.[ID_Matiere 1] = TJ_MatiereStage.ID_Matiere) ON T_Stages.ID_Stage = TJ_MatiereStage.ID_Stage)
                  LEFT JOIN (T_Outils
                             RIGHT JOIN TJ_OutilsStage ON T_Outils.[ID_Outils 1] = TJ_OutilsStage.ID_Outils) ON T_Stages.ID_Stage = TJ_OutilsStage.ID_Stage)
                 INNER JOIN (T_Secteurs
                             INNER JOIN TJ_SecteurStage ON T_Secteurs.[ID_Secteurs 1] = TJ_SecteurStage.ID_Secteur) ON T_Stages.ID_Stage = TJ_SecteurStage.ID_Stage)
                LEFT JOIN ([T_Services d'accueil]
                           RIGHT JOIN TJ_ServiceAStage ON [T_Services d'accueil].[ID_service d'accueil 1] = TJ_ServiceAStage.[ID_Service d'accueil]) ON T_Stages.ID_Stage = TJ_ServiceAStage.ID_Stage) ON T_Tuteurs.ID_Tuteur = T_Stages.ID_TU
    WHERE (((1)=1))
    ORDER BY T_Entreprises.Nom_EN;

    L'appel de cette procédure devra être déclenchée sur les evenements suivants :

    1. après mise à jour des filtres
    2. ouverture du formulaire
    3. réinitialisation des filtres


    La requête SQL est stockée dans une requête pré-enregistrée dans le volet de navigation et nommée Qry_Stages. Nous verrons dans le point suivant pourquoi une telle précaution.

    II. La requête de regroupement

    La requête stockée continue de renvoyer autant de lignes par stage que ce qu'il existe de matières, secteurs... Pour n'afficher qu'un ligne par stage nous allons donc procéder à la création d'une requête de regroupement devenant la source de notre sous-formulaire.

    Cette requête sera basée sur la requête Qry_Stages et nous l'enregistrerons sous Qry_Stages_Group

    En mode création, cela nous donne ceci :

    Nom : 1_Rq_Groupeby.JPG
Affichages : 171
Taille : 55,6 Ko

    et en mode sql :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT Qry_Stages.ID_Stage,
           Qry_Stages.Nom_EN,
           Qry_Stages.Departement_DE,
           Qry_Stages.Nom_TU,
           Qry_Stages.Titre_Stage
    FROM Qry_Stages
    GROUP BY Qry_Stages.ID_Stage,
             Qry_Stages.Nom_EN,
             Qry_Stages.Departement_DE,
             Qry_Stages.Nom_TU,
             Qry_Stages.Titre_Stage;

    en mode exécution nous obtenons donc une ligne par stage, en appliquant toutefois les filtres sur les champs sélectionnés.

    Nom : 2_Rq_Groupeby_exec.JPG
Affichages : 260
Taille : 27,2 Ko

    Nous allons donc utiliser cette source de données dans notre sous formulaire fstage :


    III. Le sous formulaire fstage

    Ce sous formulaire basé sur la requête Qry_Stages_Group ne renvoie donc qu'une ligne par stage. Il ne s'agit que de la première phase de la résolution de notre problème.
    La première réflexion aurait été de créer différents sous-formulaires comme sfSecteurs, sfmatieres, sfoutils... et dont les champs pères-fils auraient été basés sur l'id stage. Malheureusement Access n'accepte pas les sous formulaires en mode continus imbriqués dans un formulaire continu. Nous aurions pu également créer une zone de liste dont la requête aurait été basé sur l'id du stage mais dans ce cas la liste pour l'ensemble des enregistrements s'appuie sur l'enregistrement en cours.

    Nous allons donc modifier la requête de regroupement en appliquant un code nous permettant de restituer l'ensemble des matières directement dans la requête de regroupement. Je te laisserai travailler de la même façon sur les secteurs, outils et listes d’accueil.

    Nom : 3_Rq_Groupeby_2.JPG
Affichages : 276
Taille : 68,9 Ko

    Cette dernière colonne fait appel à un code vba permettant grâce à l'argument id_stage de retrouver toutes les matières d'un stage donnée :

    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
    Function ListeMAtieres(id_Stage) As String
    '
    ' liste des matières pour un stage donné
    ' cette fonction est appelée par la requête Qry_Stages_Group
    '
    Dim rs As DAO.Recordset
    ListeMAtieres = ""
    '
    ' constitution de la requête basée sur le filtre id_stage
    '
    Set rs = CurrentDb.OpenRecordset("SELECT T_Matieres.Matiere, TJ_MatiereStage.ID_Stage FROM T_Matieres INNER JOIN TJ_MatiereStage ON T_Matieres.[ID_Matiere 1] = TJ_MatiereStage.ID_Matiere WHERE (((TJ_MatiereStage.ID_Stage)=" & id_Stage & "));", dbOpenDynaset)
    '
    If rs.RecordCount <> 0 Then     ' il existe des enregistrements
        Do While Not rs.EOF         ' tant que pas fin de fichier boucle les enregistrements
            ' agrégation des matières
            ListeMAtieres = ListeMAtieres & rs.Fields(0) & vbCrLf
        rs.MoveNext
        Loop
        '
        ListeMAtieres = Left(ListeMAtieres, Len(ListeMAtieres) - 1) ' suppression du retour chariot
    Else
        ListeMAtieres = ""
    End If
     
    End Function
    le vbcrlf dans la concaténation des matières permet d'effectuer un retour à la ligne à chaque matière.

    en mode exécution voilà ce que nous donne le résultat :

    Nom : 4_Rq_Groupeby_exec2.JPG
Affichages : 177
Taille : 38,7 Ko

    Nous nous approchons de la vérité. Le reste n'est qu'un jeu d'enfants, il suffit tout simplement d'intégrer les champs existants afin d'obtenir le résultat souhaité :

    Nom : 5_Result.JPG
Affichages : 151
Taille : 53,1 Ko

    IV. Conclusion

    Ton problème étant résolu, il te reste à appliquer la même technique sur les secteurs, services d'accueils, outils en utilisant des zone de listes multiselect (pouvoir choisir plusieurs matières dans tes filtres).

    Tu peux t'inspirer de cette discussion pour arriver à tes fins :

    http://www.developpez.net/forums/d15...multicriteres/

    Le nombre de pièces jointes étant limité je fourni le projet dans un nouveau post

    Bonne lecture et bonne continuation

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. création d'une base de donnée par programme
    Par lassad dans le forum Bases de données
    Réponses: 9
    Dernier message: 18/10/2005, 16h36
  2. création d'une base de données
    Par cyrilng dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 18/05/2005, 14h38
  3. Réponses: 4
    Dernier message: 22/09/2004, 09h17
  4. Création d'une base de données contenant des images
    Par gandalf_le_blanc dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 16/06/2004, 15h29

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