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 :

Extraire données d'une table bouclant sur elle-même [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Points : 270
    Points
    270
    Par défaut Extraire données d'une table bouclant sur elle-même
    Bonjour,

    Dans une base existante, je dois récupérer les données de plusieurs tables et les placer dans un tableau Excel. Je travaille à partir d'Excel (plus facilement disponible sur les postes). Je me connecte à la base, exécute des requêtes, lit les recordset, place les données dans un tableau Excel... Mais je galère à extraire les données de la table ELOuv qui "boucle" sur elle même (ne sachant pas combien de boucle il peut y avoir et que ce ne sera pas le même nombre d'un fichier à un autre).

    Pour les liaisons entre tables:
    Pour chaque ligne Etude.[Type] = 501 alors Etude.[NumCode] 1 -> + ELOuv.[Num Tache]
    Pour chaque ligne ELOuv.[Type sous Tache] = 501 alors ELOuv.[Num sous Tache] 1 -> + ELOuv.[Num Tache]

    Ex.:
    Etude.[NumCode] = 14491, ELOuv.[Num Tache] = 14491, j'obtiens 29 lignes dont ELOuv.[Num sous Tache] = 5882 (pour l'exemple)
    Lorsque je trie ELOuv.[Num Tache] = 5882 (ELOuv.[Type sous Tache] = 501), j'obtiens 4 lignes ELOuv.[Num sous Tache] = 3903; 29082; 11936; 9136
    Lorsque je trie ELOuv.[Num Tache] = 3903 (ELOuv.[Type sous Tache] = 501), j'obtiens 4 lignes 7988; 1396; 20229; 339
    J'ai essayé plusieurs choses: requêtes, parcourir la table avec des boucles, mais à chaque fois je coince sur le nombre de boucle à utiliser. Dans mes recherches j'ai vu qu'il était possible de faire des fonctions récursives???

    Je joins la base nettoyée des données personnelles. Base.zip. Merci d'avance à ceux qui jetterons un oeil

    Gdal

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 266
    Points
    34 266
    Par défaut
    Salut,

    concernant les boucles possibles, la regle est que lorsque tu ne connais pas a l'avance le nombre d'iterations, tu passes :
    - soit par un boucle Do Loop
    - soit par une boucle Do While

    Maintenant il faut eter capable de detecter la "fin" de ton traitement, as-tu une regle qui dit par exemple "pour un ID 1, il n'y a plus traitement si le champ X est a Null" par exemple

    Une fois ces 2 elements choisis, le code devrait etre nettement plus abordable =]
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Points : 270
    Points
    270
    Par défaut
    Salut,

    Fonction récursive:
    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
     
    Private Sub SousOuvrage(intID As Integer)
     
        Dim objConnexion As New ADODB.Connection
        Set objConnexion = fct_Connection
     
        Dim strSQL As String
        strSQL = "SELECT * " & _
                 "FROM ELOuv " & _
                 "WHERE ELOuv.[Num Tache] = " & intID & " " & _
                 "ORDER BY ELOuv.[Num ligne];"
     
        Dim objRST As New ADODB.Recordset
     
        With objRST
     
            objConnexion.Open
            .Open strSQL, objConnexion
            .MoveFirst
     
            ' Parcourir les enregistrements
            Do While Not .EOF()
     
                ' Traitement 1
     
                ' Traitement 2 = Appel récursif avec condition d'appel
                If objRST![Type sous Tache] = 501 Then
                    Call SousOuvrage(objRST![Num sous Tache])
                End If
     
                ' Enregistrement suivant
                .MoveNext
     
            Loop
     
            .Close
            objConnexion.Close
     
        End With
     
    End Sub
    Gdal

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/08/2013, 17h24
  2. Extraire données d'une table par date
    Par Hombe dans le forum Langage SQL
    Réponses: 7
    Dernier message: 08/11/2006, 23h03
  3. Pb table liée sur elle même
    Par mastasushi dans le forum Access
    Réponses: 12
    Dernier message: 17/05/2006, 10h43
  4. comment extraire donnee d'une table sur un fichier
    Par 80stephanie dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/03/2006, 11h50
  5. TABLE pointant sur elle-même, requete de selection recursive
    Par Mike@Nestor dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/07/2005, 14h50

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