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 :

Récupérer une valeur dans une requête [AC-365]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Points : 73
    Points
    73
    Par défaut Récupérer une valeur dans une requête
    Bonjour

    Plusieurs jours que je sèche sur un problème qui parait simple... mais c'est certainement parce que je suis débutant ! Grâce à des forums et des recherches, j'ai crée le code ci-dessous qui marche très bien sauf une ligne !!!

    somme_prix_unitaire = DLookup("SommeDePrix unitaire", "R_analyse_jours_de_ski_par_client_groupe", "[code_produit]='" & Code_produit & "' AND [client]='" & num_client & "'")

    Cette ligne ci-dessus me pose un problème !
    J'ai dans une requête "R_analyse_jours_de_ski_par_client_groupe" 3 colonnes "Code_Produit" "Client" "SommeDePrix unitaire"
    Dans mon code VBA je récupère "Code_Produit" "num_client" et ça fonctionne puisque je les affiche dans la dernière message box, Grâce à ces 2 valeurs , j'aimerais récupéré la valeur "SommeDePrix unitaire" correspondant dans la requête... Mais ça bug !!!

    Merci de votre aide car je désespère et sans cette valeur , tout mon code ne sert à rien ...

    Pascal

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    Private Sub Ocass_AfterUpdate()
    'Déclaration des variables
    Dim Code_produit As String
    Dim nb_lignes As Integer
    Dim prix_entretien As Integer
    Dim total_jour As Integer
    Dim total_encaissé As Integer
    Dim Prix_Vente_Officiel As Integer
    Dim Prix_Achat As Integer
    Dim choix_etat As String
    Dim Rabais As Integer
    Dim prix_loc_saison As Integer
    Dim prix_final_max As Integer
    Dim Année As Date 'Nouvelle variable pour stocker l'année
    Dim Age As Integer 'Nouvelle variable pour stocker l'âge du ski
    Dim num_client As Long
    Dim somme_prix_unitaire As Integer
    Dim CA_à_réaliser As Integer
    Dim Genre As String
     
    ' Récupération du code produit à partir du formulaire
    Code_produit = Me.Code_produit.Value
     
    ' Récupération du genre
    Genre = Me.Genre.Value
     
    ' Sélection de l'état du produit
    choix_etat = Me.Ocass.Value
     
    ' Récupération de l'année de la requête
        Année = DLookup("Année", "R_Analyse_jours_de_ski", "code_produit = '" & Code_produit & "'")
     
        ' Calcul de l'âge du ski en années
        Age = Year(Date) - Year(Année)
     
    'Récupération du numéro client
    num_client = Me.Parent.N°_Client.Value
     
    ' Calcul du prix d'entretien
    nb_lignes = DCount("*", "R_Analyse_jours_de_ski", "code_produit = '" & Code_produit & "'")
     
    'MsgBox somme_prix_unitaire
     
    If Genre = "Ski - Ski Set" Then
       prix_entretien = (nb_lignes) * 10
    ElseIf Genre = "Ski - Chaussure" Then
       prix_entretien = (nb_lignes) * 5
    End If
     
    ' Récupération de la valeur SommeDePrix unitaire pour le N°_Client et le code_produit donnés
    DoCmd.OpenForm "F_Analyse_jours_de_ski_par_client_groupe", acFormDS, , "[code_produit] = '" & Code_produit & "'"
     
    somme_prix_unitaire = DLookup("SommeDePrix unitaire", "R_analyse_jours_de_ski_par_client_groupe", "[code_produit]='" & Code_produit & "' AND [client]='" & num_client & "'")
     
    ' Calcul du total de jours de ski
    total_jour = DSum("[Jours de ski]", "R_Analyse_jours_de_ski", "[code_produit] = '" & Code_produit & "'")
     
    ' Calcul du total déjà payé
    total_encaissé = DSum("[Prix unitaire]", "R_Analyse_jours_de_ski - 180 jours détail", "[code_produit] = '" & Code_produit & "'") * 0.8
     
    ' Récupération du prix de vente
    Prix_Vente_Officiel = DLookup("Prix_vente", "R_Analyse_jours_de_ski", "code_produit = '" & Code_produit & "'")
     
    ' Récupération du prix d'achat
    Prix_Achat = DLookup("[Prix d'achat]", "R_Analyse_jours_de_ski", "[code_produit] = '" & Code_produit & "'")
     
    ' Calcul Valeur matos calculé
    CA_à_réaliser = (Prix_Achat + prix_entretien) * 2.5
     
     
    ' Calcul du prix de rabais en fonction de l'état du produit
    Select Case choix_etat
        Case "Neuf"
            Rabais = total_jour * 0.2 + (Age * 5)
        Case "Usagé"
            Rabais = total_jour * 0.4 + (Age * 5)
        Case "Vieux"
            Rabais = (total_jour * 0.8) + (Age * 5)
    End Select
     
    'prix_final_mini = CA_à_réaliser - total_encaissé
    prix_final_max = Prix_Vente_Officiel * ((100 - Rabais) / 100)
    prix_loc_saison = DLookup("Prix_location", "R_Prix_Loc_Saison", "code_produit = '" & Code_produit & "'")
     
    ' Affichage des informations dans un message box
    MsgBox "Code produit : " & Code_produit & vbNewLine & _
    "Genre : " & Genre & vbNewLine & _
     "Age : " & Age & " ans" & vbNewLine & _
       "État du produit : " & choix_etat & vbNewLine & _
        "Total de jours de ski : " & total_jour & vbNewLine & _
        "Nombre de service : " & nb_lignes & vbNewLine & _
        "Rabais : " & Rabais & " %" & vbNewLine & vbNewLine & _
    "Prix d'achat : " & Prix_Achat & " CHF" & vbNewLine & _
    "Prix d'entretien : " & prix_entretien & " CHF" & vbNewLine & _
            "Prix de vente officiel: " & Prix_Vente_Officiel & " CHF" & vbNewLine & _
             "Valeur mini à atteindre: " & CA_à_réaliser & " CHF" & vbNewLine & _
             "Déjà encaissé -20% : " & total_encaissé & " CHF" & vbNewLine & vbNewLine & _
           "Prix Final Max : " & prix_final_max & " CHF" & vbNewLine & _
             "Prix location saison : " & prix_loc_saison & " CHF"
    End Sub

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Points : 73
    Points
    73
    Par défaut
    Nom : Capture d’écran 2023-03-23 222744.png
