1. #21
    Modérateur
    Avatar de bertiny
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2013
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2013
    Messages : 908
    Points : 1 156
    Points
    1 156
    Billets dans le blog
    1

    Par défaut

    Bonjour Angé12345
    Je peux bien t'aider à faire une bonne modélisation de ta base de données à la seule condition que tu me décrives de manière précise ce que chaque table est supposée faire. Car il y a trop de désordre dans ta base de données et c'est pour ça que tu n'obtiens pas ce que tu veux. Cette question devait être très facile si la Base de données était bien faite.
    Je prendrai pour exemple que dans ta base de données il n'existe aucune relation entre les tables.

    Cordialement

    Pensons à améliorer nos compétences en toute humilité car aucune oeuvre faite par un humain n'est parfaite!!!

  2. #22
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante Log
    Inscrit en
    février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistante Log
    Secteur : Industrie

    Informations forums :
    Inscription : février 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par olra72 Voir le message

    Essaye de digérer tout ça et donne-nous la liste de tes objets, en langage commun. Nous pourrons alors te suggérer une structure de tables qui les représentent correctement. Ne t'occupe pas des formulaires pour l'instant !
    Bonjour bonjour Olivier,

    Merci encore pour ton temps et tes explications.

    J'ai effectivement dû digérer et comprendre un peu la logique. Eric : ce n'est pas faute de vouloir essayer de comprendre la logique d'ACCESS. Je le fais petit à petit et comme Olivier, aucun tuto n'est réellement explicite dans le sens où chaque BDD est propre à un besoin et une problématique.
    Et c'est pareil avec un formateur. J'ai suivi une formation pour les bases (vraiment basiques car je n'avais jamais ouvert access avant) mais là est toute la complexité d'ACCESS c'est qu'une structure et la logique de BDD sont tellement propres à chacun....!!Je fais mon max et ce forum m'aide beaucoup car il répond à ma problématique tout en m'aidant de manière générale à apprivoiser peu à peu ce logiciel.

    Olivier : pour en revenir à ma digestion (LOL).
    J'ai fait le ménage et réfléchis à mes objets (tables). Je me retrouve donc avec 4 uniques tables. Une T_Opérateurs qui contient tout ce qui est propre à mon Opérateur et qui ne changera jamais (son ID auto, NOM Prénom, Login, CEL, Type contrat, Site). Une table T_Service_Activité qui contient mes services et activités qui ne seront pas à toucher. Une table T_Saisie_Heures qui va être rempli (via un formulaire dans l'avenir) avec les données dont j'ai besoin et qui va aller chercher dans d'autres tables des infos (de la T_Opérateurs et de la table T_Service_Activités. Et une table T_Volumes qui va être complétée uniquement manuellement.

    Avec ça, j'ai tenté de faire ma requête. Echec car seuls les données ayant un couple d'Heures et de Volumes remontent. Or il me faut tout. Volumes n'ayant pas d'heures. Heures n'ayant pas de volumes. Et le couple heures/volumes comportant le même Service_Activité.

    Ci-joint ma BDD modifiée.

    A ta disposition,
    A plus tard.
    Fichiers attachés Fichiers attachés

  3. #23
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2016
    Messages : 85
    Points : 108
    Points
    108

    Par défaut

    En pièce jointe, une version corrigée vraiment propre (mais peut-être loin des concepts que tu souhaitais représenter).

    Ce que j'ai représenté moi :
    * un opérateur avec toutes ses infos
    * des objets "heures" réalisées par un opérateur donné pour un service donné, à une date donnée,
    * des objets "volumes" réalisées par un opérateur donné pour un service donné, à une date donnée.

    Le même opérateur peut, le même jour, travailler pour plusieurs services différents (soit en heure, soit en volume). Idem pour travailler pour le même service, mais sur plusieurs jours différents.
    Le même opérateur peut travailler plusieurs fois pour le même service et le même jour, soit en heure, soit en volume.
    Ça, ce sont mes hypothèses ou, disons, les "concepts" que je souhaite représenter (pour info, si j'étais parti de là, je n'aurai pas fait deux tables séparées T_Heures et T_Volumes mais une table combinées avec Service_ID, Date, Heure et Volume ... quitte à ce qu'un de ces deux derniers champs reste vide - mais, bon !)

    La première requête r_Operateur_Services_Dates compile une liste des combinaisons distinctes opérateur, service et date pour lesquelles il existe soit un objet heure, soit un objet volume.

    La deuxième requête r_Operateur_Heures_Volumes réalise les regroupements et totaux nécessaires pour donner, par opérateur, service et date, la somme de toutes les heures et de tous les volumes, à partir du moment où il y a au moins un des deux (tu vois le problème ? est-ce que les deux colonnes peuvent être vides ? Il vaudrait mieux pas ;-)

    Au passage, regarde bien la fenêtre Relations. Dans ta base, j'ai trouvé plein de relations bizarres (ex. de Date à Date).

    Bonne analyse,

    PS: j'ai modifié les données pour couvrir les différentes combinaisons (heures sans volume, volume sans heures, etc.)
    Fichiers attachés Fichiers attachés

  4. #24
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante Log
    Inscrit en
    février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistante Log
    Secteur : Industrie

    Informations forums :
    Inscription : février 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par bertiny Voir le message
    Bonjour Angé12345
    Je peux bien t'aider à faire une bonne modélisation de ta base de données à la seule condition que tu me décrives de manière précise ce que chaque table est supposée faire. Car il y a trop de désordre dans ta base de données et c'est pour ça que tu n'obtiens pas ce que tu veux. Cette question devait être très facile si la Base de données était bien faite.
    Je prendrai pour exemple que dans ta base de données il n'existe aucune relation entre les tables.

    Cordialement
    Bonjour Bertiny,

    Je n'avais pas vu votre message je suis désolée.
    Je peux vous faire une synthétisation de mon besoin et voir comment mettre en place ma BDD ?

    Je vais aussi voir la réponse d'Olivier qui me propose une BDD propre

  5. #25
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante Log
    Inscrit en
    février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistante Log
    Secteur : Industrie

    Informations forums :
    Inscription : février 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par olra72 Voir le message
    En pièce jointe, une version corrigée vraiment propre (mais peut-être loin des concepts que tu souhaitais représenter).
    Whaou Olivier ! Merci !!
    J'avoue avoir un peu de mal à comprendre la conception de la BDD que tu m'as fourni (je vais l'étudier un maximum) mais la requete finale correspond parfaitement à mon besoin.
    Cependant j'ai un petit problème. Lors de ma saisie (heures ou volumes) tout part de mon login. C'est à dire que les données que je vais mettre dans ma table Heures et ma table Volumes comporte la notion de LOGIN. Comment cela va t-il se passer dans ce contexte ? Comment vais-je pouvoir agrémenter mes tables sans cette notion ?

    La saisie des heures se fait manuellement par une personne via un formulaire. Opérateur par Opérateur.
    La saisie des volumes se fait manuellement par mois en faisant des extractions de tableau de bords (excel).

    D'autre part, dans mes tables heures et volumes la notion nominative de 'Services' est indispensable pour mon contrôle...?

    Pour la requete Opérateurs Services Dates : pour le coup je suis incapable de l'a déchiffrer en langage sql n'y connaissant rien

    En ce qui concerne les relations, lors de ma formation (que je vais commencer à remettre en cause et en doute) on m'a expliqué qu'il fallait mettre en relation tous les "termes" communs (dates avec dates, login avec login, CEL avec CEL) etc sans trop se poser de question.

    Punaise je suis vraiment larguée et j'en suis navrée.

  6. #26
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2016
    Messages : 85
    Points : 108
    Points
    108

    Par défaut

    J'ai été formateur aussi. Entre ce que je disais vraiment (en contexte) et ce que me restituait parfois mes stagiaires (qui avait mémorisé la recommandation mais sans le contexte) j'ai eu de belle surprises. Il est aussi possible que ton formateur n'ait pas été un "vrai" développeur ACCESS mais juste quelqu'un qui restituait ses lectures. J'ai déjà vu ça ...

    Installer des relations entre tables demande pas mal d'expérience - intégrité référentielle ou pas ? Effacement automatique ou pas ? - c'est difficile à expliquer. A l'usage, ça se "sent" - et il m'arrive toujours de faire des boulettes à ce sujet (mais je m'en aperçois assez vite).

    A propos de ton "tout part de mon login" : Cela suppose donc que tes logins seront sans ambiguïté - donc sans doublons. Là, tu as le choix : soit tu gardes "ID_Operateur" en NumeroAuto et, dans les propriétés du champ "Login", tu ajoutes index - sans doublon ; soit tu transformes "ID_Operateur" (et donc tous les "Operateur_ID") en Texte court (vide d'abord les données et efface les relations, puis réinstalle-les après) tout en le laissant en clé primaire. Dans ce dernier cas, tu ne parleras plus de "l'opérateur n° 3" mais de "l'opérateur dont le login est smoc". En fait, ça n'a pas grande importance !

    Quand tu créeras des formulaires de saisie, tu pourras choisir un opérateur à partir d'une liste déroulante de "NOM prénom" (à supposer que tu n'ais pas de vrais homonymes) et le formulaire remontera tout seul à l'ID_Operateur (quel qu'il soit : NumeroAuto ou Texte court) avant de créer une entrée, en heure ou en volume, pour cet opérateur-ci. La plupart du temps les bases contiennent des tas d'indices internes (ID_xxx) que l'on ne voit jamais apparaître dans les formulaires.

    Je vais voir si je peux trouver une série d'exemples de problèmes simples (gérer un bibliothèque, un hôtel, des courses cyclistes) - avec le "bon" modèle en face. Ça doit bien exister quand même ...

  7. #27
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante Log
    Inscrit en
    février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistante Log
    Secteur : Industrie

    Informations forums :
    Inscription : février 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Bonjour Olivier,

    Je refais surface.
    En effet ça doit être ça pour mon formateur... Dommage, 3 jours en temps complet de formation.
    Mes logins seront en effet sans ambiguité. Chaque personne possède un login propre et sans doublon.

    Ci-joint ce que j'ai fait pour la table Opérateurs et les relations. Et en effet, comme tu le disais, je n'ai pas bien sû si il fallait cocher "supprimer les enregistrements en cascade" ?

    D'autre part, pour le contrôle et la saisie dans les tables Heures et Volumes il faut impérativement que je puisse lire le nom Service_Activité et non pas le Service_ID en numérique.

    Et maintenant la requête ne fonctionne plus
    Punaise suis larguée.

    Merci d'avance pour ton (votre) aide
    Fichiers attachés Fichiers attachés

  8. #28
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2016
    Messages : 85
    Points : 108
    Points
    108

    Par défaut

    Ton problème vient des tables T_Heures et T_Volumes ou le champ s'appelle "Opérateur_ID" alors que, dans les requêtes, il est écrit "Operateur_ID" (sans l'accent). Corrige ça et tout rentrera dans l'ordre (et tu devras remettre des données- tes tables sont vides).

    De manière générale, il vaut mieux ne jamais utiliser d'accent ou de caractères spéciaux (à part le caractère souligné) dans les noms des champs, des tables ou des requêtes - uniquement dans les zones textes des formulaires. Un accent, ça se voit mal ... comme tu vois !

    Quand à ta remarque sur l'apparence numérique ou pas d'un champ "Operateur_ID", ça peut se contourner comme dans les formulaires : transforme le champ de ta table en liste déroulante basée sur les deux premiers champs de T_Operateurs, avec masquage du premier (cf. largeur des colonnes : 0;4cm). Dans ce cas, bien que ton champ contienne toujours une valeur numérique, lors de l'ouverture de la table, cette valeur sera (visuellement) remplacée par le NOM prénom correspondant ... mais attention quand même : cela peut paraître pratique mais c'est assez confusing.

    En fait, en mode "utilisateur", on ne devrait jamais aller voir dans les tables mais toujours passer par des formulaires (et pas en mode "feuille de données") qui se chargeront de tout ça, et de bien d'autres choses (filtres, tris, corrélations complexes par assemblages de plusieurs tables).

    Ah oui - une dernière remarque - trois jours de formation pour Access, c'est déraisonnable ! Avec des pros de l'informatique, ça serait minimum une grosse semaine rien que pour faire le tour. Avec des utilisateurs non-informaticiens mais codeurs dans l'âme, deux semaines en cravachant sévère ! Avec des utilisateurs formés à la bureautique et rien d'autre, deux fois deux semaines avec un mois d'essais persos entre ... et ça juste pour obtenir un bon débutant bien engagé, pas un développeur assez autonome pour sauter dans le grand bain !

    Cordialement,

  9. #29
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante Log
    Inscrit en
    février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistante Log
    Secteur : Industrie

    Informations forums :
    Inscription : février 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Bonjour Olivier,

    Encore une fois merci.

    Je retiens la leçon pour les accents et caractères spéciaux. En tant que grande administrative et surtout amoureuse de la langue française, je vais avoir du mal à prendre ce réflexe de ne pas mettre les accents mais je vais y arriver et être vigilente.

    OK pour l'utilisation des formulaires.
    Cependant, il m'est difficilement possible d'utiliser un formulaire pour la saisie de mes volumes (pour les heures c'est OK). A moins que par un formulaire on puisse faire un copier coller d'un tableau excel ? (ce je fais aujourd'hui). Vu la quantité et le nombre de tableau différent je ne peux utiliser la fonction exporter. De même que pour le contrôle ou correction des volumes saisis (mais aussi et surtout des heures) il serait préférable d'avoir la notion de nominative et non d'un numéro Service_ID ou Operateur_ID au sein même de ma table.

    Je ne sais pas si je suis claire ?

    En fait il faudrait vraiment que les tables Heures et Volumes aient la même structure visuelle que ma BDD initiale mal faite. Est-ce possible tout en ayant une BDD propre et bien montée ?

    Je suis tout à fait en phase avec toi sur la formation. Surtout que, je précise, nous avons consacrer une journée complète sur les états. Or en pratiquant peu à peu ACCESS, c'est bien loin d'être la priorité et notamment en terme de conception de BDD...
    0.50jrs sur les requetes c'est quand même sacrément court. Et je précise également que les deux trois questions que j'ai posé sur mon formulaire il n'a pas su me répondre ou même me le faire sur ma BDD.
    Donc on se débrouille comme on peut en devant répondre aux Supérieurs et en passant par des forums comme celui-ci avec des personnes adorable pretes à aider, comme vous !

    Merci encore.

  10. #30
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2016
    Messages : 85
    Points : 108
    Points
    108

    Par défaut

    La meilleure approche est surement d'écrire du code VBA pour sélectionner et importer des données Excel dans des tables temporaires, puis remanier ces données vers des tables bien conçues. Ce n'est pas pour la beauté du geste, c'est juste pour que tes tables ACCESS soient "normalement" exploitables. Si tu laisses un désordre externe contaminer la structure de ta base, tu n'y survivras pas !

    Tu trouveras ci-dessous l'essentiel du code nécessaire pour l'import. Pour la suite, tout dépend d'où tu pars et où tu veux arriver. Tu peux remanier tes données directement en VBA (DAO ou ADO), ou créer des requêtes intermédiaires de reformatage du type "UPDATE ..." ou "INSERT ..."

    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
     
     
    Public gvoDB As DAO.Database ' Une seule copie de la DB courante !
     
    Public Function Fn_TableExists(tNm As String) As Boolean
    ' Teste l'existence d'une table
        Dim strNom As String
        On Error Resume Next
        strNom = CurrentData.AllTables(tNm).name
        Fn_TableExists = (Err.Number = 0)
    End Function
     
    Public Function Fn_TmpName() As String
    ' Génère un nom de table temporaire et sécurise son utilisation
        If gvoDB Is Nothing Then Set gvoDB = CurrentDb
        Fn_TmpName = "ttmp_" & Format(Date, "yymmdd") & (Int(Timer * 100))
        ' Et, pour débug, au cas où une ancienne table du même nom trainerait encore ...
        If Fn_TableExists(Fn_TmpName) Then gvoDB.Execute "DROP TABLE " & Fn_TmpName & ";"
    End Function
     
    Public Function Fn_DropTmpName(tNm As String)
    ' Efface une table temporaire, créée précédement avec Fn_TmpName ci-dessus ou définie manuellement
        If gvoDB Is Nothing Then Set gvoDB = CurrentDb
        On Error Resume Next: gvoDB.Execute "DROP TABLE " & tNm & ";": On Error GoTo 0
    End Function
     
    Public Function Fn_SelectXLSX() As String
    ' Sélection d'un fichier xlsx
        Fn_SelectXLSX = ""
        Dim FD As Office.FileDialog: Set FD = Application.FileDialog(msoFileDialogOpen)
        FD.Title = "Sélectionnez un fichier..."
        FD.AllowMultiSelect = False
        FD.Filters.Clear
        FD.Filters.Add "Excel", "*.xlsx"
        FD.FilterIndex = 1
        If FD.Show() Then Fn_SelectXLSX = FD.SelectedItems(1) ' Retourne le chemin complet vers un fichier Excel .xlsx
        Set FD = Nothing
    End Function
     
    Public Function Fn_Import_Data() As String
    ' Importe un fichier .xlsx dans une table temporaire 
        ' Choix du fichier à importer
        Dim fullNm As String: fullNm = Fn_SelectXLSX
        If fullNm = "" Then Exit Function                          ' <== SORTIE PREMATUREE !
        Dim tNm As String: tNm = Fn_TmpName: Fn_Import_Data = tNm
        ' Import du premier onglet par défaut (quel que soit son nom) ..
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, tNm, fullNm, True
    	... à compléter par une exploitation puis un effacement de la table ou renvoyer le travail à l'appelant ...
    Si c'est du one-shot, tu peux aussi passer par l'interface ACCESS (cf. Données externes / Importer et lier / Excel / etc.). Si tu dois le faire chaque semaine, avec des fichiers sources qui peuvent changer de nom et se balader de partout, le code ci-dessus te seras utile.

    Cordialement,

  11. #31
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante Log
    Inscrit en
    février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistante Log
    Secteur : Industrie

    Informations forums :
    Inscription : février 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par olra72 Voir le message
    La meilleure approche est surement d'écrire du code VBA pour sélectionner et importer des données Excel dans des tables temporaires, puis remanier ces données vers des tables bien conçues. Ce n'est pas pour la beauté du geste, c'est juste pour que tes tables ACCESS soient "normalement" exploitables. Si tu laisses un désordre externe contaminer la structure de ta base, tu n'y survivras pas !

    Tu trouveras ci-dessous l'essentiel du code nécessaire pour l'import. Pour la suite, tout dépend d'où tu pars et où tu veux arriver. Tu peux remanier tes données directement en VBA (DAO ou ADO), ou créer des requêtes intermédiaires de reformatage du type "UPDATE ..." ou "INSERT ..."

    Si c'est du one-shot, tu peux aussi passer par l'interface ACCESS (cf. Données externes / Importer et lier / Excel / etc.). Si tu dois le faire chaque semaine, avec des fichiers sources qui peuvent changer de nom et se balader de partout, le code ci-dessus te seras utile.

    Cordialement,
    Bonjour Olivier,

    OUUUUUH
    AU SECOURS !!!

    Pour que je vais expliquer au mieux ma méthode actuelle :

    Pour commencer, je fais cela quotidiennement. Chaque matin.

    Je vais chercher mes tableaux de bords sur internet, je les enregistres en Excel, puis je convertis mes données (via convertir puis ajouts de colonnes et d'information pour que ça colle parfaitement à ma table T_Volumes. Et je prends juste la sélection de la veille, que je copie (en sélectionnant la ligne avec l'étoile sur ACCESS) :

    Nom : vvvvvv.JPG
Affichages : 43
Taille : 30,0 Ko

    Je fais cela sur une bonne dizaine de tableaux de bords.
    (d'où la nécessité d'avoir bien la nomination et non un numéro du service/activité dans la table T_Volumes....)

    Est-ce propre ?
    Si non, avec le code que tu m'as spécifié sera-t-il possible de continuer à faire cela ? = comment faire ?

    A savoir que j'ai un fichier BDD par mois (impossible de faire autrement)

    A bientôt,
    Cordialement

  12. #32
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2016
    Messages : 85
    Points : 108
    Points
    108

    Par défaut

    Hé bé ! On n'est pas sortis de l'auberge ...

    Faire ça tous les jours, c'est du travail de singe (ie. répétitif et risqué, surtout les lendemains de fête) !

    Je vais voir si je peux te faire une micro-maquette qui importe un fichier xlsx et qui le "ventile" dans une table ou deux. Il faut juste que je trouve un exemple parlant mais pas trop complexe quand même. Après ce sera à toi de t'en inspirer pour l'adapter à ton problème ! A vue de nez, je dirai que tes chances sont de une sur trois, une sur cinq ... à moins que tu sois prête à y passer tes nuits ?

    Peut-être qu'il faudrait reconsidérer tout le problème ... par exemple en faisant appel à une boîte externe (une qui soit honnête, hein, ça doit bien se trouver ...). Au fait, et la tienne de boîte, est-elle honnête ? Parce que, si c'est pour marquer des employées à la culotte, et maximiser les bénéfices des actionnaires, ce n'est pas trop mon truc ...

    A+,

  13. #33
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2016
    Messages : 85
    Points : 108
    Points
    108

    Par défaut

    Hello,

    Ci-joint une application Biblio2. Lancer le formulaire Main_Form et appuyer sur le bouton, cela appelle une fonction qui demande de sélectionner un fichier xlsx (prendre le fichier joint). Cela va l'importer dans une table temporaire et le parcourir pour compléter les tables t_Auteurs et t_Livres des éléments manquants.

    Remarque bien que le fichier Excel parle d'"Auteur" et de "Titre", dans une seule table, alors que les tables de la BD parlent d'Auteur_Nom et de Livre_Titre et sont séparées, puis reliés par une relation (Ah Oui ! Et le champ Auteur_ID de t_Livres utilise le mode "Liste déroulante" qui donne l'impression qu'il contient un nom alors qu'il ne contient qu'une ID).

    Regarde aussi les relations. Avec l'effacement en cascade à partir de t_Auteurs, dès que tu effaces un auteur cela fera disparaître tous ses livres (qui, sinon, se retrouveraient orphelins).

    Tu peux lancer l'import autant de fois que tu voudras, en effaçant tout ou partie des tables : au final, tu te retrouveras toujours avec les mêmes données (seules les IDs changeront).

    Des questions sur le code ? J'ai essayé d'y mettre les lignes qui m'ont servies le plus (comme la récupération de l'ID du dernier objet créé en date).

    Bonne lecture et bonne chance pour la suite,
    Fichiers attachés Fichiers attachés

  14. #34
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante Log
    Inscrit en
    février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistante Log
    Secteur : Industrie

    Informations forums :
    Inscription : février 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par olra72 Voir le message
    Hé bé ! On n'est pas sortis de l'auberge ...

    Faire ça tous les jours, c'est du travail de singe (ie. répétitif et risqué, surtout les lendemains de fête) !

    Je vais voir si je peux te faire une micro-maquette qui importe un fichier xlsx et qui le "ventile" dans une table ou deux. Il faut juste que je trouve un exemple parlant mais pas trop complexe quand même. Après ce sera à toi de t'en inspirer pour l'adapter à ton problème ! A vue de nez, je dirai que tes chances sont de une sur trois, une sur cinq ... à moins que tu sois prête à y passer tes nuits ?

    Peut-être qu'il faudrait reconsidérer tout le problème ... par exemple en faisant appel à une boîte externe (une qui soit honnête, hein, ça doit bien se trouver ...). Au fait, et la tienne de boîte, est-elle honnête ? Parce que, si c'est pour marquer des employées à la culotte, et maximiser les bénéfices des actionnaires, ce n'est pas trop mon truc ...

    A+,
    Pas de souci pour l'honnêteté. C'est justement pour eux (employés) qu'on fait tout ça. Déjà en place sur d'autres sites mais malheureusement chaque site à sa propre logique et problématique.

  15. #35
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante Log
    Inscrit en
    février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistante Log
    Secteur : Industrie

    Informations forums :
    Inscription : février 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par olra72 Voir le message
    Hello,

    Ci-joint une application Biblio2. Lancer le formulaire Main_Form et appuyer sur le bouton, cela appelle une fonction qui demande de sélectionner un fichier xlsx (prendre le fichier joint). Cela va l'importer dans une table temporaire et le parcourir pour compléter les tables t_Auteurs et t_Livres des éléments manquants.

    Remarque bien que le fichier Excel parle d'"Auteur" et de "Titre", dans une seule table, alors que les tables de la BD parlent d'Auteur_Nom et de Livre_Titre et sont séparées, puis reliés par une relation (Ah Oui ! Et le champ Auteur_ID de t_Livres utilise le mode "Liste déroulante" qui donne l'impression qu'il contient un nom alors qu'il ne contient qu'une ID).

    Regarde aussi les relations. Avec l'effacement en cascade à partir de t_Auteurs, dès que tu effaces un auteur cela fera disparaître tous ses livres (qui, sinon, se retrouveraient orphelins).

    Tu peux lancer l'import autant de fois que tu voudras, en effaçant tout ou partie des tables : au final, tu te retrouveras toujours avec les mêmes données (seules les IDs changeront).

    Des questions sur le code ? J'ai essayé d'y mettre les lignes qui m'ont servies le plus (comme la récupération de l'ID du dernier objet créé en date).

    Bonne lecture et bonne chance pour la suite,
    Merci pour ta rapidité Olivier.

    Je vais m'inspirer de ça en regardant comment je pourrais faire (aîe aîe aîe j'ai du boulot !!!!!!!! Ca me paraît tellement compliqué !!)... Le mieux serait de créer un fichier excel ou je fais déjà toutes les manips dont je t'ai parlé avant. Et ensuite faire l'import via le bouton Main_Form (= d'ailleurs ce bouton est créer à partir du module c'est ça ? Comme sur Excel en fait ?) Il faut que le fichier porte toujours le même nom c'est ça ?

    J'irai ensuite sur la première table que tu m'avais créer et j'ajouterai ce bouton dans cette BDD. Pour avoir au final mon besoin initial : tous les volumes et toutes les heures même si pas de volumes/heures en face.

    Parfait pour la notion de liste déroulante. Je n'arrive pas à comprendre bien le truc mais je pense que c'est parce qu'il me manque tellement tellement de notion, base, trucs et astuces et essentiels dans ACCESS avec ma petite formation qui s'avère avoir été merd**ue au final

    Je reviendrais très certainement vers toi, quand j'aurai réussi (ou pas, mais soyons optimiste) à monter le truc comme je l'aimerais !!

    A bientôt et merci encore pour ton temps, ta rapidité et ton efficacité.

    A +

  16. #36
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2016
    Messages : 85
    Points : 108
    Points
    108

    Par défaut

    "Le mieux serait de créer un fichier excel ou je fais déjà toutes les manips dont je t'ai parlé avant" - Non ! C'est justement ce qu'il faut éviter. Pars des fichiers tels qu'ils sont ! L'ordi sera toujours plus performant que toi pour exécuter un certain traitement sans se tromper.

    "Il faut que le fichier porte toujours le même nom c'est ça ?" - Non ! Justement pas ! Le fichier peut changer de nom et de lieu. La seule chose qui apparaît en dur dans le code, c'est le nom des colonnes ... mais elles peuvent changer de place sans problème.

    Le plus simple serait que tu me fasses passer un lot de ces fameux fichiers Excel (si besoin, anonymise quelques peu les données), disons les résultats sur une semaine mais - j'insiste - sans modification de structure aucune : pas d'ajout de colonnes, pas de changement de format - rien !

    A+

  17. #37
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante Log
    Inscrit en
    février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistante Log
    Secteur : Industrie

    Informations forums :
    Inscription : février 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    "Non ! C'est justement ce qu'il faut éviter. Pars des fichiers tels qu'ils sont ! L'ordi sera toujours plus performant que toi pour exécuter un certain traitement sans se tromper" - Gloups d'accord M'sieur ! Plus performant c'est sans doute. Si on arrive à tout automatiser par des macros ou autre ça sera vraiment super mais je vois difficilement la faisabilité de la chose, mais les portes sont tellements grandes via les macros tu as raison.

    "Non ! Justement pas ! Le fichier peut changer de nom et de lieu. La seule chose qui apparaît en dur dans le code, c'est le nom des colonnes ... mais elles peuvent changer de place sans problème." OK ça marche, les colonnes ne portent pas le même nom... Mais il y a quand même des petites choses à faire

    "Le plus simple serait que tu me fasses passer un lot de ces fameux fichiers Excel (si besoin, anonymise quelques peu les données), disons les résultats sur une semaine mais - j'insiste - sans modification de structure aucune : pas d'ajout de colonnes, pas de changement de format - rien ! OK Chef = ci-joint du coup, 3 des "quelques" tableaux que je dois exploiter en format brut de pomme lorsque je les enregistre de mon logiciel.

    Donc ce que je fais : je convertie pour transformer en colonne. J'ajoute une colonne devant (pour correspondre au format des colonnes ACCESS) et j'ajoute les notions de Services_Activités dans la collone à côté des données dont j'ai besoin :
    *Pour le tableau Tri carton : la donnée sera la première colonne *cartons bipés au total* et le service est "OT - Prep OT carton (02)"
    * Pour le tableau Ventilation : la donnée est également la première colonne "nbr de pièces" et le service "RETOUR B - Ventilation"
    * Pour le tableau Compactage : toujours première colonne : "nbr de carton" et le service "RETOUR B - Compactage"

    Tu peux donc te rendre compte que les colonnes ne portent pas le même nom !

    Et il y a une autre extraction que je fais qui est sous un autre format (en tableau excel toujours mais déjà converti...) et dans ce tableau j'ai deux colonnes où les données me servent.

    Faisable ? Jouable ?
    Il y a du taff ?

    En fait ça roule plutôt bien avec ma façon de faire aujourd'hui , juste que je n'ai pas de volume si je n'ai pas d'heures mdr...

    Merci encore (je vais arrêter de le dire je crois !)

    A+
    Fichiers attachés Fichiers attachés

  18. #38
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2016
    Messages : 85
    Points : 108
    Points
    108

    Par défaut

    Je n'ai rien compris à tes fichiers - pas d'heures, pas de volumes (ou pas repérables en tant que tels), rien qui nous ramène clairement à nos échanges précédents !

    Sans rire, tu as des efforts à faire pour apprendre à "abstraire" une problématique, càd à reformuler un problème du monde réel (ex. "gérer un zoo") en une version schématique (ex. décrire des emplacements, des animaux, des soigneurs, des plans de nourrissages ou de soins, tracer et planifier ceci et cela mais ni ceci ni cela, etc, etc.).

    La version schématique fixe un lexique (une série de mots-clés, ex. "opérateur", "login", "site"), délimite les relations opérationnelles entre ces mots (ex. un opérateur a un login unique qui l'identifie sans ambiguïté, chaque opérateur intervient sur plusieurs sites) et définit en gros ce qu'on veut en faire et aussi (plus difficile) ce qu'on ne veut pas faire (ex. on veut des bilans d'actions site par site et semaines par semaines mais, dès qu'un site est fermé, on souhaite - ou on ne souhaite pas - conserver l'historique de tout ce qui s'y est passé, avec des gens qui ont peut-être quitté le navire entretemps).

    Oublie nos échanges précédents et reprends tout à zéro. Le problème, ce n'est ni la BD ni le code mais d'arriver à décrire les données/informations que tu as et ce que tu veux en tirer !

  19. #39
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante Log
    Inscrit en
    février 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistante Log
    Secteur : Industrie

    Informations forums :
    Inscription : février 2018
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Je n'ai rien compris à tes fichiers - pas d'heures, pas de volumes (ou pas repérables en tant que tels), rien qui nous ramène clairement à nos échanges précédents ! => les heures sont saisis à la main via un formulaire. Je n'ai aucun moyen de les avoir de façon informatique à ce jour. Les volumes sont les pièces que je t'ai décrit ci-dessus (pcs ou cartons). Il est possible de modifier le terme volume en pièces ou cartons, pour moi ça ne me pose aucun problème.

    Sans rire, tu as des efforts à faire pour apprendre à "abstraire" une problématique, càd à reformuler un problème du monde réel (ex. "gérer un zoo") en une version schématique (ex. décrire des emplacements, des animaux, des soigneurs, des plans de nourrissages ou de soins, tracer et planifier ceci et cela mais ni ceci ni cela, etc, etc.). => mon monde réel : "gérer des heures et volumes services". Ma version schématique : je veux toutes les heures réparties par service et activité et les volumes associés pour déterminer une productivité individuelle.

    La version schématique fixe un lexique (une série de mots-clés, ex. "opérateur", "login", "site"), délimite les relations opérationnelles entre ces mots (ex. un opérateur a un login unique qui l'identifie sans ambiguïté, chaque opérateur intervient sur plusieurs sites) et définit en gros ce qu'on veut en faire et aussi (plus difficile) ce qu'on ne veut pas faire (ex. on veut des bilans d'actions site par site et semaines par semaines mais, dès qu'un site est fermé, on souhaite - ou on ne souhaite pas - conserver l'historique de tout ce qui s'y est passé, avec des gens qui ont peut-être quitté le navire entretemps).
    Mon lexique, si je l'explique comme je l'entends : ce sont les mots clés, qui serviront à faire les relations. J'aurai donc : LOGIN, OPERATEUR, SITE, SERVICE_ACTIVITE, HEURES, VOLUMES
    Les relations sont : L'opérateur (nom prénom) possède un login unique, sans doublon possible (par contre : avec une gestion d'intérimaire je suis dans l'obligation de duppliquer ma BDD chaque mois). Chaque opérateur déclare des heures (saisies via formulaire donc) et engendre des volumes sur certains services_activité via notre logiciel. Ils ne peuvent intervenir que sur un site.
    Ce que je veux :
    Je veux toutes les heures des opérateurs même si pas de volumes
    Je veux tous les volumes des opérateurs même si pas d'heures
    et je veux que les heures et volumes ayant le même Service_Activité se retrouvent sur la même ligne = pour calculer la prod. individuelle.


    Oublie nos échanges précédents et reprends tout à zéro. Le problème, ce n'est ni la BD ni le code mais d'arriver à décrire les données/informations que tu as et ce que tu veux en tirer ! SNIF SNIF suis mal barrée !

  20. #40
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2016
    Messages : 85
    Points : 108
    Points
    108

    Par défaut

    Il manque encore des infos : quid des dates et/ou des horaires ?
    Un opérateur logue des heures ou des volumes sur un service-activité - soit - mais peut-il le faire plusieurs fois par jour et/ou sur plusieurs service-activité différents, par exemple deux fois en heures et trois fois en volume, ventilés sur quatre service-activités différents ?

    Et ce que tu appelles la productivité individuelle, c'est quoi ? les deux totaux totaux-heures et totaux-volumes jour par jour, semaine par semaine, mois par mois ?

    Quand à tes lignes "toutes même si partiellement vide", ça ramène forcément aux deux étages de requêtes que je t'ai déjà passé : un premier niveau pour avoir la liste complète des personnes concernées soit par des heures, soit par des volumes (DISTINCT + UNION) ; un second niveau pour reparcourir cette liste et faire la somme des heures et des volumes.

    A+

Discussions similaires

  1. Aide sur SQL
    Par 19881010 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/10/2016, 16h06
  2. Aide sur SQL-Serveur
    Par netsoft dans le forum Développement
    Réponses: 4
    Dernier message: 25/09/2011, 00h29
  3. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  4. Aide sur Requête SQL
    Par devdev dans le forum MS SQL-Server
    Réponses: 3
    Dernier message: 11/05/2005, 12h33
  5. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59

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