Création d'une table à partir d'une autre en VBA Access

Messages postés
119
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
10 janvier 2014
- - Dernière réponse : jordane45
Messages postés
27058
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 décembre 2019
- 21 juil. 2013 à 21:21
Bonjour,

Je voudrais à partir de ma tbl adhérents et tbl Adhérents import (dont le champ activités contient des valeurs concaténé) créer une 3ème tbl activités qui comprend une ligne par activité.

Je joins mon code qui me donne un résultat incorrect.

Il faudrait que je puisse ajouter et faire des Màj des enregistrements à chaque importation.

Sub MajActivite()

'--- Ouverture de la base
     Set db = CurrentDb

'--- Intérogation de la tbl adhérents rs
     rq = * From [tbl Adhérents]"
     Set rs = db.OpenRecordset(rq, dbOpenDynaset)
            
'--- Intérogation de la tbl adhérents Import rs1
     rq = "SELECT * From [tbl Adhérents Import]"
     Set rs1 = db.OpenRecordset(rq, dbOpenDynaset)
     
'--- Intérogation de la tbl Activité rs3
     rq = "select * From [tbl Activités]"
     Set rs3 = db.OpenRecordset(rq, dbOpenDynaset)
     
'--- Test sur EOF
     If rs.EOF Then blnCibleVide True Else blnCibleVide False

'--- Boucle sur la table rs et rs1
     Do While Not rs1.EOF      
     Do While Not rs.EOF 

'--- Rechercher si le numéro  existe
      If blnCibleVide Then 
         blnExistePas = True
      Else
          rs3.FindFirst "[RéfAdhérent]=" & (rs![RéfAdhérent]) & ""
         blnExistePas = rs3.NoMatch 
      End If
     
      TabVar = Split((rs1("Activites")), ",")

      For intI = 0 To UBound(TabVar)

      If blnExistePas Then 
         rs3.AddNew
         rs3("Discipline") = Trim(TabVar(intI))
         rs3("RéfAdhérent") = rs("RéfAdhérent")
         rs3.Update
      Else
 '--- Existe on met à jours
         rs3.Edit
         rs3("Discipline") = TabVar(intI)
         rs3("RéfAdhérent") = rs("RéfAdhérent")
         rs3.Update
      End If
     Next
     rs1.MoveNext
     rs.MoveNext
Loop
Loop
     Set rs = Nothing
     Set rs1 = Nothing
End Sub

Merci pour votre aide.

Salutations
Afficher la suite 

6 réponses

Messages postés
27058
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 décembre 2019
318
0
Merci
Bonjour,
créer une 3ème tbl

Visiblement, tu ne veux pas la créer mais la mettre à jour ( mais la je chipote )

mon code qui me donne un résultat incorrect

Oui..et ? Il est incorrect en quoi ?
- Il bloque sur une ligne ?
- Tu as un message d'erreur ?
- Quelle partie de ton Sub ne donne pas le résultat souhaité ?


'--- Intérogation de la tbl adhérents rs
     rq = * From [tbl Adhérents]"

Il ne te manque pas le début ? "Select ..


Bon sinon, si j'ai bien compris, tu veux utiliser tes deux premières tables pour alimenter une troisième, pourquoi ne fais tu pas une seule requête sur les deux ( avec jointure ou union si nécessaire) plutôt que de faire deux boucles imbriquées

Regarde ces sites :
UNION
JOINTURE


voilou, je pense avoir fait le tour de la question... mais bon, je n'ai pas le temps de tester le code (je vais me coucher )


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
Messages postés
119
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
10 janvier 2014
0
Merci
Bonjour Jordane,

Merci pour ta réponse.

Oui en effet je veux mettre à jour la 3ème table.

Mon code est incorrect en ce sens que :

- Lorsque je rajoute pour un adhérent une activité dans le champ concaténé de la tbl Adhérents Import, et que je fais une Màj la 1ère activité est remplacée par celle ajoutée au lieu d'être créée.

- Pour un autre adhérent ses activités sont inversées par celles de son épouse.

Je joins une image de mes tables

http://cjoint.com/?0GrrscVdSq7

Cordialement.

Jacques
Commenter la réponse de DAVIMIKA
Messages postés
27058
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 décembre 2019
318
0
Merci
Il y a quelque chose que je ne comprend pas....
Dans ton script tu boucle sur la table adhérents Import (RS1)

et puis pour chaque ligne de la table adhérents (RS)
tu vérifie s'il existe ou non dans RS3 ( en fonction de ça, tu ajoutes ou Modifie une ligne)..
Par contre, tu prend l'activité de la ligne où se trouve ta boucle......


Il y a, je pense, un GROS souci dans la conception du script...

Déjà, il faut se baser sur un "ID" Unique et Commun aux tables que tu manipules
Par exemple, La valeur "unique" et commune disponible dans tes deux tables adhérents est celle du numéro de licence.

Ensuite, il ne te faut qu'une seule boucle... pas deux !
Tu boucles UNIQUEMENT sur ta table IMPORT.
-> Pour chaque Ligne de RS1, tu regardes s'il le N° de licence existe dans RS
( Si oui.. tu feras une MODIFICATION, Sinon un AJOUT [toujours avec le split de tes activités])



Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
Messages postés
119
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
10 janvier 2014
0
Merci
Bonjour jordane,

Merci pour tes explications, la 2ème boucle servait à renseigner la réf adhérent.

Je prépare une base allégée, est-ce que tu serais d'accord pour y jeter œil ?

Cordialement,

Jacques
Commenter la réponse de DAVIMIKA
Messages postés
119
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
10 janvier 2014
0
Merci
Bonjour Jordane,


Voici les manipulations que j'ai faites :

http://cjoint.com/?0GvnBPUgsD6

- La table activités est vide, je clique sur le bouton Maj des activités du formulaire, la table se remplit correctement.

- Dans la table Adhérents Import je rajoute une activité à un adhérent, je clique sur le bouton Maj des activités du formulaire, et la nouvelle activité est bien rajoutée.

Dans la table Adhérents Import je supprime une activité à un adhérent, je clique sur le bouton Maj des activités du formulaire, et l'activité est toujours présente.

Comment faire pour supprimer cette activité qui ne sert à rien ?

Dans la base j'ai rajouté une autre table « tbl Activité-a » que je voudrais remplir soit avec la table « tbl Activités » ou « tbl Adhérents Import ».

As-tu une piste à m?indiquer ? Car je ne vois pas comment faire.


Cordialement.

Jacques
Commenter la réponse de DAVIMIKA
Messages postés
27058
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 décembre 2019
318
0
Merci
Re bonjour,

Sans avoir téléchargé ton fichier access, je pense qu'il faut seulement, lorsque tu mets à jour un adhérent, il faut d'abord lister ses activités, les supprimer, puis les "mettre" à jour avec les nouvelles valeurs



Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45