Affichages : 83
Taille : 59,5 Ko

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    bonsoir,
    peut être en essayant de définir correctement la variable Année :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Année As Date 'Nouvelle variable pour stocker l'année
    c'est à dire en Integer plutôt que Date
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Points : 73
    Points
    73
    Par défaut
    Merci mais j'ai l'erreur ici :
    somme_prix_unitaire = DLookup("SommeDePrix unitaire", "R_analyse_jours_de_ski_par_client_groupe", "[code_produit]='" & Code_produit & "' AND [client]='" & num_client & "'")

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    OK, est-ce un message d'erreur ou un résultat faux ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Points : 73
    Points
    73
    Par défaut
    Le code fonctionne si je met cette ligne avec un ' devant comme du commentaire ! Mais autrement il me met un message erreur de syntaxe...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Points : 73
    Points
    73
    Par défaut
    Dans mon code j'utilise déjà DLookup mais uniquement avec un critère de recherche !
    Et dans ma nouvelle ligne, il doit chercher dans la requête avec 2 critères "Code_Produit" et "N°_Client". Dans ma requête un Code_produit peut exister plusieurs fois et un N°_Client aussi ! Par contre il n'y a qu'une seule combinaison pour par exemple le code_produit "2252AA" avec le client "48"

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    Code_produit et client sont des variables de type numérique, donc pas besoin d'apostrophes
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Points : 73
    Points
    73
    Par défaut
    Code_produit se compose de 4chiffres et 2 lettres et N°_client uniquement des chiffres ! Le problème peut venir de là ?

    MErci

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    oups désolé, j'ai mal lu, c'est uniquement client qui est numérique
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    Le problème peut venir de là ?
    oui
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Points : 73
    Points
    73
    Par défaut
    Voici à quoi ressemble ma requête:
    Nom : Capture d’écran 2023-03-23 225541.png
