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 :

Requête SELECT en VBA [AC-2007]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Points : 33
    Points
    33
    Par défaut Requête SELECT en VBA
    Bonjour,

    J'ai un problème de requête en VBA. Avant toute chose voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Dim rst As Recordset
     
        courssql = "SELECT Id FROM Table1 "
        Set rst = CurrentDb.OpenRecordset(courssql)
        MsgBox rst.RecordCount
        MsgBox rst.Fields(1)
        MsgBox rst.Fields(2)
    C'est un code de test pour vous expliquer.

    Dans ma Table1, j'ai un champ Id qui contient plusieurs enregistrements. Je voudrais récupérer tous les enregistrements du champ Id de ma Table1 sauf que le RecordCount ne m'affiche que 1 résultat et quand j'affiche ce résultat c'est la première valeur qui apparaît.
    De plus la ligne MsgBox rst.Fields(2) me renvoie une erreur comme quoi le champ est vide(ce qui est logique car il n'y a qu'un résultat dans rst).

    Ce que je voudrais c'est récupérer tous les enregistrement d'un champ dans une "variable" pour pouvoir les mettre dans un formulaire mais je crois que je n'utilise pas la bonne méthode. Pouvez-vous me dire en quoi le programme utilisé au dessus est faux et comment est ce que je pourrais avoir le bon résultat.

    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Bonjour,

    Pour le recordcount,
    essayez

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    rst.movelast 'Accède au dernier enregistrent
    MsgBox rst.RecordCount 'Affiche le nombre d'enregistrement
    Pourquoi voulez vous mettre tous vos enregistrements dans une variable (je suppose un tableau ?)

    Cordialement

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par morinxav Voir le message
    Ce que je voudrais c'est récupérer tous les enregistrement d'un champ dans une "variable" pour pouvoir les mettre dans un formulaire
    Que veux tu faires exactement avec ces données dans le formulaire?

    Les mettres dans une zone de liste d'un formulaire? (liste qui permets à l'utilisateur de séléctionner une ou plusieur valeurs)

    Les utiliser comme des critères pour une requête?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Points : 33
    Points
    33
    Par défaut
    Merci pour vos réponses!

    En fait ce que je veut faire, c'est ajouter dans mon formulaire des nouveaux éléments en fonction du nombre d'enregistrement qu'il y a dans ma table.

  5. #5
    Membre actif Avatar de Flyoss
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 157
    Points : 278
    Points
    278
    Par défaut
    Bonjour,

    Je ne vois pas trop ce qui ne fonctionne pas.

    Citation Envoyé par morinxav Voir le message
    C'est un code de test pour vous expliquer.
    Peut-être s'agit-il simplement d'une erreur de frappe ou d'inattention dans le code original.

    Auquel cas si on pouvait avoir ce code...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Points : 33
    Points
    33
    Par défaut
    J'ai essayé avec le .MoveLast et ça me donne bien le nombre d'enregistrement ça marche. Donc si je comprend bien, il faut se "déplacer" dans l'objet Recorset pour accéder à l'enregistrement voulu (moveLast: le dernier , moveFirst: le premier) mais comment on atteint les autres?

  7. #7
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Citation Envoyé par morinxav Voir le message
    Merci pour vos réponses!

    En fait ce que je veut faire, c'est ajouter dans mon formulaire des nouveaux éléments en fonction du nombre d'enregistrement qu'il y a dans ma table.
    Bonjour,


    Est-ce que :

    - Vous ajoutez ces lignes en un contrôle de formulaire (avoir une liste d'enregistrement de votre table) ?

    - Vous ajoutez à une autre table des enregistrements (par exemple pour chaque ligne dans la table client, vous ajouter une ligne dans la table commande) ?

    - Vous essayez de dupliquer votre table ?

    Peut-être gagneriez vous à nous expliquer en quoi consiste votre base et ce que vous cherchez à faire (je fais une table qui gèrent XXXX et là je voudrais que quand une commande....)

    Cordialement.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Points : 33
    Points
    33
    Par défaut
    En fait j'ai une table cours qui contient un idcours et un intitulécours. Je voudrais que pour chaque cours je créer dans un formulaire x TextBox qui vont enregistrer dans un autre tables des valeurs (ici un nombre d'heures prévu de cours) pour chaque cours.

  9. #9
    Membre actif Avatar de Flyoss
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 157
    Points : 278
    Points
    278
    Par défaut
    tu as plusieurs methodes pour te déplacer.
    Movefirst, movelast, movenext, moveprevious, move (N° de ligne)

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Flyoss Voir le message
    tu as plusieurs methodes pour te déplacer.
    Movefirst, movelast, movenext, moveprevious, move (N° de ligne)
    Merci

  11. #11
    Membre actif Avatar de Flyoss
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 157
    Points : 278
    Points
    278
    Par défaut
    Pour information dans le futur:
    En appuyant sur F2 dans l'éditeur VB tu as acces aux methodes et disponibles pour chaque objets.

  12. #12
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Citation Envoyé par morinxav Voir le message
    En fait j'ai une table cours qui contient un idcours et un intitulécours. Je voudrais que pour chaque cours je créer dans un formulaire x TextBox qui vont enregistrer dans un autre tables des valeurs (ici un nombre d'heures prévu de cours) pour chaque cours.
    Est-ce que vous avez un "Cours physique - chimie" et pour ce cours session du 13/04/2012 à 10 h, durée 1 h
    15/04/2012 à 14 h, durée 2 h
    etc... ?

    Cordialement.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Points : 33
    Points
    33
    Par défaut
    En fait ce n'est pas tellement ça; le but du formulaire est de rentrer le nombres d'heures prévus sur toute l'année pour une personnes et pour chaque cours. Il y a un champs TpF (pour temps prévu français) qui sera remplie avec le nombre d'heures de français prévus pour une personne pour ce cours.

    En ce moment j'essaye de programmer ce que je cherche, c'est en bonne voie, je posterais mon programme quand il marchera.

  14. #14
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Citation Envoyé par morinxav Voir le message
    En fait ce n'est pas tellement ça; le but du formulaire est de rentrer le nombres d'heures prévus sur toute l'année pour une personnes et pour chaque cours. Il y a un champs TpF (pour temps prévu français) qui sera remplie avec le nombre d'heures de français prévus pour une personne pour ce cours.
    Si je puis me permettre une suggestion, il te faudrait donc trois tables :

    Une table tblCours : ID_Cours, Libellé
    Un table tblPersonnes: ID_Personne, Nom, Prénom

    Une table de jointure tblCours_Personnes : ID_Personne, ID_Cours, DateCours, Durée

    Il faut également définir les relations. Puis dans un formulaire basée sur la table tblCours faire un sous formulaire avec tblCours_Personnes. (l'assistant te génère automatiquement ce formulaire et son sous formulaire).

    A moins que tu ne souhaites que les informations sur les présences en cours ne soient affectées par la machine (remplissage auto d'un planning ?)

    Bon courage pour ta base

    Cordialement

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Points : 33
    Points
    33
    Par défaut
    J'ai réussi à faire fonctionner mon programme. Je le met à la suite de ce message pour des visiteurs futur.
    Sinon pour ce qui est des table proposer par Pierre, j'ai déjà ces tables dans ma base de donner (j'avais oublier de le préciser ).

    Le code est à mettre au bon endroit attention pas au chargement du formulaire car il ne peut pas s'ouvrir lui même.

    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
     
        Dim rst As Recordset
        DoCmd.RunCommand acCmdRecordsGoToNew
     
        courssql = "SELECT Id FROM Table1 "
        Set rst = CurrentDb.OpenRecordset(courssql)
        Dim controle(0 To 100) As Control
     
        rst.MoveLast
        nbr = rst.RecordCount
        rst.MoveFirst
     
     
        For i = 0 To nbr
            controle(i) = CreateControl("F_Ajout_Formation_Stagiaire", acTextBox)
            controle(i).Name = i
     
            ' --Le positionner sur le formulaire
            controle(i).Left = 100
            ' --Définir sa largeur
            controle(i).Width = 150
     
            rst.MoveNext
        Next
     
     
        DoCmd.OpenForm "F_Ajout_Formation_Stagiaire"
    Merci à vous.

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

Discussions similaires

  1. [AC-2010] Requête Select depuis VBA
    Par jslpfasc2 dans le forum VBA Access
    Réponses: 4
    Dernier message: 08/04/2014, 19h25
  2. Réponses: 2
    Dernier message: 11/01/2013, 20h10
  3. [AC-2003] Utiliser variable dans requête Select [VBA]
    Par jacda dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 12/11/2009, 16h26
  4. requête de selection sur VBA?
    Par jessy212 dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 28/08/2006, 10h58
  5. Ouvrire requête de selection en VBA ..
    Par snoopy69 dans le forum Access
    Réponses: 2
    Dernier message: 17/10/2005, 15h55

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