Requête et tableau VBA

Comment transférer le contenu d’une requête dans un tableau Visual Basic ?

Avant de démarrer, il faut savoir qu’une requête se manipule en VBA à l’aide d’un objet Recordset (DAO.Recordset ou ADODB.Recordset). Cet objet est déjà une forme de tableau en lui-même. Ce qui veut dire qu’il n’est généralement pas nécessaire de le transférer spécifiquement dans un tableau VBA.

Si malgré tout vous avez besoin de transférer le résultat d’une requête, voici une méthode (parmi d’autres) qui peut faire l’affaire. Dans l’exemple, une requête Analyse croisée est transférée dans un tableau VBA nommé avarValeurs.

Quelques remarques supplémentaires :

  • Le programme se contente d’afficher les résultats dans la fenêtre Exécution ([Ctrl] + G). A vous d’améliorer selon vos besoins…
  • L’objet Recordset expose une méthode GetRows() qui lit un certain nombre de lignes dans une requête (ou une table), et qui construit automatiquement un tableau à 2 dimensions en fonction des résultats.
  • La variable qui reçoit les données doit être de type Variant ; elle devient un tableau bi-dimensionnel après avoir été alimentée par GetRows().
  • Le nombre fourni à GetRows() précise le nombre de lignes à extraire du Recordset. Restez raisonnable : un grand nombre de lignes risque d’occuper pas mal de place en mémoire !
  • La taille du tableau VBA est variable, en fonction du nombre de colonnes et de lignes de la requête. La fonction UBound(avarValeurs) donne l’indice maximum de la première dimension du tableau. Donc si vous avez 12 colonnes/champs, UBound(avarValeurs) renvoie 11. Idem pour les lignes, mais il faut interroger la 2ème dimension du tableau, donc UBound(avarValeurs, 2).
  • Seules les données de la requête sont transférées dans le tableau VBA. Ce qui explique le bout de code spécifique destiné à afficher les noms des colonnes.

Vous aimerez aussi...

6 réponses

  1. xavier dit :

    Bonjour,
    Je debute en VBA access et j’avoue je bloque. j’ai besoin de faire appel depuis un bouton a une requete et apres l’afficher dans un tableau de mon formulaire et lui passer 2 paramètres mais je n’en suis pas la…
    simplement quand j’appelle ma requête il genere déjà une erreur;

    Argument non valide

    Private Sub ventilation_Click()

    Dim db As DAO.Database
    Dim rst As DAO.Recordset

    Set db = CurrentDb()

    Set rst = db.OpenRecordset(« facture_sfr_ventil », dbopsnapshot)

    Pouvez vous m’aider ?

    • Hervé Inisan dit :

      Pour que ce code fonctionne, il faut tout d’abord que la référence « Microsoft DAO » soit cochée dans le menu Outils/Références (elle peut s’appeler différemment selon la version d’Access).
      Ensuite, l’ouverture de la requête est plutôt :

      Il faut du coup qu’une requête « facture_sfr_ventil » existe dans la base.

      Par contre, si c’est pour afficher des résultats à l’écran, je ferais différemment : les Recordsets sont pratiques pour le traitement de données en arrière-plan, moins pour l’affichage.
      J’utiliserais plutôt un sous-formulaire, basé sur la requête, et placé sur le formulaire principal.

      Ouala !

  2. Hervé Inisan dit :

    jabal > Merci de ton intérêt pour le site. Il ne s’agit pas vraiment d’un club, mais d’un ensemble de ressources autour d’Access. Si tu es intéressé, voici quelques adresses :

    1. Le Grenier Access (ce blog).
    2. Le site principal self-access.com (avec des cours, des quiz, des Assistants Access et quelques tutoriaux)
    3. Le forum de discussion (si tu as des questions spécifiques, c’est par là que ça se passe 🙂 )

    J’espère que ça peut aider.

  3. jabal dit :

    Je veux etre membre de votre Club

  4. shalk dit :

    MERCIIIIIIII ! ! ! ! !

    ça marche, et en plus j’ai compris.
    Il ne me reste plus qu’à mettre tout ça dans les cellules.

  5. tarik dit :

    Merci pour toutes ces informations , il est super votre site !!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *