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

Requêtes et SQL. Discussion :

Comment réimporter des valeurs sorties d'une table et mises dans une table temporairement récap? [AC-2013]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Femme Profil pro
    Administrateur Projets
    Inscrit en
    Mars 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur Projets
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2014
    Messages : 27
    Points : 23
    Points
    23
    Par défaut Comment réimporter des valeurs sorties d'une table et mises dans une table temporairement récap?
    Bonjour à tous,
    Tout d'abord merci à tout ceux qui rédigent des articles. C'est grâce à vous que j'en suis là aujourd'hui! (pas à ce problème mais à ce modeste niveau )

    Voici mon problème:
    Je travaille sur une base pour gérer des estimations de ressources par mois et par type de personne par projet.
    Jusque là tout va bien.

    J'ai une table qui contient pour un projet donné et sur la durée du projet une valeur par mois et par ressource:
    La liste des champs est la suivante:
    NumRefValeur (clé primaire)
    Valeur (nombre d'heures)
    LienRessource (lien à la table contenance la liste des ressources possibles)
    LienProjet (lien à la table contenant les noms de projets)
    MoisEstime (date associée à l'estimation)

    et donc pour le Projet A qui dure 3 mois je vais avoir pour les 2 types de ressources disponibles les valeurs suivantes dans ma table
    NumRefValeur |Valeur |LienRessource |LienProjet|MoisEstime

    1|345|Employé|Projet A|Mars 2018
    2|345|Employé|Projet A|Avril 2018
    3|345|Employé|Projet A|Mai 2018
    4|34|Commercial|Projet A|Mars 2018
    5|3|Commercial|Projet A|Avril 2018
    6|45|Commercial|Projet A|Mai 2018

    (pour plus de lisibilité j'ai mis du texte à la place des N°!!! pour le lien ressource et le lien projet mais dans la table ce sont bien des valeurs numériques et non texte puisque ce sont des liens à des lexiques.)

    Afin de faciliter la mise à jour des valeurs, j'ai converti cette table sous le format suivant en utilisant la méthode décrite dans "Processus de calcul de statistiques dynamiques sur des periodes mobiles." écrit par Jean-Damien Gayot (merci au passage c'est super clair et cela a fonctionné du premier coup!!)
    Une requete est faite puis à l'aide d'une table intermédiaire mise à jour pour chaque mois les valeurs de chaque type de ressource sont versées dans la table récapitulative.

    J'obtiens donc dans ma table Tbm_Temp_Recap pour le Projet A la chose suivante:
    Nom des colonnes:
    Ressources|Mars 2018|Avril 2018|Mai 2018
    Employé|345|345|345
    Commercial|34|3|45

    Une fois cette manip faite, un formulaire feuille de données s'ouvre et l'utilisateur peut modifier les valeurs contenues dans la table recap (plus facilement que dans la table contenant les données de base car plus visuel.)

    Exemple de modification:l'utilisateur à changé le nombre d'heures de plusieurs ressources sur plusieurs mois
    Ressources|Mars 2018|Avril 2018|Mai 2018
    Employé|345|428|240
    Commercial|45|83|42

    Mon problème est que je ne sais pas comment remettre les valeurs dans la table initiale.
    Je ne maitrise pas assez la manipulation des objets pour faire rentrer les valeurs... je sais écrire dans une table, je sais mettre à jour une valeur d'un champ, par contre Je ne sais pas si il n'y a pas une manière simple de verser.
    La seule que j'imagine est le balayage un par un des champs (double boucle sur le mois puis boucle sur la ressource , ou l'inverse) et remplacement en recherchant le champ associé par une requete...

    Auriez vous une piste pour m'aider???
    Je boucle et je n'arrive pas à sortir de la boucle!!!
    Sabine

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 282
    Points : 1 831
    Points
    1 831
    Billets dans le blog
    1
    Par défaut
    Bonjour.
    Et si tu faisais une petite requête d'insertion déclenchée par un bouton comme ceici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Engegistrer_Click()
    Dim rst As DAO.Recordset
    Dim req As String
    Set rst = CurrentDb.OpenRecordset("Ta_Table", dbOpenSnapshot, dbReadOnly)
            req = "INSERT INTO Ta_Table (Champ1, Champ2,..., Champn ) VALUES('" & Me.ChampFormulaire1.Value & "', '" & Me.ChampFormulaire2.Value & "', ...,  '" & Me.ChampFormulairen.Value & "'')"
            CurrentDb.Execute req
    End Sub
    Où Enregister représente le nom de ton formulaire

  3. #3
    Membre à l'essai
    Femme Profil pro
    Administrateur Projets
    Inscrit en
    Mars 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur Projets
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2014
    Messages : 27
    Points : 23
    Points
    23
    Par défaut Merci je vais essayé
    Cela me parait ideal car en effet j'ai déjà un bouton pret à accueillir ce code!
    Par contre j'avaispas penser que mon nombre de champs est variable en fonction de la durée du projet il va donc falloir que je regarde comment modifier mon sous formulaire en fonction du nombre de champs.
    Je crois avoir déjà vu quelquechose sur le forum
    J'essaie et je reviens pour dire si c'est ok

    Merci pour cette réponse

    sabine

  4. #4
    Membre à l'essai
    Femme Profil pro
    Administrateur Projets
    Inscrit en
    Mars 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur Projets
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2014
    Messages : 27
    Points : 23
    Points
    23
    Par défaut Comment trouver la valeur dans une table à la ligne I et la colonne J?????
    Bonjour
    je recherche finalement le moyen d'explorer ma table par N° de ligne et colonne
    En effet ma table recap possède autant de lignes que de type de resource et sont classées dans un ordre particulier (donc le N° de ligne me donne la valeur de la ressource à chercher dans la table initiale.)
    Pour ce qui est du N° de colonne la première colonne contient mon type de ressource et après la deuxième contient le premier mois estimé, .....Donc mon N° de colonne -1 correspond au mois à cherche dans la table initiale.

    J'imagine un balayage comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim NumColonne as integer
    Dim NumLigne as integer
    Dim ValeurAEcrire as integer
    NumLigne = (Nb record dans table recap)
    NumColonne = (nb de colonnes dans la table recap)
    For i= 1 to NumLigne  
    For j = 2 to NumColonne 
    ValeurAEcrire = Valeur (i,j) de la table recap
    Changer la valeur de la table de départ où type de ressource = i et où Mois estimé = Date serial (an( date de départ d'estimation), mois (date de départ d'estimation)+j-2,1) par ValeurAEcrire
    Next j
    Next i
    Le problème est que je ne sais pas le code pour :
    1 trouver le nombre de colonne de ma table Recap : NumColonne (on oublie j'ai trouvé ce code!!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("select * from Tbl_Temp_Recap")
    MsgBox (rst.Fields.Count)

    2 trouver la valeur contenue dans ma table récap (ValeurAEcrire) à la ligne I et colonne J (et si cela est possible) ??????????

    Pour trouver le nombre de ligne(NumLigne ) je fait une requete SQL et je compte.

    Pour ce qui est de trouver l'enregistrement à changer dans la table initiale je suis en mesure de faire la requete pour récupérer son N° d'enregistrement puis à ce N° d'enregistrement ecrire pour le champ valeur la valeur contenue dans ma variable ValeurAEcrire . Peut être existe t-il une méthode directe mais je ne connais pas la synthaxe.

    Comme vous pouvez le constater il me manque des pratiques pour la manipulation des objets DAO disons même les bases!

    Quelqu'un peut il me dire si ce code est envisageable ( valeur contenue dans ma table récap à la ligne I et colonne J) et où le trouver ?????

    Je viens très régulièrement sur ce site et les articles présents sont ma bible....mais là je ne sais pas par quel bout commencer...




    Sabine
    PS la solution du formulaire implique que je crée un formulaire basé sur ma table, formulaire dont le nombre de champs sera variable en fonction du nombre de mois de la durée du projet et je ne maitrise pas cela.

  5. #5
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Petite question : Pour chaque projet, y a-t-il toujours une seule ligne d'information par mois ou peut-il y avoir y en avoir plusieurs ?
    Parce que dans ce cas pourquoi faire compliqué. En effet, un formulaire de recherche Multicritères sur le projet et la ressource te permettrait d'afficher dans un sous formulaire la ou les lignes à modifier.

    Une piste peut-être plus simple car dans ton processus, la table temporaire correspond au résultat d'une requête analyse croisée et de ce fait les données ne sont pas modifiables en direct.

    Bonne continuation

  6. #6
    Membre à l'essai
    Femme Profil pro
    Administrateur Projets
    Inscrit en
    Mars 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur Projets
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2014
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    Bonjour
    En effet non je n'ai pas une seule valeur par projet par mois, j'ai exactement 10 valeurs une pour chaque ressource.
    Je suis en train de creuser mais j'ai trouvé une autre solution pour mon problème:
    Faire une boucle par mois
    Dans chaque mois
    faire la requête ressource/ valeur dans la table initiale
    Faire la requete ressource valeur dans la table recap
    lier les deux requêtes via la ressource et faire une mise à jour de la table initiale/ table recap.

    Cela fonctionne en faisant les étapes à la main création des requetes puis création de la requete de mise à jour.
    reste juste à le faire en VBA!!!!
    Je reviens vers le forum si je me noie

    Sabine
    Par contre je suis toujours interessée à savoir si on peut rechercher une valeur par son N° de ligne et un N° de colonne.... (faut-il que les colonnes dans acces aient un numéro????

  7. #7
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Oui, c’est possible mais pas facile d’expliquer en quelques mots. Je vais te préparer un petit exemple d’ici un ou deux jours ()
    Si tu as la patience...

  8. #8
    Membre à l'essai
    Femme Profil pro
    Administrateur Projets
    Inscrit en
    Mars 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur Projets
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2014
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    Merci c'est très gentil
    je ne suis pas à deux jours .... prend le temps qu'il te faut c'est très gentil de vouloir m'expliquer

  9. #9
    Membre à l'essai
    Femme Profil pro
    Administrateur Projets
    Inscrit en
    Mars 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur Projets
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2014
    Messages : 27
    Points : 23
    Points
    23
    Par défaut J'ai fini par trouver comment réimporter mes valeurs modifiées dans la table temporaire
    Si cela interesse quelqu'un voici le problème reformulé et la solution:
    Faciliter la saisie de données aux utilisateurs en permettant un copier coller à partir d'un fichier excel dans une table temporaire équivalente à un tableau croisé dynamique et import direct dans la base de données.
    Pour cela j'utilise le support https://jdgayot.developpez.com/tutor.../statsmobiles/ il est très bien fait merci beaucoup à Jean-Damien.
    Dans ce document vous allez trouver toute la partie concernant le passage d'une table simple à une table équivalent de l'analyse croisées dynamique:
    Dans mon cas cela m'a permis de passer de la table initiale:
    Nom : TableInitiale.PNG
Affichages : 180
Taille : 14,4 Ko
    Cette table fait le lien pour chaque mois de la valeur estimée pour un projet et une ressource

    Avec la méthode décrite dans le tuto, je suis passée à ceci:
    Nom : TableTemporaireCroiseeDynamique.PNG
Affichages : 219
Taille : 13,3 Ko
    ceci correspond à l'analyse croisée dynamique d'un des projets pour une des versions (et oui en plus j'ai des versions d'estimations!!!!)


    L'avantage de la représentation en tableau à 2 dimensions est que cela est plus parlant pour l'utilisateur et plus visuel pour suivre au moment de la saisie l'évolution par mois et par essource.
    D'autre part dans cette table temporaire, il est possible de modiffier les valeurs!!!
    Reste à réimporter ces valeurs dans la table initiale!!!!

    La méthode utilisée par jean damien pour nommer les mois est avec un incrément qui va être utilisé dans la boucle de ré-import:

    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
    Private Sub ModifierEstimationsRAF_Click()
     
    'définition des objets et variables
    Dim oDb As DAO.Database
    Dim StrSql As String
    'i représente la avriable de la boucle et correspond au nombre de mois qui ont été affichés dans la table temporaire
    Dim i As Integer
    Set oDb = CurrentDb
    Dim IntNbMois As Integer
    IntNbMois = Me!DureeRestante
    'Pour chaque mois faire la requete de mise à jour toutes mailles comprises des valeurs associées au mois
    Dim StrNomChamp As String
    Dim StrLienProjet As String
    Dim DtFinEffectue As Date
    Dim StrDate As String
    StrLienProjet = Me!NumRefProjet
    For i = 1 To IntNbMois
    DtFinEffectue = Me!DateFinReel
    StrNomChamp = "Heures_" & i
    DtFinEffectue = DateSerial(Year(DtFinEffectue), Month(DtFinEffectue) + i + 1, 0)
    StrDate = Format(DtFinEffectue, "mm dd yyyy")
     
    'requete de mise à jour de la table intiale en fonction de la table temporaire pour un mois concidéré
    StrSql = "UPDATE (T_FC_ProjetsVersion INNER JOIN T_FC_ProjetsVersion_Valeurs ON T_FC_ProjetsVersion.NumRef_VFC = T_FC_ProjetsVersion_Valeurs.LienVersionEstimation) INNER JOIN Tbl_Temp_Recap ON T_FC_ProjetsVersion_Valeurs.LienRessourceEstimee = Tbl_Temp_Recap.Ref_MailleRessource"
    StrSql = StrSql & " SET T_FC_ProjetsVersion_Valeurs.ValeurEstimation = [" & StrNomChamp & "]"
    StrSql = StrSql & " WHERE (((T_FC_ProjetsVersion.Version_FC)=0) AND ((T_FC_ProjetsVersion.LienProjet_VFC)=" & StrLienProjet & ") AND ((T_FC_ProjetsVersion_Valeurs.MoisEstime)=#" & StrDate & "#))"
    oDb.Execute StrSql
    Next
    MsgBox "L 'import des mises à jour est terminé"
    End Sub
    La requete de mise à jour est valable pour un mois concerné. Il y a une boucle par mois et donc mour chaque mois on va mettre à jour une partie du texte de la requete concernant le mois: dans la table recap , cela revient à changer le nom du champ qui stock la valeur (heure_1...2....3) où le N° correspond au n° de boucle!!!
    Dans la table contenant les valeurs, cela revient à trouver la date correspondant à ce mois (date qui varie en fonction de i également)
    Ne pas oublier d'effacer la table temporaire une fois le ré-import terminé.
    En espérant que cela aide quelqu'un.
    Bien à vous

  10. #10
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Bravo pour ta solution et merci de la mettre en ligne pour tout le monde.
    malgré tout, Je me permets de te mettre en pièce jointe ce que je t'avais promis.
    Bien sur, j'ai adapté des tables en fonction de ce que j'ai compris de ton explication initiale.

    Puisque tu connais VBA, il te sera facile de comprendre les procédures que j'ai écrites. S'il y a question n'hésite pas à demander.

    L'organisation du formulaire :
    Tu peux choisir une année et/ou un projet et en modifiant la valeur d'un montant, la table source et tempo sont mises à jour.

    Bonne continuation

    P.S : Pense à clôturer ta discussion en cliquant sur le bouton placé sous le dernier post de ton fil
    Fichiers attachés Fichiers attachés

  11. #11
    Membre à l'essai
    Femme Profil pro
    Administrateur Projets
    Inscrit en
    Mars 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur Projets
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2014
    Messages : 27
    Points : 23
    Points
    23
    Par défaut Merci beaucoup :)
    Je vais de ce pas cloturer cet échange et merci pour ton envoi, Jeannot45 cela me servira j'en suis sure.
    Merci aussi pour la localisation du bouton de cloture je l'ai cherché partout ce matin!!! les yeux ne devaient pas être bien ouverts!!!A une prochaine
    SBI

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Je n'ai pas encore regardé ta solution, mais je te propose la mienne.

    https://mon-partage.fr/f/LoCWKVjq/

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

Discussions similaires

  1. [AC-2013] Mise à jour des valeurs d'un champ zone de liste dans une table
    Par GILLES_M dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/03/2014, 21h00
  2. Réponses: 2
    Dernier message: 27/01/2014, 19h50
  3. Ecrasement des valeurs après le transfert de la variable dans une autre classe.
    Par patriot dans le forum Développement Mobile en Java
    Réponses: 0
    Dernier message: 13/05/2011, 11h39
  4. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  5. Réponses: 2
    Dernier message: 14/07/2009, 08h45

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