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 :

Fonction de domaine access +variable


Sujet :

VBA Access

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut Fonction de domaine access +variable
    Bonjour,

    J'ai crée une liste box dans un formulaire Access
    Cette Listebox contient des données issues d'une requête sql avec une variable "Vporte"qui est un nombre compris entre 50 et 63.
    Lorsque je souhaite connaitre les données issue de la porte 50, je rentre le chiffre 50 dans un Textbox de mon formulaire et j' appuie sur une bouton de commande. Et une ligne apparait dans ma Listebox avec les données issues de la porte 50
    Jusque là tout fonctionne bien.

    Mais il arrive parfois que je dois récuperer les données de toutes les portes et avec ma requête sql telle que je l'aie construite, je dois chaque fois renter le numéro de la porte et ensuite lancer ma requête sql.
    Ensuite, je dois de nouveau rentrer une nouvelle porte et de nouveau lancer ma requete sql et ceci 14 fois ( porte de 50 à 63)
    Y a t il un moyen d'alimenter mon Textbox en une seule fois ( 50 à 63) et ainsi avoir les données en une seule fois;

    Pour une meilleur compréhension j'ai insérer ci dessous, un morceau de mon code VBA avec la variable en question

    merci de votre aide


    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
    Private Sub Cmd_vrac_Click()
        Dim strInsert As String
     
     
     Vporte = Val(Texte_Porte)
     
     
       With Me.Liste_NbColisIlot
            .RowSourceType = "Table/Requête"
     
     
     
    strSQLSELECT = "SELECT T_DemiRecirculation_Vrac.N°_Porte, T_DemiRecirculation_Vrac.DESTINATION, "
     
    strSQLSELECT = strSQLSELECT + "DCount(""[Nbcolis]"", ""[T_DemiRecirculation_Vrac]"", ""[N°_Porte]=" & Vporte & " "") As nbre_Colis_DR,"

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 099
    Points : 5 217
    Points
    5 217
    Par défaut
    Bonjour,

    Normalement une listbox sert à avoir plusieurs lignes, par exemple une par porte..

    Par ailleurs la requete peut se simplifier car le dcount est sur la même table que le select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "SELECT T_DemiRecirculation_Vrac.N°_Porte, T_DemiRecirculation_Vrac.DESTINATION, count(*) As nbre_Colis_DR 
    FROM T_DemiRecirculation_Vrac WHERE [N°_Porte]=" & Vporte & " GROUP BY T_DemiRecirculation_Vrac.N°_Porte, T_DemiRecirculation_Vrac.DESTINATION"
    Enfin si la condition WHERE est omise ou remplacée par <=... and >= ... alors la requete remonte l'info pour une liste de portes
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Bonjour Nico, Effectivement, une listebox sert à avoir plusieurs lignes.
    chaque ligne correspond à des données d'une porte et j'ai 14 lignes ( porte 63 à 50).

    Dans mon première intervention, j'ai mis un bout de code SQL pour être explicite dans ma question
    Ci dessous, il y a la requete sql en entiere . Et je ne sais pas si je peux simplifier mes fonctions de domaine comme tu le dis dans ton message ..

    Code sql : 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
    SELECT T_DemiRecirculation_Vrac.N°_Porte, 
    T_DemiRecirculation_Vrac.DESTINATION,
     DCount("[Nbcolis]", "[T_DemiRecirculation_Vrac]",
     "[N°_Porte]=63 ") As nbre_Colis_DR,FormatPercent(DCount("[Nbcolis]",
    "[T_DemiRecirculation_Vrac]","[N°_Porte]=63 ")/DCount("[Nbcolis]","[T_DemiRecirculation_Vrac]")) AS TauxColis,
    DCount("[Nbcolis]","[T_DemiRecirculation_Vrac]","[N°_Porte]=63 and [Ilot]='ilot 1'and [brin]='brin2'") AS nbre_Colis_DR_Ilot1, 
    DCount("[Nbcolis]","[T_DemiRecirculation_Vrac]", "[N°_Porte]=63 and [Ilot]='ilot 2' and [brin]='brin1'") AS nbre_Colis_DR_Ilot2,
    FormatPercent(DCount("[Nbcolis]","[T_DemiRecirculation_Vrac]","[N°_Porte]=63 and [Ilot]='ilot 1'and [brin]='brin2'")/DCount("[Nbcolis]","
    [T_DemiRecirculation_Vrac]","[N°_Porte]=63 ")) AS TauxColis_ilot1,
    FormatPercent(DCount("[Nbcolis]","[T_DemiRecirculation_Vrac]","[N°_Porte]=63  and [Ilot]='ilot 2' and [brin]='brin1'")/DCount("[Nbcolis]","[T_DemiRecirculation_Vrac]","[N°_Porte]=63 ")) AS TauxColis_ilot2
     
    FROM T_DemiRecirculation_Vrac
     
    GROUP BY T_DemiRecirculation_Vrac.N°_Porte, 
    T_DemiRecirculation_Vrac.DESTINATION
     
    HAVING (((T_DemiRecirculation_Vrac.N°_Porte)=63));

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 099
    Points : 5 217
    Points
    5 217
    Par défaut
    Quelques remarques syntaxiques :
    - dcount('*'... est équivalent à dcount('[nimportequelchamp]'... (count ou dcount compte les lignes)
    - group by est inutile puisque rien n'est regroupé dans ta requete
    - having devrait être remplacé par where pour la même raison (having est normalement un test sur un agrégat)

    Tout est sur la même table donc la plupart des sous-requetes peuvent être remplacées par des agrégats sauf le dénominateur qui est le nombre total de lignes. Pour ne compter que certaines lignes cela s'écrit par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sum(iif([Ilot]='ilot 2' and [brin]='brin1',1,0))
    C'est vrai que dcount est plus souple par contre ce n'est pas du SQL standard et c'est probablement plus long à exécuter
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Merci Nico pour ces infos,
    il ne me reste plus qu'à refaire ma requet sql..
    je reviendrais vers toi si je beugue..

Discussions similaires

  1. [AC-2010] Fonctions de domaines Access 2010
    Par bremmo76 dans le forum Access
    Réponses: 0
    Dernier message: 26/04/2010, 22h31
  2. Réponses: 5
    Dernier message: 18/02/2009, 15h40
  3. Réponses: 0
    Dernier message: 28/09/2007, 10h40
  4. Créer une Fonction recherche sur Access
    Par remwideco dans le forum Access
    Réponses: 4
    Dernier message: 30/01/2006, 10h36
  5. Réponses: 2
    Dernier message: 02/12/2005, 10h53

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