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 :

[VBA] fonction qui donne la valeur présente dans une table


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 77
    Points : 58
    Points
    58
    Par défaut [VBA] fonction qui donne la valeur présente dans une table
    Bonjour,je voudrais faire une fonction qui irait chercher des informations dans une table. je m'explique :
    j'ai une table avec 3 champs : départ - arrivée - durée de transport
    je voudrait une fonction durée (départ,arrivée) qui me donne la durée du transport en fonction des 2 pays.
    comment faire ?
    merci d'avance de l'aide

  2. #2
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Bonjour et bienvenue,

    Citation Envoyé par zanou666 Voir le message
    je voudrais faire une fonction qui irait chercher des informations dans une table.
    Intéresse toi aux RecordSet (cf. FAQ) ou aux DLookUp si tu as seulement besoin d'un enregistrement.

    Citation Envoyé par zanou666 Voir le message
    je voudrait une fonction durée (départ,arrivée) qui me donne la durée du transport en fonction des 2 pays.
    Intéresse-toi à la fonction DateDiff().

    En espérant t'aider.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 77
    Points : 58
    Points
    58
    Par défaut
    En fait, les 2 phrases sont un seul problème.

    j'ai essayé avec recordset, mais je n'arrive pas à paramétrer : j'arrive à avoir la valeur quand je rentre le départ et l'arrivée directement dans le code VB, mais je n'arrive pas à le transformer en fonction.

    j'ai ça dans mon VB :

    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
     
    Function recherche()
     
    Dim rst As DAO.Recordset
    Dim SQL As String
    Dim v As Variant
     
    SQL = "Select * From [Délai transport] where ([pays départ]= 'France' and [pays arrivée]='France') "
     
    'open
    Set rst = CurrentDb.OpenRecordset(SQL, dbOpenDynaset, dbReadOnly)
     
     
    'traitement
    v = rst![minimum]
     
    End Function

  4. #4
    Membre régulier Avatar de userB
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 147
    Points : 106
    Points
    106
    Par défaut
    C'est sans doute un des fondamentaux ta question, une fois que tu auras saisi la logique globale tu aurais elucider pres de 70% des problemes que tu rencontrera.

    Pour t'aider je fais grossierement la fonction en pseudo code (donc ne fait pas attention à la syntaxe)
    Je ferais quelque chose de la forme suivante :

    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
     
    Public function DuréeVol (dim P_Depart as string, dim P_Arrive as string)
     
    dim rs as new ADODB.recordset
    dim sStrSql as string
    Dim sResultat as string
     
    sStrSql = "SELECT DureeVol"
    sStrSql = sStrSql & " FROM MaTable"
    sStrSql = sStrSql & " WHERE PaysDepart = " & """" & P_Depart & """" & " AND PaysArrive = " & """" & P_Arrive & """"
     
    rs.open sStrSql, CurrentDB
     
    sResultat = rs("DureeVol") ' dans le cas ou tu ai une seule reponse pour le couple donné, sinon tu devras faire une boucle tant que avec comme condition de sorti EOF -End Of File-
     
    ' tu liberes la memoire
    rs.close
    set rs = nothing
     
    end function
    Voila voila, alors c'est dans les grandes lignes, faut qeu tu affines (enormement) le code.

  5. #5
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Remarque :
    zanou666 a utilisé DAO, le code que tu (userB) lui présentes utilise ADO.
    Il travaille sur une base Access donc mieux vaut utiliser DAO.

    Pour savoir comment parcourir avec un RecordSet avec DAO, la réponse est également dans la FAQ. (Tu as d'ailleurs un tutoriel dans la page des tuto, sur DAO et ADO)

    Sinon tu peux tout à fait utiliser ADO comme te le suggère userB.

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 77
    Points : 58
    Points
    58
    Par défaut
    Voilà le code que j'utilise, mais lorsque je calcule la valeur pour 2 pays, la réponse est #nom? . j'ai vérifié, le nom des tables, champs mais tout est correct. d'où est-ce que ça peut venir ?

    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
     
    Public Function DuréeTransport(P_Depart As String, P_Arrive As String)
     
    Dim rs As New ADODB.Recordset
    Dim sStrSQL As String
    Dim sResultat As String
     
    sStrSQL = "SELECT [minimum]"
    sStrSQL = sStrSQL & " FROM [Délai transport]"
    sStrSQL = sStrSQL & " WHERE [pays départ] = " & """" & P_Depart & """" & " AND [pays arrivée] = " & """"" & P_Arrive & """""
     
    rs.Open sStrSQL, CurrentDb
     
    sResultat = rs(minimum)
     
    rs.Close
    Set rs = Nothing
     
    End Function

  7. #7
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Essaie peut-être le tutoriel de debuggage de requêtes SQL écrites en VBA que tu trouveras dans ma signature.

    En espérant t'aider.

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 77
    Points : 58
    Points
    58
    Par défaut
    le problème vient de la ligne de SQL. quand je mets un Debug.print sur le SQL, j'obtiens cela :

    SELECT [minimum] FROM [Délai transport] WHERE [pays départ] = "" AND [pays arrivée] = "" & P_Arrive & ""

    Il ne prend pas en compte les valeurs que je lui donne quand j'appelle la fonction : Result = DuréeTransport(France, France)

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

Discussions similaires

  1. Recherche d'une valeur présent dans une table mais pas dans une autre
    Par bossLINDROS dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/06/2008, 15h12
  2. Réponses: 1
    Dernier message: 11/06/2008, 13h33
  3. [MySQL] Utiliser la valeur d'un limit présent dans une table
    Par gwena54 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/07/2007, 21h08
  4. calcul de valeurs présentes dans une liste de résultat
    Par Makaveli33 dans le forum Access
    Réponses: 8
    Dernier message: 15/05/2006, 19h03
  5. Réponses: 4
    Dernier message: 28/10/2005, 16h30

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