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

VBA Access Discussion :

Boucle sur une nouvelle Table [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 51
    Points
    51
    Par défaut Boucle sur une nouvelle Table
    Bonjour,
    J'ai un soucis au niveau d'une boucle dans une table. (Boucle que je n'arrive pas à faire malgré plusieurs recherches, surement mal faites car je pense que je ne suis pas la première personne à poser cette question).
    J'ai une table comprenant la totalité de mes données. Je fais, grâce à plusieurs listes déroulantes, un filtre. Jusque là tout va bien.


    Avec un bouton, (btn_visu), j'enregistre les résultats dans une table temporaire que je supprime à la fin du sub.
    Cependant j'arrive pas à communiquer avec cette nouvelle table, afin d'effectuer une boucle (que je ne sais pas encore faire non plus pour le moment) sur la totalité des résultats.

    Voici le code complet de ce qui se passe lors du clique de mon bouton:

    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
     
    Private Sub btn_visu_Click()
        Dim intfic As Integer
     
        intfic = FreeFile
        Open "Liens\data.xml" For Output As intfic
        Print #intfic, "<?xml version=""1.0"" encoding=""UTF-8""?>"
        Print #intfic, "<markers>"
     
        If Me.Filter <> "" Then
        strSQL = "Select [Mes variables] into [requete_temporaire] from [STATIONS] Where" & Me.Filter & ";"  'Filtre fonctionnel créé précédemment
        DoCmd.RunSQL (strSQL)
        End If
     
    'Zone où j'aimerai effectuer ma boucle
            Print #intfic, [Nom_Court]
     
        DoCmd.RunSQL ("DROP TABLE requete_temporaire")
        Close intfic
     
     
    End Sub
    En vous remerciant d'avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    Citation Envoyé par toinehxc Voir le message
    surement mal faites car je pense que je ne suis pas la première personne à poser cette question
    En effet, le forum regorge de topics qui traitent du sujet. Tu as même un tutoriel.

    En cherchant un peu dans l'aide d'Access, tu aurais pu trouver aussi que Docmd.RunSQL permet d'exécuter uniquement des requêtes "action " (update, delete, insert) :

    Citation Envoyé par Aide d'access
    La méthode RunSQL exécute l'action ExécuterSQL.....
    Citation Envoyé par Aide d'access
    L'action ExécuterSQL permet d'exécuter une requête action dans Microsoft*Access à l'aide de l'instruction SQL correspondante
    Donc pour résumer, voici la technique à employer pour parcourir les enregistrements d'une table en VBA :

    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
    Dim strSQL As String
    Dim rst as DAO.Recordset
     
    ' Si Me.Filter est une chaîne de caractères, ne pas oublier de le mettre entre simple quotes comme ci-dessous
    strSQL = "SELECT * FROM MaTable WHERE monChamps='" & Me.Filter"';"
    Set rst = CurrentDb.OpenRecordset(strSQL)
     
    Do Until rst.EOF
        'traitement de l'enregistrement en cours
        Msgbox rst("monChamps")
        ' Si jamais on veut sortir de la boucle
        If rst("monChamps2") = maVariable Then Exit Do
        rst.movenext
    Loop
     
    rst.Close
    Si tu veux parcourir chaque champs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim fld As DAO.Field
    Do Until rst.EOF
        For Each fld In rst.Fields
            Debug.Print fld.Name & " = " & fld.Value & vbCrLf
        Next fld
        rst.MoveNext
    Loop
    N.B : Ne pas oublier d'activer la référence Microsoft DAO 3.x Object Library

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 51
    Points
    51
    Par défaut
    Effectivement et j'en suis désolé.

    Merci beaucoup de ton aide.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Tiens du coup, je me suis amusé à faire une fonction qui génère un fichier XML à partir d'une requête

    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
    Public Sub generateXML(MaRequete As String, nomFichier As String)
        Dim rst As DAO.Recordset, fld As DAO.Field
        Dim oFSO As Scripting.FileSystemObject, oTxt As Scripting.TextStream
        Dim dossier As String
        Dim i As Long
     
        On Error GoTo Err_generateXML
     
        If Len(MaRequete) = 0 Then Exit Sub
     
        ' Initialisation
        i = 1
        dossier = "D:\test\"
        Set rst = CurrentDb.OpenRecordset(MaRequete)
        Set oFSO = New Scripting.FileSystemObject
        oFSO.CreateTextFile dossier & nomFichier & ".xml", True
        Set oTxt = oFSO.OpenTextFile(dossier & nomFichier & ".xml", ForWriting)
     
        ' Ecriture de l'en-tête
        oTxt.WriteLine "<?xml version=""1.0"" encoding=""UTF-8""?>"
     
        ' Ecriture des données XML
        oTxt.WriteLine "<recordset>"
        ' Parcours de la requête
        Do Until rst.EOF
            oTxt.WriteLine "<record number = """ & i & """>"
            For Each fld In rst.Fields
                oTxt.WriteLine "<" & fld.Name & ">" & fld.Value & "</" & fld.Name & ">"
            Next fld
            oTxt.WriteLine "</record>"
            i = i + 1
            rst.MoveNext
        Loop
        oTxt.WriteLine "</recordset>"
     
        MsgBox "Traitement terminé"
     
    Exit_generateXML:
        'Libération
        If Not rst Is Nothing Then rst.Close
        If Not oTxt Is Nothing Then oTxt.Close
        Exit Sub
     
    Err_generateXML:
        ' Gestion des erreurs
        Select Case err.Number
            Case Else
                MsgBox "Erreur n°" & err.Number & vbCrLf & "Description : " & err.Description & vbCrLf & "Source : " & err.Source, vbCritical, "Erreur"
        End Select
        Resume Exit_generateXML
    End Sub
    ça s'utilise comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub btn_genererXML_Click()
        generateXML "SELECT * FROM MaTable", "nomDuFichierACreer"
    End Sub

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 51
    Points
    51
    Par défaut
    Et bah, c'est très intéressant. La réutilisation de la fonction est simplifiée, cela va grandement m'aider.
    Merci bien.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/02/2014, 11h43
  2. Réponses: 1
    Dernier message: 05/03/2012, 13h37
  3. problème de boucle sur une table
    Par alexphi dans le forum VBA Access
    Réponses: 7
    Dernier message: 02/06/2010, 15h40
  4. ecrire une nouvelle table sur un projet adp
    Par jbellein dans le forum Access
    Réponses: 9
    Dernier message: 31/12/2008, 15h54
  5. Réponses: 2
    Dernier message: 01/04/2008, 16h30

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