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 :

Mise à jour d'une table VBA


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Massiliya
    Femme Profil pro
    Ingénieur en génie industriel
    Inscrit en
    Mars 2017
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur en génie industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 174
    Par défaut Mise à jour d'une table VBA
    Bonjour
    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
        Dim rs03 As DAO.Recordset
        Dim rs04 As DAO.Recordset
        Set rs03 = CurrentDb.OpenRecordset("dim_aux")
        Set rs04 = CurrentDb.OpenRecordset("Dimensions")
        rs03.MoveFirst
        While rs03.EOF() 'parcourir la table "dim_aux"
              rs04.MoveFirst 'premier enregistrement de la table "dimensions"
              While rs04.EOF()   'parcourir la table "Dimensions"
                 If (rs04![Longueur] = rs03![Dimcoupe] And rs04![Matière première] = Me.CodeMP) Then
                    rs04.Edit  'modifier la table "dimensions"
                    rs04![Quantité utilisée] = rs04![Quantité utilisée] + Me.Quantity  'calcul du cumul par MP
                    rs04.Update ' mise à jour de la table "dimensions"
                 End If
                 rs04.MoveNext 'enregistrement suivant de la table "dimensions"
              Wend
              rs03.MoveNext 'longueur suivante de la table "dim_aux"
       Wend
        rs03.Close
        rs04.Close
        Set rs03 = Nothing
        Set rs04 = Nothing
    J'ai une table nommée "dim_aux" qui contient des longueurs (numériques) constituant le champ "Dimcoupe"
    et une table nommée "Dimensions" qui contient un champ "Longueur", un champ "matière_première", un champ "Quantité utilisée" et d'autres champs qu'on n'aura pas besoin
    Moi je veux modifier le contenu de la table "dimensions" et essentiellement le champ "quantité utilisée" ainsi j'ai écrit le code ci-dessus!!
    NB: Pour chaque enregistrement de la table "dim_aux" et pour une valeur donnée de "matière première" saisie dans mon formulaire je vais modifier l'enregistrement correspond de la table "dimensions"
    Problème: Je n'ai aucun message d'erreur mais aussi la "quantité utilisée" ne sera pas modifiée dans ma table "dimensions" pourtant que j'ai mis le "Update"!!!
    Merci de m'aider à résoudre le problème c'est urgent

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    À l'œil ton code semble correct à part

    et

    qui vont planter si il n'y a pas de données.

    Le premier ne sert à rien et je remplacerai le second par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if rs04.recordcount<>0 then
        rs04.MoveFirst
    end if
    La seule explication logique est que (rs04![Longueur] = rs03![Dimcoupe] And rs04![Matière première] = Me.CodeMP) n'est jamais vrai.
    À mon avis c'est le = Me.CodeMP le coupable, ne devrait-il pas être = rs03![Matière première] ?

    As-tu mis un point d'arrêt sur le .update pour vérifier que tu passais bien dans la boucle interne ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre très actif Avatar de Massiliya
    Femme Profil pro
    Ingénieur en génie industriel
    Inscrit en
    Mars 2017
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur en génie industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 174
    Par défaut
    Merci beaucoup pour votre réponse
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    À l'œil ton code semble correct à part

    et

    qui vont planter si il n'y a pas de données.
    En fait mes deux tables ne sont pas vides!!! (144 enregistrements dans la table "Dimensions" et 8 enregistrements dans la table "dim_aux")!!!

    La seule explication logique est que (rs04![Longueur] = rs03![Dimcoupe] And rs04![Matière première] = Me.CodeMP) n'est jamais vrai.
    En fait il existe nécessairement un enregistrement dans la table "dimensions" vérifiant la condition et il est un seul!!!

    À mon avis c'est le = Me.CodeMP le coupable, ne devrait-il pas être = rs03![Matière première] ?
    La table "dim_aux" dont réfère le recordset "rs03" contient un seul champ qui est "Dimcoupe" et qui correspond au champ "Longueur" de la table "dimensions"

    As-tu mis un point d'arrêt sur le .update pour vérifier que tu passais bien dans la boucle interne ?
    Qu'est ce que vous voulez dire par point d'arrêt??!!!

    A+

  4. #4
    Membre très actif Avatar de Massiliya
    Femme Profil pro
    Ingénieur en génie industriel
    Inscrit en
    Mars 2017
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur en génie industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 174
    Par défaut
    Bah j'ai mis des messages box pour voir quelle boucle ne fonctionne pas!!! Du coup j'ai remarqué:
    cette condition n'est jamais vrais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (rs04![Longueur] = rs03![Dimcoupe] And rs04![Matière première] = Me.CodeMP) Then
    Pourtant il existe une valeur là où elle vrai!!! D'où la quantité ne se calcule pas



    Il y'a un problème quelque part dans le code mais je sais pas c quoi!!!

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Je pense que le problème vient de = Me.CodeMP.

    Tu n'a probablement aucun enregistrement de RS04 dont les données sont égales à la valeur du contrôle CodeMP de ton formulaire.

    Un point d'arrêt est un endroit où Access va suspendre l'exécution du code et te rendre la main.
    Tu peux alors vérifier ce qui se passe dans ton code directement.
    • Pour définir un point d'arrêt, cliquer dans la marge à gauche de la ligne voulue. Ça va afficher un gros point marron.
    • (Attention certaines lignes n'acceptent pas de point d'arrêt, si c'est le cas essaye au dessus ou en dessous.)
    • Pour continuer l'exécution, appuyer sur la touche [F5]
    • Pour passer à l'instruction suivante, appuyer sur la touche [F8]
    • Pour passer à l'instruction suivante tout en restant au même "niveau", appuyer sur les touches [Shift][F8]
    • Pour voir la valeur d'une variable ou d'un champ, pointer avec la souris dessus.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre très actif Avatar de Massiliya
    Femme Profil pro
    Ingénieur en génie industriel
    Inscrit en
    Mars 2017
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur en génie industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 174
    Par défaut
    Bonjour
    Merci Marrot c'est clair pou le point d'arrêt

    Citation Envoyé par marot_r Voir le message
    Bonjour.
    Je pense que le problème vient de = Me.CodeMP.
    Tu n'a probablement aucun enregistrement de RS04 dont les données sont égales à la valeur du contrôle CodeMP de ton formulaire.
    A+

    Mais quant à ce problème, je comprends pas!!! j'ai même essayé de mettre le Me.codeMP dans une variable mais ça ne marche pas encore!!
    La valeur existe nécessairement dans ma table je l'ai saisie déjà!!!
    La syntaxe est correcte du coup j'arrive pas à saisir la cause racine du problème
    En tout cas vous avez fait ce que vous pouvez pour m'aider merci beaucoup
    peut-être je dois penser autrement (de point de vue code)
    A+

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

Discussions similaires

  1. [AC-2007] Mise à jour d'une table via VBA
    Par Korleone dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/03/2014, 10h39
  2. [AC-2000] Mise à jour d'une table en VBA selon importation fichier Excel
    Par Tydher dans le forum VBA Access
    Réponses: 10
    Dernier message: 07/06/2011, 11h18
  3. Mise à jour d'une table à partir d'un formulaire en VBA
    Par jloois dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/04/2008, 14h20
  4. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  5. mise à jour d'une table d'interbase sous delphi
    Par kouraichi35 dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/10/2004, 13h09

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