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 :

Recherche sur plusieurs tables en même temps


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Recherche sur plusieurs tables en même temps
    Bonjour,

    Je suis nouveau sur ce forum, donc premier 'devoir' : Bonjour à toutes et à tous ! Je m'appelle Daniel et suis depuis quelque temps intéressé par l'automatisation des tâches en VBA sous Access. J'ai un 'petit niveau de débutant'....

    Je viens vous exposer mon problème... J'ai une base de données qui se compose de plusieurs tables de structure rigoureusement identique, qui référencent des documents (chemin, fichier, date etc…)
    J'ai créé un formulaire de recherche qui charge dans une zone de liste le nom de toutes mes tables.
    J'arrive sans problème, avec le code ci-dessous, à effectuer une recherche sur l'une ou l'autre de mes tables. Le résultat s'affiche dans une autre zone de liste.
    Ce que j'aimerais parvenir à faire (mais niveau connaissance en VBA, je bloque…), c'est pouvoir lancer la recherche sur une toutes les tables en même temps ou sur certaines d'entre elles seulement, que je sélectionnaires dans ma liste (en la rendant multi-choix).

    Auriez vous une solution ?

    Un grand merci à vous

    Daniel


    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
    Sub Rechercher ()
    Dim strCriteria As String
    Dim Tab1 As String
     
    On Error GoTo fin
    Tab1 = lst_tables.Value
    strCriteria = " FileName" & " Like ""*" & Me.txt_critere & "*"""        
     
       strSql = "SELECT " + """" + Tab1 & """" + " as Table  , FileName,FilePath,FileDate "
       strSql = strSql + "FROM " + Tab1
       strSql = strSql + " WHERE " + strCriteria
       strSql = strSql + "ORDER BY Filename" & ";"
     
     
        Me.lst_resultat.RowSource = strSql
        Me.lst_resultat.Requery 
        Me.txt_chaineSQL = strSql
        Me.nbRecords = Me.lst_resultat.ListCount
     
    Exit Sub
     
    fin:
     
    Me.lst_resultat.RowSource = ""
    End sub

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 551
    Points
    24 551
    Par défaut
    Bonjour Daniel,

    Autant se conformer aux règles d'entré en n'omettant pas le balises de code, en effet cellle-ci ne sont pas facultatives. clique sur le bouton Editer (en bas de ton post) Sélectionne ton code puis clique sur le # dans la barre de mise en page. Merci

    La solution a ton problème est une simple boucle. For ou while (c'est toi qui choisis)
    Par contre d'un point de vu strictement conceptuel je te pose la question :

    Pourquoi plusieurs tables avec la même structure, pourquoi pas une seule table avec un tag pour différencier les données de chaque groupe (table) ?

    Cordialement et bienvenue !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Bonjour Loufab,

    Merci de ton accueil. Et désormais, j'utiliserai les balises...
    Pour répondre à ta question, j'ai plusieurs tables car j'utilise ma base pour stocker les chemins de fichier contenus dans des répertoires que je scanne via un utilitaire. Donc a priori, je ne sais pas combien de tables ma base contiendra. En fait, elle évoluera en fonction du nombre de répertoires scannées...

    Quant à la boucle, c'est bien mon problème... Je sais boucler sur une liste pour récupérer les valeurs mais je ne connais pas la syntaxe de la requête SQL qui m'aggregerait tous les résultats dans ma zone de liste...

    Merci

    Daniel

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 551
    Points
    24 551
    Par défaut
    Tu peux ajouter les balises de code. Merci

    Pour ton problème :

    Les zones de liste n'accepte qu'une source de données. Ce qui oblige soit :

    de travailler avec Union pour lier tes requetes Select, ça peut devenir vite une usine à gaz. il y a un risque de dépassement de capacité 1024 caractères pour les variables string et 65000 caractères pour les objets requetes.

    de stocker le résultat de tes select dans une table temporaire. Donc remplacer la select par une insert. Pas de problème de capacité par contre on refait quelque chose d'existant (plusieurs tables en une seule).

    de stocker le repertoire de plus haut niveau pour n'avoir plus qu'une table.
    Dans ce cas plus de boucle nécessaire. Il n'y a plus qu'une table. tout est simplifié au niveau du code et de SQL.

    Quoi qu'il en soit voilà à quoi cela devrait ressembler.

    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
    Dim strCriteria As String
    Dim strTable As String
    Dim i As Long
    On Error GoTo fin
     
    For i = 0 To Me.Lst_Table.ListRows
        strTable = Me.Lst_Table.ItemData(i)
     
    strCriteria = " FileName" & " Like ""*" & Me.txt_critere & "*"""
     
    if len(strSql)>0 = strSQL & " UNION "
     
    strsql = strsql +" SELECT " & strTable & ".FileName, "
    strsql = strsql + strTable & ".FilePath, "
    strsql = strsql + strTable & ".FileDate "
    strsql = strsql + "FROM " + strTable
    strsql = strsql + " WHERE " + strCriteria
    strsql = strsql + "ORDER BY Filename "
     
     
    Next
     
    strSQL = strSQL & ";"
     
    Me.Lst_Resultat.RowSource = strsql
    Me.Lst_Resultat.Requery
    Me.txt_chaineSQL = strsql
    Me.nbRecords = Me.Lst_Resultat.ListCount
     
    Exit Sub
     
    fin:
     
    Me.Lst_Resultat.RowSource = ""
     
    End Sub

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Bonjour Loufab

    Merci pour ta réponse à mon problème...qui se trouve désormais résolu ! C'est vrai que conceptuellement, ca parait bizarre d'avoir plusieurs tables de structure identique, et que je pourrais donc agréger en une seule. Mais chaque table correspond à un répertoire que je scanne régulièrement pour repérer des ajouts/modifications de documents. Je ne peux donc pas scanner en même temps tous les répertoires dont le contenu serait stocké dans une seule table.

    Bonne journée

    Daniel

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 551
    Points
    24 551
    Par défaut
    ...Mais chaque table correspond à un répertoire que je scanne régulièrement pour repérer des ajouts/modifications de documents. Je ne peux donc pas scanner en même temps tous les répertoires dont le contenu serait stocké dans une seule table.
    Ayant créer un produit à peut près similaire (inventaire de sauvegardes sur cd) je t'assure que c'est possible.

    Comme dans ton cas je ne pouvais pas lire tous les cd en même temps, pourtant l'ensemble est stocké dans une seule et même table. Il suffit de lancer le process de remplissage dans une table et non plusieurs.

    Enfin l'essentiel c'est que cela soit fonctionnel et que ça t'apporte pleine satisfaction.

    Cordialement,

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/07/2006, 19h45
  2. Requête sur deux tables en même temps
    Par will89 dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/04/2006, 11h01
  3. [MySQL] Recherche sur plusieurs tables
    Par hubidev dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/03/2006, 10h42
  4. Group by sur plusieurs table de même squelette
    Par hackrobat dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 13/03/2006, 19h41
  5. Comptez sur deux tables en même temps
    Par genova dans le forum Langage SQL
    Réponses: 12
    Dernier message: 13/09/2004, 18h58

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