Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/06/2011, 15h40   #1
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
Par défaut Requête ajouter des lignes suivant un paramètre dans un tableau

Bonjour,

Je viens de commencer à utiliser Microsoft Access, et je suis rapidement bloqué dans mon travail en voulant créer un tableau à partir des informations d'un autre.

j'ai un premier tableau à 2 colonnes comme suit

objets nbre d'objets

objet1 2
objet2 3

Je veux créer un 2eme tableau a partir de celui-la comme suit

objets

objet1_1
objet1_2 (car il y avait d'après l'autre tableau 2 objet1)

objet2_1
objet2_2
objet2_3 (car il y avait d'après l'autre tableau 3 objet2)

Est-ce que cette opération est possible via une requete sous access, ou en SQL, ou alors est-ce qu'il faut que je crée des macros VBA?

merci d'avance pour une réponse
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 21h56   #2
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Bonsoir,

Bonsoir,

Je m’y prendrais comme ceci :

- créer une table2 avec 1 champ « Objets »

En VBA alimenter cette table2 avec l’algorithme suivant :


- vidanger la table2 de ce qu’elle contient d’une exécution précédente
- créer un RecordSet avec la table1
- lire chacun des enregistrements et ajouter dans table2 le nombre ad hoc d’enregistrements en les numérotant.

As-tu besoin d’aide pour le code ?
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 23h25   #3
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
Merci de me répondre^^
J'ai commencé à essayer de réaliser l'opération en VBA, mais je n'ai pas une grande expérience dans ce langage (en école, on ne nous apprend que du C quasiment )

Si tu as une idée du code, un peu d'aide ne serait pas de refus mais rien que l'algo va déjà m'aider grandement ^^

merci encore !
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 08h48   #4
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Bonjour,

Voici un exemple.

Une table Depart avec Objet(txt) et Nombre(int)
Une table Arrivee avec Objets(txt)

Dans un module et tu loges cette sub :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Public Sub Transfo()
'définir les variables
Dim Rst As Recordset, i As Integer, sObjets As String, sSql As String
'vidanger la table d'arrivée (ceci pour rendre le processus réutilisable)
'DoCmd.SetWarnings False   ' "décommentarise **" si tu veux éviter les avertissements d'exécution
'                            ** Pardon Molière, je veux dire : supprimer l'apostrophe de début !
DoCmd.RunSQL ("DELETE Arrivee.* FROM Arrivee;") 'vois l'équivalent requête VidangerArrivee
'Créer un Recordset de la table pour pouvoir la lire en séquence
Set Rst = CurrentDb.OpenRecordset("Depart")
'Lancer une boucle pour lire en séquence
Do Until Rst.EOF
   'démultiplier
   If Rst("Nombre") > 0 Then  ' si 0 ou négatif, on ne fera rien pour cet enregistrement
       For i = 1 To Rst("Nombre")
         'Construire "Objets"
          sObjets = Rst("objet") & "_" & i
         'Ajouter un enregistrement dans la table Arrivee
             'construire le sql vois l'équivalent requête AjouterObjets
          sSql = "INSERT INTO Arrivee ( Objets ) SELECT """ & sObjets & """ AS Expr1;"
             'l'exécuter
          DoCmd.RunSQL (sSql)
       Next i
   End If
   Rst.MoveNext 'on lit l'enregistrement suivant
Loop
DoCmd.SetWarnings True
End Sub

N B. pour te documenter sur la syntaxe du code, place le curseur de la souris sur un mot-clé et enfonce <F1> => l’aide d’Access s’ouvre à la bonne page.


Pour (éventuellement) visualiser les requêtes, avec l’aide graphique tu loges ce sql dans 2 requêtes :

VidangerArrivee
Code :
DELETE Arrivee.* FROM Arrivee;
AjouterObjets
Code :
INSERT INTO Arrivee ( Objects ) SELECT "le sObjets construit" AS Expr1;
Pour exécuter le code, tu tapes dans la fenêtre d’exécution :



À toutes fins utiles, je joins ma BDD de test.
Reviens-moi si problème de compréhension.
Fichiers attachés
Type de fichier : zip 20110610Candrau.zip (12,0 Ko, 3 affichages)
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/06/2011, 10h43   #5
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
Merci beaucoup !

J'ai appliqué ton code dans mon programme et ça marche nickel

Le seul truc embêtant (mais je ne pense pas qu'on peut y faire quelque chose), c'est que l'on a une fenêtre pop-up nous demandant si on est sûr de vouloir rajouter un champ lors de la création des objet1_1, objet1_2, etc

Ce n'est pas grave si l'on n'a pas beaucoup d'objets dans la table de départ, mais cela peut se révèler fastidieux si l'on a une dizaine, voir une centaine d'objets au départ. Enfin, ça, c'est du détail ^^

Merci encore
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 10h56   #6
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
En fait non, j'ai rien dit, j'ai résolu le problème grâce à tes commentaires dans le code ^^ Merci encore, tout est parfait!
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h57.


 
 
 
 
Partenaires

Hébergement Web