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 :

Boucle sur une requête pour écrire sur une table


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 198
    Points : 140
    Points
    140
    Par défaut Boucle sur une requête pour écrire sur une table
    Bonjour,
    j'ai deux tables, "T_abonnes" et "T_abonnes_w"

    Sur une requête, la table "T_abonne_w" à un champ [numero_abonne] lié au champ [ancien_numero] de la table "T_abonnes"
    La Table "T_abonnes" a un champ [nouveau_numero]
    J'obtiens ceci sur ma requete:

    Nom : CaptureFDZ.JPG
Affichages : 144
Taille : 16,4 Ko

    L'objectif et d'écrire sur [T_abonne_w].[numero_abonne] le nouveau numéro [T_abonne].[nouveau_numero]

    j'ai essayé de faire une requête de mise à jour ... mais je me heurte au fameux message "L'opération doit utiliser une requête qui peut être mise à jour" !

    L'idée est ce que je peux initier une boucle en vba qui selon la condition numero_abonne = ancien_numero alors on ecrit sur numero_abonne le nouveau numero ?

    Merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 007
    Points : 24 579
    Points
    24 579
    Par défaut
    Bonjour,

    Sans le texte SQL de la requête Update et le mcd de tes tables c'est difficile d'émettre un avis.

    Si tu règles ça par une boucle VBA tu as besoin de travailler avec la requête de correspondance dans un recordset et de la table à corriger dans un autre. Puis faire un findfirst (et findetxt si nécessaire) pour faire tes recordset.edit. Utiliser à la fois une requête update et un Edit n'a aucun sens.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 263
    Points : 6 562
    Points
    6 562
    Par défaut
    Salut
    Une approche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub num_abo_BeforeUpdate(Cancel As Integer)
        MsgBox "nouveau numéro = " & Me.num_abo
        MsgBox "ancien numéro = " & Me.num_abo.OldValue
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 673
    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 673
    Points : 14 664
    Points
    14 664
    Par défaut
    bonjour,
    j'ai essayé de faire une requête de mise à jour ... mais je me heurte au fameux message "L'opération doit utiliser une requête qui peut être mise à jour" !
    2 causes possibles:
    - ta requête utilise un regroupement
    - une des 2 tables n'a pas de clé primaire unique

    L'idée est ce que je peux initier une boucle en vba qui selon la condition numero_abonne = ancien_numero alors on ecrit sur numero_abonne le nouveau numero ?
    inutile de passer par VBA: c'est possible de le faire directement par requête avec IIf() (Vraifaux() en français) dans le champ à mettre à jour (je suppose que c'est numero_abonne):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =iif([numero_abonne] = T_abonne.ancien_numero;[nouveau_numero];[numero_abonne])
    mais comme l'a indiqué loufab, il faudrait poster le texte SQL de la requête de mise à jour, pour donner un avis plus précis
    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 ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 198
    Points : 140
    Points
    140
    Par défaut
    Slt,
    super la condition iff je connaissais pas.

    La mise à jour se fait pas certainement car il n'y a pas de clé primaire qui pourrais servir de condition dans le critère ...
    Abonnes.zip

    J'ai joint un fichier pour montrer ma situation.

    Merci.

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 673
    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 673
    Points : 14 664
    Points
    14 664
    Par défaut
    La mise à jour se fait pas certainement car il n'y a pas de clé primaire qui pourrais servir de condition dans le critère
    il suffit d'ajouter un numéro auto et la déclarer en tant que clé primaire pour que la mise à jour soit possible

    J'ai joint un fichier pour montrer ma situation.
    est-ce bien la table T_abonnes_w qu'il faut mettre à jour ? pourquoi il n'y a qu'un seul champ ?
    Cela me parait bizarre (pour ne pas dire dangereux) que le champ qui sert de lien soit mis à jour (enfin, je suppose que numero_abonne de T_abonnes_w doit être joint à T_abonnes par ancien_numero).
    De plus il manque la table T_abonnes dans la requête donc aucune chance que la requête fonctionne.
    Il faudrait écrire précisément ce que tu souhaites faire avec les 2 tables et laquelle doit être mise à jour.
    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 ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 198
    Points : 140
    Points
    140
    Par défaut
    Je sais j'ai du mal à me faire comprendre je fais des efforts ;D

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 673
    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 673
    Points : 14 664
    Points
    14 664
    Par défaut
    commence par répondre aux questions, après on verra
    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
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 263
    Points : 6 562
    Points
    6 562
    Par défaut
    Salut
    Et moi j'ai du mal à comprendre qu'on puisse mettre à jour un paquet de nouveau numéro abonné sans contrôle.
    En règle générale, on modifie l'ancien du nouveau numéro directement sur la fiche de l'abonné concerné !
    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
    Private Sub num_abo_BeforeUpdate(Cancel As Integer)
    Dim result As Integer
     
    result = MsgBox("Voulez-vous remplacer l'ancien num abonné : " & Me.num_abo.OldValue & vbNewLine & _
    "par le nouveau num abonné : " & Me.num_abo & " ?", 4 + 32, "Continue")
     
    If result = vbYes Then
        CurrentDb.Execute "INSERT INTO tbl_abonne_old (id_abo_fk, nom_abo_old, num_abo_old)" _
            & " VALUES (" & Me.id_abo & ",'" & Me.nom_abo & "', '" & Me.num_abo.OldValue & "')", dbFailOnError
    Else
        Cancel = True
        Me.Undo
        Exit Sub
    End If
    End Sub
    Images attachées Images attachées  
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

Discussions similaires

  1. [DATA] Boucle sur deux tables dans étape Data
    Par Babzoo dans le forum SAS Base
    Réponses: 4
    Dernier message: 30/01/2014, 08h50
  2. requête pour inserer dans deux tables
    Par cendrine15 dans le forum Requêtes
    Réponses: 5
    Dernier message: 03/08/2011, 08h59
  3. Conditions sur la boucle lisant une table
    Par Bouga74 dans le forum Développement de jobs
    Réponses: 7
    Dernier message: 17/07/2009, 13h26
  4. Boucles sur plusieurs tables
    Par thiblight dans le forum SAS Base
    Réponses: 6
    Dernier message: 07/07/2009, 14h54
  5. "boucle" sur les tables (débutant)
    Par Luc_Dal dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/02/2008, 09h28

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