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 27/08/2011, 20h14   #1
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
Par défaut Boucles sur requêtes

Bonjour,

Je possède la table [AttributsFamille] suivante:

|IDAttribut|IDFamille|
__________________
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
| 6 | 5 |
| 8 | 5 |
| 9 | 5 |
| 1 | 6 |
| 5 | 6 |
__________________

Je souhaiterais pouvoir récupérer le nombre de chaque IDFamille présent ainsi que l'IDattribut correspondant.
Le but de ma manoeuvre, est de réussir à récupérer ces données dans un module afin de créer dynamiquement autant de combobox que d'attributs présent pour une famille donnée, et de les remplir en conséquence. Or pour le moment je bloque sur la manière me permettant de récupérer mes données d'entrée.

Avec mes connaissances actuelles, je me suis dit que je pourrais peut être décomposer le problème. D'une part en créant une requête qui m'afficherait uniquement le nombre d'occurences d'une famille donnée:

Code :
req = "SELECT IDattribut, IDfamille FROM AttributsFamille WHERE IDfamille = " + famille
Auquel cas si famille = 2 j'obtiendrai ceci:

|IDAttribut|IDFamille|
__________________
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
__________________

Je souhaite donc dans un premier temps en déduire le nombre de lignes (ici 3):
Code :
Dcount("IDFamille", "AttributsFamille", "IDfamille =" + famille)
Jusque la, pas trop de soucis. Seulement maintenant c'est la ou je me perds.
Je sais donc que j'ai 3 lignes mais comment puis-je faire une boucle qui me renverrait via un Dlookup par exemple, chaque IDAttribut trouvés?

Voila le code sur lequel je suis en train de travailler:

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
Sub CreateAttrib()
 
Dim i As Integer, j As Integer, ligne As Integer, colonne As Integer
Set CollAttrib = New Collection
Dim Cls As AttribEvents
Dim Cls2 As KitEvents
 
'##### Ajout CBox des attrib #####
i = 0
'Résultat de ma requête permettant de trouver le nombre d'attributs:
j = Dcount("IDFamille", "AttributsFamille", "IDfamille =" + famille)
 
'Do While i<> j
    Dim ReqValue as string
'Je ne sais pas encore comment récupérer l'IDattribut en cours à la place de x:
    ReqValue = "SELECT IDAttribut, Valeur FROM ValeurAttributPossible WHERE IDAttribut = " + x + ";"
    Set CboxAttribut = Form_GPE.Controls.Add("Forms.combobox.1", "", True)
        With CboxAttribut
            .Name = 'récupérer le nom de l'IDattribut en cours
            .Height = 0.556
            .Left = 14
            .Top = 1.698 + (1 * i)
            .Width = 4
'            .Tag = i
            .RowSource = ReqValue
        End With
Petite question subsidiaire:
J'avais déjà fait quelque chose de similaire sous Excel avec un UserForm. Et les valeurs données pour positionner ou dimensionner un control n'était pas en cm. Or Access ne semble utiliser que les cm. J'ai donc pour le moment entré les valeurs en cm. Est-ce correct?

Merci d'avance pour votre aide.
Mickaël

ps: après rédaction et réflexion, je me demande si je n'aurais pas dû mettre ce sujet dans VBA pour Access. Si un modérateur passe par la, et qu'il juge préférable de le déplacer, je l'en remercie par avance.
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 07h32   #2
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
Bonjour,
Cela pourrait se traduire par
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
28
29
30
31
Sub CreateAttrib()
 
Dim i As Integer, j As Integer, ligne As Integer, colonne As Integer
Set CollAttrib = New Collection
Dim Cls As AttribEvents
Dim Cls2 As KitEvents
Dim t As DAO.RecordSet
 
'##### Ajout CBox des attrib #####
i = 0
'Résultat de ma requête permettant de trouver le nombre d'attributs:
j = Dcount("IDFamille", "AttributsFamille", "IDfamille =" + famille)
 
'Do While i<> j
    Dim ReqValue as string
    Set t = CurrentDB.OpenRecordset("SELECT AttributsFamille.IDAttribut FROM AttributsFamille WHERE AttributsFamille.IDFamille=""" & famille & """")

'Je ne sais pas encore comment récupérer l'IDattribut en cours à la place de x:
    ReqValue = "SELECT IDAttribut, Valeur FROM ValeurAttributPossible WHERE IDAttribut = " + t!IDAttribut + ";"
    Set CboxAttribut = Form_GPE.Controls.Add("Forms.combobox.1", "", True)
    With CboxAttribut
            .Name = 'récupérer le nom de l'IDattribut en cours
            .Height = 0.556
            .Left = 14
            .Top = 1.698 + (1 * i)
            .Width = 4
'            .Tag = i
            .RowSource = ReqValue
    End With 
    t.Close    
Ajouter la référence Microsoft DAO au besoin
helas est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/08/2011, 10h33   #3
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
Bonjour,

Effectivement la solution que tu m'as proposée fonctionne très bien
J'ai par contre dû modifier 2/3 petites choses suite à des erreurs d'incompatibilité de type qui m'étonnent un peu mais bon. L'essentiel est que ça marche.

Voici le code modifié:

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
28
29
30
31
32
33
34
35
36
37
Sub CreateAttrib()
 
Dim i As Integer, ligne As Integer, colonne As Integer
Dim frmName As String
Dim t As DAO.Recordset
Dim Cbbx As Control
 
i = 0
'Résultat de la requête permettant de trouver le nombre d'attributs:
j = DCount("IDFamille", "AttributsFamille", "IDfamille =" + CodeFamille)
 
Do While i <> j
    Dim ReqValue As String
    Dim IdAttrib As String
    Set t = CurrentDb.OpenRecordset("SELECT AttributsFamille.IDAttribut FROM AttributsFamille WHERE AttributsFamille.IDFamille= " & CodeFamille)
 
    IdAttrib = t!IDAttribut
    ReqValue = "SELECT ValeurAttributPossible.Valeur FROM ValeurAttributPossible WHERE ValeurAttributPossible.IDAttribut =" + IdAttrib
    frmName = "GPE"
 
    DoCmd.OpenForm frmName, acDesign
 
    Set Cbbx = Access.CreateControl(frmName, acComboBox, acDetail)
    With Cbbx
        .Name = t!IDAttribut
        .Height = 0.556
        .Left = 14
        .Top = 1.698 + (1 * i)
        .Width = 4
'        .RowSource = ReqValue
    End With
    t.Close
    DoCmd.Close acForm, frmName, acSaveYes
    DoCmd.OpenForm frmName, acNormal
Loop
 
End Sub
On peut remarquer que j'ai changé la manière pour créer les contrôles en dynamique. Mais ce n'est pas encore concluant. Je vais créer un sujet spécifique sur ce point.

Encore merci Helas
Vhalar 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 14h25.


 
 
 
 
Partenaires

Hébergement Web