Affichages : 74
Taille : 117,7 Ko
    Donc si mon code_produit est 2227AA et client 48, j'ai besoin de récupérer la valeur de 80
    Images attachées Images attachées  

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    oui
    Merci mais sans succès !

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    montre au moins le code modifié
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  15. #15
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    j'ai trouvé (que maintenant, je suis vraiment fatigué)
    "SommeDePrix unitaire" : quand on met des espaces dans le nom des champs, il faut penser à mettre les crochets autour sinon ça plante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    somme_prix_unitaire = DLookup("[SommeDePrix unitaire]", "R_analyse_jours_de_ski_par_client_groupe", "[code_produit]='" & Code_produit & "' AND [N°_client]=" & num_client )
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Points : 73
    Points
    73
    Par défaut
    Je vais essayer !
    Je fais des tests:
    MsgBox DLookup("[SommeDePrix unitaire]", "R_analyse_jours_de_ski_par_client_groupe", "code_produit='2291AA'")
    MsgBox DLookup("[SommeDePrix unitaire]", "R_analyse_jours_de_ski_par_client_groupe", "N°_client='97'")
    MsgBox DLookup("[SommeDePrix unitaire]", "R_analyse_jours_de_ski_par_client_groupe", "Client='Lachat'")

    La premipre ligne fonctionne mais pas la 2ème ni la 3ème !!! Pourquoi ?

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Points : 73
    Points
    73
    Par défaut
    MsgBox DLookup("[SommeDePrix unitaire]", "R_analyse_jours_de_ski_par_client_groupe", "code_produit='2285AA'")
    MsgBox DLookup("[SommeDePrix unitaire]", "R_analyse_jours_de_ski_par_client_groupe", "[N°_client]=125")

    Ca fonctionne ... plus qu'à les mettre ensemble...

  18. #18
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    la 2ème c'est parce que tu as (encore) laissé les apostrophes pour N° de client (pour rappel, c'est du numérique)
    pour la 3éme, le champ n'est (à priori) pas dans la requête, mais de toute façon, dans du code, il faut éviter de rechercher un client par son nom quand on a son numéro, c'est plis performant et moins risqué en cas de doublon dans un patronyme

    [EDIT]:
    Ca fonctionne ... plus qu'à les mettre ensemble...
    OK, alors bonne nuit ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2010
    Messages : 313
    Points : 73
    Points
    73
    Par défaut
    MsgBox DLookup("[SommeDePrix unitaire]", "R_analyse_jours_de_ski_par_client_groupe", "code_produit='2227AA' And [N°_client]=48")

    Je suis content cette ligen fonctionne ! Mais maintenant je dois remplace 2227AA par code_produit et 48 par num_client

  20. #20
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 621
    Points : 14 577
    Points
    14 577
    Par défaut
    Mais maintenant je dois remplace 2227AA par code_produit et 48 par num_client
    relit le post #15
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2018, 13h05
  2. Comment récupérer les valeurs dans une requête
    Par JeanNoel53 dans le forum JDBC
    Réponses: 23
    Dernier message: 30/04/2015, 21h02
  3. Problème récupérer les valeurs dans une Hash
    Par pymouse dans le forum Langage
    Réponses: 4
    Dernier message: 12/07/2007, 18h11
  4. Récupérer les valeurs dans une fonction
    Par matmay dans le forum MATLAB
    Réponses: 3
    Dernier message: 04/05/2007, 17h50
  5. Réponses: 2
    Dernier message: 12/04/2006, 11h00

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