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

DAVIMIKA Messages postés 118 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 10 janvier 2014 - 16 juil. 2013 à 20:53
jordane45 Messages postés 38141 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 - 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

6 réponses

jordane45 Messages postés 38141 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
17 juil. 2013 à 01:57
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
0
DAVIMIKA Messages postés 118 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 10 janvier 2014
17 juil. 2013 à 17:26
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
0
jordane45 Messages postés 38141 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
17 juil. 2013 à 18:39
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
0
DAVIMIKA Messages postés 118 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 10 janvier 2014
18 juil. 2013 à 12:59
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DAVIMIKA Messages postés 118 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 10 janvier 2014
21 juil. 2013 à 13:32
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
0
jordane45 Messages postés 38141 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
21 juil. 2013 à 21:21
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
0
Rejoignez-nous