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 :

Calcul VBA sur le résultat de 2 SQL [AC-2002]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 163
    Par défaut Calcul VBA sur le résultat de 2 SQL
    Bonjour,

    Sur MAj d'une ZL, une sub qui fait la différence ( soustraction) entre deux requêtes en SQL, voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub travail_hebdo_AfterUpdate()
    Dim a As Integer
    Dim b As Integer
    a = SQL1
    b = SQL2
    SQL1 = "SELECT Table_recrutement.id_recrutement, Table_recrutement.temps_travail FROM Table_recrutement WHERE (((Table_recrutement.id_recrutement)=" & id_personnel & ")); "
    SQL2 = "SELECT Table_notif.volume_horaire FROM Table_notif WHERE (((Table_notif.id_eleve)=" & id_eleve & ") AND ((Table_notif.Echéance)>=Now())); "
    Me.Reliquat = a - b
    Me.Reliquat.Requery
    Debug.Print
    End Sub
    Quand je place le curseur sur :
    id_personnel=2
    id_eleve=7
    sql1 =vide

    Ce qui me déroute c'est que j'ai par ailleurs dans le même sous form deux ZL en pied de form avec en Rowsource les mêmes requêtes SQL , la première ZL affichant 35 pour le SQL1, et la seconde affichant 12.

    En somme, Reliquat ( cbx) devrait afficher 23 (35-12).

    En vous remerciant avance pour vos conseils.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 163
    Par défaut
    Je viens de modifier le code pour tenter de récupérer directement les valeurs des ZL en pied de form,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub travail_hebdo_AfterUpdate()
    Dim a As Integer
    Dim b As Integer
    a = travail_hebdo.Column(1)
    b = vol_hor.Column(1)
     
    Me.Reliquat = a - b
    Me.Reliquat.Requery
     
    End Sub
    mais je me heurte à une autre difficulté:
    b=null
    alors que la ZL ( vol_hor) affiche 12 !

    a=35 ce qui est conforme à l'affichage de l'autre ZL (travail_hebdo).

    Auriez-vous une idée ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 163
    Par défaut
    Partant du constat que la variable b ne trouve pas de valeur, j'ai changé la méthode pour aller la chercher : requête sql dont voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub travail_hebdo_AfterUpdate()
    Dim a As Integer
    Dim b As Integer
    a = travail_hebdo.Column(1)
    b = SQL
    SQL = "SELECT Table_notif.volume_horaire FROM Table_notif" & _
    SQL = "WHERE (((Table_notif.id_eleve)=" & id_eleve & ") AND ((Table_notif.Echéance)>=Now())); "
     
    Debug.Print
    Me.Reliquat = a - b
    Me.Reliquat.Requery
     
    End Sub
    En plaçant le curseur sur SQl ( ligne 2), l'infobulle indique "=vide" ; sur & id_eleve &, il indique "=7" ( ce qui correspond à l'affichage en pied de form de la ZL " id_eleve")



    Si une bonne âme pouvait me mettre sur la piste ...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je ne comprends pas ce que tu veux faire

    Tu affectes à b une valeur SQL qui te modifie après, en fait cela devrait être l'inverse.

    De plus une chaine SQL de la sorte ne te donnera rien, pour l'interpréter il faut passer par un recordset style DAO.

    Donc ce que tu fais n'a pas beaucoup de sens, si tu veux récupérer une valeur seule tu peux également utiliser la fonction de domaine DLookup, il y a un tuto sur les fonctions de domaines dans mes tutos.

    Philippe

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 163
    Par défaut
    Bonjour Philippe,

    Merci pour cette explication de texte... j'en avais besoin je vais essayer de récuperer la valeur de b avec un DLookup. Pour autant ne je comprends pas pourquoi j'arrive à récupérer la valeur a et pas la b quand je passe par les numéro de colonne des ZL concernées.

    Bon je teste et te dis si c'est ok.... c'est tout bon

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 163
    Par défaut
    Bonjour Philippe,

    Je pense avoir compris pourquoi le SQL ne fonctionnait pas pour la variable b:
    la ZL affichait 12 mais contenait plus de valeurs ( taille du controle réduite), donc le SQL ramenait une liste de valeurs et pas une valeur unique.

    Alors la fonction Dlookup a permis sur tes conseils d'obtenir la valeur recherchée. Néanmoins j'ai modifié la méthode pour avoir la valeur à chaque enregistrement:
    elle est contenue dans une zone de texte qui est liée au champ fils ( volume_horaire du sous form), miroir du champ père du form principal.

    Du coup, ce nouveau code fonctionne bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub travail_hebdo_AfterUpdate()
    Dim a As Integer
    Dim b As Integer
     
     
    a = travail_hebdo.Column(1)
    b = vol_hor
     
     
    Me.Reliquat = a - b
    Me.Reliquat.Requery
    End Sub
    Mais au niveau de la gestion évènementielle, cela oblige à cliquer sur la ZL "travail_hebdo" pour avoir l'affichage de la ZL Reliquat alors que je souhaiterais qu'elle s'affiche sans clique préalable... j'ai essayé de déplacer ce code sur gotfocus de Reliquat sans succès...

    Autre tentative: sur MAJ de ZL "id_recrut" alimenter ZL "travail_hebdo" et ZL "Reliquat", avec pickup de variable a grace à Dlookup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub id_recrut_AfterUpdate()
    Dim a As Variant
    Dim b As Integer
    b = vol_hor
    a = Nz(DLookup("temps_travail", "Table_recrutement", "id_recrutement=id_recrut"), 0)
    Debug.Print
    Me.travail_hebdo = a
    Me.Reliquat = a - b
    Me.Reliquat.Requery
    End Sub
    Le curseur sur a indique a=vide , sur id_recrut: =2; or dans la table recrutement pour id_recrutement =2 il y a une valeur dans le champ temps_travail ( 28)
    Alors pourquoi Dlookup donne "vide" ?

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

Discussions similaires

  1. jsonp et calculs mathématiques sur le résultat
    Par pop_up dans le forum AngularJS
    Réponses: 9
    Dernier message: 08/07/2015, 15h23
  2. [SQL-VBA] récupérer le résultat d'une requète SQL dans un fichier txt
    Par djidanestribbal dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/02/2007, 15h25
  3. [VBA-E] calculs automatique sur une seule feuille
    Par repié dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/03/2006, 11h53
  4. Réponses: 3
    Dernier message: 11/01/2006, 18h35
  5. Utiliser SQL = (Comme "blabla*") mais En VBA sur I
    Par samlepiratepaddy dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/10/2005, 19h30

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