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 :

Transformer mes requêtes en une boucle de requêtes ?


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 33
    Points : 28
    Points
    28
    Par défaut Transformer mes requêtes en une boucle de requêtes ?
    Bonjour a tous !

    Je me heurte a un problème que j'avais réussi a outrepasser (en créant le une centaine de requête faisant la même chose, avec une donnée qui change à chaque fois).
    Cette fois ci, je ne peux pas faire cela. Puis il est temps de moins se prendre la tête et éviter les erreur du a des copier coller.
    Alors je vous explique : J'ai un outil qui me permet de faire une matrice origine destination. C'est un tableau croisée dynamique. Il ressemble a cela :

    Nom : MOD.png
Affichages : 312
Taille : 41,2 Ko

    Ce que je veux c'est désagréger cette matrice pour qu'elle revienne en ligne, c'était leur état avant de faire le tableau croisée. (J'y arrive d’ailleurs en créant une table ou j'insert petit a petit les information de ma matrice)

    Nom : DESA.png
Affichages : 246
Taille : 16,8 Ko

    Alors voila ce que je fait

    Requête A_1
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Test_desagrgation_matrice ( Origine, Destination, Valeur, pouet )
    SELECT Matrice_VL_HPM_1.R_select_depart_matrice_Origine, "1A" AS Expr1, Matrice_VL_HPM_1.[1A], [R_select_depart_matrice_Origine] & [Expr1] AS ID
    FROM Matrice_VL_HPM_1
    WHERE (((Matrice_VL_HPM_1.R_select_depart_matrice_Origine)<>"Total"));

    Reqûete A_2
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Test_desagrgation_matrice ( Origine, Destination, Valeur, pouet )
    SELECT Matrice_VL_HPM_1.R_select_depart_matrice_Origine, "1B" AS Expr1, Matrice_VL_HPM_1.[1B], [R_select_depart_matrice_Origine] & [Expr1] AS ID
    FROM Matrice_VL_HPM_1
    WHERE (((Matrice_VL_HPM_1.R_select_depart_matrice_Origine)<>"Total"));

    Requête A_3 ...... Requête B_1 ..... Requête C_1 (6 par lettre et jusqu’à K)


    Voila cela fonctionne ... Mais c'est fastidieux et en plus j'ai un problème c'est que les matrices peuvent être différentes, donc j'ai fait le nombre maximal de requête. Mais souvent Access me demande [Vopir photo ci-dessous], ce qui oblige a mettre OK,OK,OK,OK,OK,OK,OK,OK dans le vide si ces valeurs n'existe pas dans la matrice .... Horrible pour un utilisateur de l'outil
    Nom : error.png
Affichages : 122
Taille : 8,5 Ko


    Bon du coup ma question c'est : est il possible de désagrégé ma matrice O/D en 1 seul requête, du genre je parcours toute les valeurs et je te remet tout ça en ligne. Je pense que oui en utilisant une boucle, mais je me sens plutôt démuni face aux boucle dans une requête, même aux boucles tout court ...

  2. #2
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Salut,

    En effet c'est fastidieux.

    Une solution peut être de traiter ces valeurs avec du VBA à l'aide de boucles et du recordset de ta table.

    Par exemple X = nombres de lignes et Y = nombre de colonnes.

    Pour Colonne =1 à Y
    On se place sur la première ligne

    Pour Ligne =1 à X

    On récupère le nom de la ligne, le nom de la colonne et la valeur du champ puis on ouvre le recordset de ta table, on y ajoute les valeurs

    On passe à l'enregistrement suivant

    On passe au X suivant

    On passe au Y suivant

    Ici la boucle va partir de la colonne 1 et ajouter dans ta table les données à chaque fois qu'elle trouvera une ligne, quand il n'y aura plus de lignes, la boucle changera de colonnes etc etc

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Aurais tu un exemple qui peux s'appliquer dans mon cas de figure ?
    J'ai fait du VBA un peu mais je l'ai toujours intégré a mes pages de formulaires. Dans ce cas cela change t-il ?

  4. #4
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Peux tu mettre ce tableau croisé dans un formulaire ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Le tableau croisée est matérialisé en une table, donc je peux faire un formulaire avec un bouton qui exécute la boucle sur la table du tableau

  6. #6
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    D'accord,

    Alors pour l'instant tu peux faire ce formulaire avec la table contenant le tableau croisé et puis ensuite on regarde pour un code VBA.

    Peux tu après ça envoyer, STP, un Impr Ecran de ton formulaire ?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Nom : form.png
Affichages : 256
Taille : 200,2 Ko

    Nom : table.png
