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 :

Syntaxe DLookup vba sur Access


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Points : 19
    Points
    19
    Par défaut Syntaxe DLookup vba sur Access
    Bonjour tout le monde,

    Voilà j'ai un problème de syntaxe en vba...
    En fait, j'ai un formulaire et je dois modifier le montant d'une de mes tables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      MontantQuiReste = DLookup("[MontantRestant]", "Encours", "[Type]='Investissement' and Année = '" & Modifiable39.Value & "' ")
        Nouveau_Montant = MontantQuiReste - " & Texte29.Value & "
        DoCmd.RunSQL "UPDATE Encours SET [MontantRestant] = '" & Montant_Restant & "' WHERE ([Type] = 'Investissement' & [Année] = '" & Modifiable39.Value & "');"
    Je récupère le montant de ma table pour lui soustraire un montant qui se trouve dans ma table Encours et le remplacer par sa nouvelle valeur.

    Mais j'ai plein de problèmes de syntaxe.
    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 174
    Points
    12 174
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Première chose à faire, nommer tes contrôles... Texte29 et Modifiable39 ne signifient rien de parlant pour un relecteur.

    Ensuite, si Texte29 est un numérique, il ne se délimite pas par des quotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nouveau_Montant = MontantQuiReste - Me!Texte29
    Idem pour le contenu d'une liste...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "UPDATE Encours SET [MontantRestant] = " & Montant_Restant & " WHERE ([Type] = 'Investissement' & [Année] = " & Me!Modifiable39 &");"
    Argy

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    J'ai changé ce que vous m'avez dit mais il me trouve une erreur sur le DLookup...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MontantQuiReste As Variant
     
    MontantQuiReste = DLookup("[MontantRestant]", "Encours", "[Type]='Investissement' and Année = '" & Modifiable39.Value & "'")
    Merci d'avance

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 174
    Points
    12 174
    Billets dans le blog
    5
    Par défaut
    Qu'as tu changé ?
    Année est censé être un nombre donc pas de '' sauf si tu as fait la pseudo-bêtise de considérer que ce champ est de type texte...

    Argy

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Je vous met mon code entier :


    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
    Dim Gestion_Du_Budget As DAO.Database
    Dim db As Database
    Dim idDuFournisseur As Variant
    Dim MontantQuiReste As Variant
    Dim Nouveau_Montant As Variant
    Dim AnnéeEnCours As Long
    Set db = CurrentDb()
     
    idDuFournisseur = DLookup("[id]", "Fournisseur", "[Nom]='" & Modifiable33.Value & "'")
    AnnéeEnCours = Modifiable39.Value
     
    If Modifiable15.Value = "Investissement" Then
        db.Execute "INSERT INTO Investissement([Date],[NumCommande],[MotifCommande],[Montant],[idFournisseur]) VALUES (' " & Texte9.Value & " ' , ' " & Texte24 & " ', ' " & Texte26.Value & " ', ' " & Texte29.Value & " ', ' " & idDuFournisseur & " ')"
        MontantQuiReste = DLookup("[MontantRestant]", "Encours", "[Type]='Investissement' and Année = '" & Modifiable39.Value & "'")
        Nouveau_Montant = MontantQuiReste - Me.Texte29
        DoCmd.RunSQL "UPDATE Encours SET [MontantRestant] = " & Nouveau_Montant & " WHERE ([Type] = 'Investissement' & [Année] = " & Me!Modifiable39 & ");"
        MsgBox ("Mise à jour effectuée")
    End If

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 174
    Points
    12 174
    Billets dans le blog
    5
    Par défaut
    J'en suis fort aise...
    Je répète donc :
    Citation Envoyé par Argy
    Première chose à faire, nommer tes contrôles... Texte29 et Modifiable39 ne signifient rien de parlant pour un relecteur.
    ...
    J'ajouterais : préciser le type de chacun de ces contrôles et vérifier en amont leur non nullité et leur validité en les passant à des variables de type Variant.

    Argy

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Okok je vais tester mais ce qui est bizarre, voyez-vous, c'est que mon premier DLookup fonctionne très bien sans déclarer ces variables.

    Je reviens vers vous ultérieurement

  8. #8
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Le premier fait la comparaison de chaines de caractères alors que le second fait à priori la comparaison entre des valeurs numériques (Année). Il est donc logique que la même syntaxe pour des opérations différentes lève une erreur non ?

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Je suis complètement perdu !

    J'ai modifié, toujours des erreurs :

    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
    Dim Gestion_Du_Budget As DAO.Database
    Dim db As Database
     
    Dim MontantQuiReste As Variant
    Dim Nouveau_Montant As Variant
    Dim AnnéeEnCours As Variant
    Dim MontantFormulaire As Variant
     
    Set db = CurrentDb()
     
    AnnéeEnCours = Me.Modifiable39
    MontantFormulaire = Me.Modifiable33
     
    If Modifiable15.Value = "Investissement" Then
        ' J'insère dans ma table Investissement les données nécessaires dans mon formulaire
        db.Execute "INSERT INTO Investissement([Date],[NumCommande],[MotifCommande],[Montant],[idFournisseur]) VALUES (' " & Texte9.Value & " ' , ' " & Texte24 & " ', ' " & Texte26.Value & " ', ' " & Texte29.Value & " ', ' " & idDuFournisseur & " ')"
        ' Le montant qui reste correspond au montant figurant dans ma table Encours où le type est investissement et l'année est l'année en cours
        MontantQuiReste = DLookup("[MontantRestant]", "Encours", "[Type]='Investissement' and Année = AnnéeEnCours ")
        ' Je modifie le montant qui reste.
        Nouveau_Montant = MontantQuiReste - MontantFormulaire
        ' Je modifie ma table Encours où le montantRestant est modifié toujours avec la condition du type et de l'année
        DoCmd.RunSQL "UPDATE Encours SET [MontantRestant] = Nouveau_Montant WHERE ([Type] = 'Investissement' & [Année] = AnnéeEnCours);"
        MsgBox ("Mise à jour effectuée")
    End if

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

    Dans ta requête Insert, toutes tes variables sont prises comme du texte (les simples quotes), tu as un montant qui est du texte

    Dans le DLookup, AnnéeenCours est une variable, il faut la sortir de la chaine avec une concaténation, de même dans la requête Update.

    De plus tu déclares tout en variant, il revoir tes déclarations de variables.

    Philippe

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Mon Insert fonctionne parfaitement...
    C'est le dlookup qui ne me récupère pas la valeur du montantRestant dans ma table Encours...


  12. #12
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 174
    Points
    12 174
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Philippe JOCHMANS Voir le message
    De plus tu déclares tout en variant, il revoir tes déclarations de variables.
    Philippe...
    C'est moi qui lui ai dit de déclarer ainsi de manière à identifier les types de variable... chose qu'il ne prennait pas en considération dans son code initial.
    Typer correctement par le suite aurait été aisé.
    Tu suis rien, humm !!!

    Donc Seyflo, pourrais-tu faire l'effort de nommer ces contrôles (et spécifié ce qui sont censé contenir : une date, un nombre, un texte...) même si cela paraît compréhensible et ce, de manière à ce que l'on puisse t'aider et que tu aboutisses à tes fins

    Argy

  13. #13
    Invité
    Invité(e)
    Par défaut
    Excuses moi Argy

    N'empêche que sur cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MontantQuiReste = DLookup("[MontantRestant]", "Encours", "[Type]='Investissement' and Année = AnnéeEnCours ")
    Il faut sortir la variable AnnéeEnCours et la greffer par concaténation.

    Philippe

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    J'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MontantQuiReste = DLookup("[MontantRestant]", "Encours", "[Type]='Investissement' and [Année] =" & AnnéeEnCours)
    ça ne marche toujours pas

  15. #15
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 174
    Points
    12 174
    Billets dans le blog
    5
    Par défaut
    Est-ce que les champs MontantRestant, Type et Année sont présents dans la table Encours ?

    Si oui, modifie ton code comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If AnnéeEnCours Then
        Msgbox AnnéeEnCours
        MontantQuiReste = DLookup("[MontantRestant]", "Encours", "[Type]='Investissement' and [Année] =" & AnnéeEnCours)
    Else
        MsgBox "Problème avec l'année..."
    End If

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Oui ils sont dans la table Encours. J'ai essayé votre code, il m'affiche bien la bonne année...
    Mais il ne me récupère toujours pas le montantRestant de ma table Encours, il le laisse à Null

  17. #17
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Il y a un tuto sur les fonctions de domaine. Il serait peut-être bon d'y jeter un oeil.

    Cela n'enlève rien à tout ce qui a été dit précédemment. Simplement, histoire de retrouver les syntaxes basiques

    Bonne continuation

  18. #18
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    Oui je l'ai déjà lu mais ici il ne me sert à rien ...
    Le DLookup ne me récupère pas la valeur MontantRestant qui se trouve dans ma table Encours...
    Je respecte la syntaxe mais il m'affiche Null ...

  19. #19
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 58
    Points : 19
    Points
    19
    Par défaut
    J'ai essayé d'enlevé le DLookup et de tout mettre dans le UPDATE comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "UPDATE Encours SET [MontantRestant] = [MontantRestant] - " & MontantFormulaire & " WHERE ([Type] = 'Investissement' and [Année] = " & AnnéeEnCours & ");"
    Mais bon, cela ne me change pas non plus la valeur du MontantRestant dans ma table Encours ... Je pense que c'est le WHERE qui ne fonctionne pas...

    Merci pour votre aide !

  20. #20
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 174
    Points
    12 174
    Billets dans le blog
    5
    Par défaut
    La question qu'il faut te poser est de vérifier si ce montant existe avec un Type égale à Investissement avec l'Année égale à AnnéeEnCours...

    Argy

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

Discussions similaires

  1. [AC-2010] programme vba sur access
    Par judejuda dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/10/2012, 20h52
  2. Erreurs de syntaxes CREATE TABLE sur Access + MySQL
    Par bmarcesche dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 17/06/2009, 08h56
  3. Problème de VBA sur access 2003
    Par sweetty dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/11/2007, 22h16
  4. [VBA-E]Ecrire et lancer une requete sur Access
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/03/2006, 14h32
  5. Macro VBA sur Access
    Par beurnoir dans le forum Access
    Réponses: 3
    Dernier message: 12/10/2005, 16h46

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