Affichages : 204
Taille : 19,9 Ko

    C'est exactement le même que j'ai mis en haut, sauf que l'autre est sur excel. Dans mon outil tu crées un matrice O/D, tu l'exportes tu fais des modifs dessus, puis tu l'importe de nouveau dans l'outil qui te fait le cheminement inverse. Bref c'est pas très important, mais je suis pas sur que ce sois utile de mettre les données dans un formulaire si ?

  8. #8
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Le formulaire n'est qu'une interface de traitement.

    Voici un exemple de code à utiliser, présent dans l'application en PJ, que tu pourras adapter à la tienne.

    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
    Private Sub Commande2_Click()
    Dim Y As Long
    Dim X As Long
    Dim MaxColonne As Long
    Dim MaxLigne As Long
    Dim Origine As String
    Dim Destination As String
    Dim OrgDes As String
    Dim Rt As Integer
    Dim SqlInsert As String
     
    MaxColonne = 9 ' Nb de colonne a traiter
    MaxLigne = Forms!F_MATRICE.Recordset.RecordCount
     
    For Y = 1 To MaxColonne
    Forms!F_MATRICE.Recordset.MoveFirst 'Retour sur la 1ere ligne
        For X = 1 To MaxLigne
        Destination = Forms!F_MATRICE!("Y" & Y).Caption 'Nom de la colonne (Etiquette)
        Origine = Forms!F_MATRICE!Nom 'Nom de la ligne (Champ NOM)
        OrgDes = Origine & Destination
        Rt = Forms!F_MATRICE!("X" & Y) 'Valeur
        SqlInsert = "insert into [MATRICE_OUT]  (Origine,Destination,Valeur,pouet) values (" & Chr(34) & Origine & Chr(34) & "," & Chr(34) & Destination & Chr(34) & "," & Rt & "," & Chr(34) & OrgDes & Chr(34) & ")"
        DoCmd.SetWarnings False
        DoCmd.RunSQL SqlInsert
        Forms!F_MATRICE.Recordset.MoveNext 'Ligne suivante
        Next X
    Next Y ' Colonne suivante
    MsgBox "Traitement : Fin"
    End Sub
    PJ : Matrice.zip

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Merci beaucoup, je vais regarder cela attentivement dés la semaine prochaine.
    Ton exemple en PJ est très bon !
    Je vais grâce a toi réussir a comprendre le B A BA d'une boucle

    Bonne journée

  10. #10
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    De Rien,

    Pour mieu comprendre le traitement qui va se faire avec ces boucles :

    Pour chaque colonne( boucle 1 ), on va partir de la première ligne jusqu'à la dernière ( boucle 2 )en insérerant à chaque fois les données dans la table.

    Arrivé à la dernière ligne, on va changer de colonne et repartir de la première ligne pour recommencer le traitement jusqu'à la dernière ligne de la dernière colonne.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Re bonjour !
    J'ai un petit problème, comme je te l'ai dit mes matrices peuvent différer en taille selon l'utilisateur, du coup j'essaye d'importer d'autres matrice et le formulaire est bloquer aux nombre de colonne de la première. Je sais pas si c'est clair, en gros dans l'exemple que je t'ai donner ma matrice fait 9*9 et mon but c'est que si j'importe une matrice 13*13 a la place de MATRICE, mon formulaire comprenne qu'il y ai des nouvelles données et m'affiche du 13*13 . Sauf que ce n'est pas le cas ... Les étiquettes ne changent pas (En attendant je vais regarder pour mettre a jour a l'ensemble du formulaire a chaque ouverture, le problème viens peux-être de la)

    Du coup je t'avais déjà demander, mais est-ce possible de ne pas passer par le formulaire pour le traitement ? C'est a dire exécuter le code directement sur la table que l'on viens d'importer. Au lieu de mettre Forms! .... faire en sorte que cela s’exécute sur Table! .... ??? Je n'ai pas trouver comment agir directement sur la table. Pour compter le nombre d'enregistrement sur une table j'ai trouver, mais pour le reste me revoici ...!

  12. #12
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Ci-joint la base.

    Le code VBA se trouve dans M_MATRICE, tu peux lancer ce code depuis la macro MA_MATRICE.

    A toi de l'adapter
    Fichiers attachés Fichiers attachés

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Vraiment super !
    Merci beaucoup, j'ai réussi a l'adapter parfaitement !
    Je comprend plutôt bien ce que tu m'as fournit, mais je n'aurais pas été capable de le sortir seul aussi rapidement.

    Je met comme résolu et je te remercie encore pour ton aide !

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

Discussions similaires

  1. [MySQL] Deux requêtes dans une boucle
    Par stefanelle dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 25/02/2009, 10h41
  2. [MySQL] Résultat de requête dans une boucle
    Par pcboy dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/01/2009, 16h55
  3. Comment éviter des requêtes dans une boucle
    Par dam28800 dans le forum Langage
    Réponses: 43
    Dernier message: 04/12/2008, 16h53
  4. Requête dans une boucle.
    Par flamby6969 dans le forum VBA Access
    Réponses: 11
    Dernier message: 27/11/2007, 15h49
  5. Problème de requête dans une boucle avec ADOQuery
    Par Ekik dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/05/2007, 16h07

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