Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 12/05/2011, 03h52   #1
Membre du Club
 
Homme Claude Larocque
Développeur informatique
Inscription : mai 2009
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Claude Larocque
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : mai 2009
Messages : 61
Points : 46
Points : 46
Par défaut Attaché bouton de commande1 au 1er record d'un sous-formulaire, puis le 2e bouton de commande au 2e record et

Bonjour,

J'ai un formulaire [Détails commande1] (Form1) sur lequel un bouton de commande ouvre un formulaire (pas un sous-formulaire) nommé [FormulaireTableauNoir] (Form2)

Sur la Form2, il y a 4 sous-formulaires [FormulaireSoupes] - [Plats Principaux] - [Desserts] et [Breuvages]. Le nombre maximal d'enregistrements sont dans l'ordre 3 - 5 - 3 et 3 pour ces sous-formulaires. La raison est que le formulaire principal est pour émuler un tableau noir d'un menu de restaurant, alors il faut limiter le nombre d'enregistrements sur la Form2.

Sur la Form 2, j'ai 14 boutons de commande nommés (TN1PRD1) à (TN1PRD14) Ces boutons de commandes sont codés pour pouvoir ajouter des enregistrements dans Form1, ce qui fonctionne pour les boutons de commande 1 , 4, 9 et 12 mais pas pour les autres.

La raison est que le champ ID des 4 sous-formulaires peuvent changer selon le menu du restaurant, donc, je n'ai pas d'ID spécific pour coder. Vu que mon code recherche le champ ID, il s'arrête toujours au premier enregistrement trouvé dans mon sous-formulaire, donc, les boutons de commande 2,3 (max 3 enregistrements) effectuent la même fonction que le bouton 1,les boutons de commande5,6,7,8 (max 5) effectuent la même fonction que le bouton 4, les boutons de commandes 10,11 (max 3) effectuent la même fonction que le bouton 9 et enfin les boutons de commande 13 et 14 (max 3) effectuent la même fonctionque le bouton 12.

Cette fonction c'est que lorsque je presse un bouton de commande, un nouveau record est ajouté dans ma Form1 dans le sous-formulaire [sbfOrderDetails], comme indiqué précédemment le premier enregistrement des 4 sous-formulaires de la form2 est celui que les 14 boutons de commandes retrouvent, donc, mon but est que le bouton 2 retrouve le 2e enregistrement du 1er sous-formulaire, que le bouton 3 retrouve le 3e enregistrement de ce même formulaire.

Vous avez sûrement compris que le bouton 4 retrouve le premier enregistrement du sous-formulaire 2 (Plats Principaux) et que les boutons 5,6,7 et 8 retrouve la même information soit le premier enregistrement. Le bouton 5 devraient retrouver le 2e enregistrement de ce sous-formulaire, le bouton 6 le 3e, le bouton 7 le 4e, et le bouton 8 le 5e enregistrement.

Sur mes sous-formulaires, je n'ai pas de champ unique, par exemple, le champ ID peut changer constamment dépendamment du menu du jour que les administrateurs décident.

Est-ce qu'il y a un moyen en code d'attacher un bouton de commande à un enregistrement spécifique d'un sous-formulaire?

J'inscris mon code pour le bouton 1 et 4 (Tn1PRD1 et TN1PRD4) pour vous donner une bonne idée.

Merci de votre temps, pour plus d'informations, n'hésitez pas à m'envoyer un message.

Claude du Québec
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
Private Sub TN1PRD1_Click()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset2
Dim rst3 As DAO.Recordset
 
Dim strSQL As String
On Error GoTo Change_err
 
Set dbs = CurrentDb
    If Forms![Détails commande1].[sbfOrderDetails].Visible = False Then
    DoCmd.OpenForm "Message devez choisir une table"
    DoCmd.CancelEvent
    Else
    End If
 
Set rst = dbs.OpenRecordset("DétailsCommandeTemp", dbOpenDynaset)
strSQL = "SELECT [ID], [Nom du produit], [memPropertyPhotoLink], [PrixVenteSAM], [PrixVenteLIV], [PrixVenteCOM], [TableauNoirPrix] " & _
FROM Produits 
 
    If [Réf statut] = Invoiced_customerorder Then
    DoCmd.OpenForm "Message facture déjà facturée"
    Exit Sub
    Else
    End If
 
Set rst2 = CurrentDb.OpenRecordset(strSQL)
    If rst2.RecordCount = 0 Then
    DoCmd.CancelEvent
    Else
    End If
With Forms![Détails commande1].[sbfOrderDetails].Form.Recordset
    .AddNew
    .[Réf produit] = Forms![FormulaireTableauNoir]![FormulaireSoupes].Form![ID]
    .[Prix unitaire] = Forms![FormulaireTableauNoir]![FormulaireSoupes].Form![TableauNoirPrix]
    .[Quantité] = Forms![Détails commande1].[txtDisplay].Caption
    .[Réf commande] = Forms![Détails commande1].[CommandeEnCours]
    .Update
    End With
With rst
    .AddNew
    ![Réf commande] = Forms![Détails commande1].[Réf commande].Value
    ![Réf employé] = Forms![Détails commande1].[Réf employé].Value
    ![Réf client] = Forms![Détails commande1].[Réf client].Value
    ![Réf statut] = Forms![Détails commande1].[Réf statut].Value
    ![Réf produit] = Forms![FormulaireTableauNoir]![FormulaireSoupes].Form![ID]
    ![Prix unitaire] = Forms![FormulaireTableauNoir]![FormulaireSoupes].Form![TableauNoirPrix]
    ![Quantité] = Forms![Détails commande1].[txtDisplay].Caption
    .Update
    DoCmd.RunMacro "Supprimer données DétailsCommandeTemp"
    DoCmd.Echo False
    Forms![Détails commande1].[Total prix commande].Requery
    DoCmd.Echo True
    DoCmd.Echo False
    Forms![Détails commande1].[Formulaire Sous-totaux commande].Requery
    DoCmd.Echo True
    End With
    Forms![Détails commande1].[txtDisplay].Caption = 1
 
Change_err:
    If Err = 3021 Then
    DoCmd.OpenForm "Message devez choisir une table"
    Exit Sub
    End If
CLoseRST:
    rst.Close
    rst2.Close
    dbs.Close
    Set rst = Nothing
    Set rst2 = Nothing
    Set dbs = Nothing
 
End Sub
 
Private Sub TN1PRD4_Click()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset2
Dim rst3 As DAO.Recordset
 
Dim strSQL As String
On Error GoTo Change_err
 
Set dbs = CurrentDb
    If Forms![Détails commande1].[sbfOrderDetails].Visible = False Then
    DoCmd.OpenForm "Message devez choisir une table"
    DoCmd.CancelEvent
    Else
    End If
 
Set rst = dbs.OpenRecordset("DétailsCommandeTemp", dbOpenDynaset)
strSQL = "SELECT [ID], [Nom du produit], [memPropertyPhotoLink], [PrixVenteSAM], [PrixVenteLIV], [PrixVenteCOM], [TableauNoirPrix] " & _
FROM Produits 
 
    If [Réf statut] = Invoiced_customerorder Then
    DoCmd.OpenForm "Message facture déjà facturée"
    Exit Sub
    Else
    End If
 
Set rst2 = CurrentDb.OpenRecordset(strSQL)
    If rst2.RecordCount = 0 Then
    DoCmd.CancelEvent
    Else
    End If
With Forms![Détails commande1].[sbfOrderDetails].Form.Recordset
    .AddNew
    .[Réf produit] = Forms![FormulaireTableauNoir]![Plats Principaux].Form![ID]
    .[Prix unitaire] = Forms![FormulaireTableauNoir]![Plats Principaux].Form![TableauNoirPrix]
    .[Quantité] = Forms![Détails commande1].[txtDisplay].Caption
    .[Réf commande] = Forms![Détails commande1].[CommandeEnCours]
    .Update
    End With
With rst
    .AddNew
    ![Réf commande] = Forms![Détails commande1].[Réf commande].Value
    ![Réf employé] = Forms![Détails commande1].[Réf employé].Value
    ![Réf client] = Forms![Détails commande1].[Réf client].Value
    ![Réf statut] = Forms![Détails commande1].[Réf statut].Value
    ![Réf produit] = Forms![FormulaireTableauNoir]![Plats Principaux].Form![ID]
    ![Prix unitaire] = Forms![FormulaireTableauNoir]![Plats Principaux].Form![TableauNoirPrix]
    ![Quantité] = Forms![Détails commande1].[txtDisplay].Caption
    .Update
    DoCmd.RunMacro "Supprimer données DétailsCommandeTemp"
    DoCmd.Echo False
    Forms![Détails commande1].[Total prix commande].Requery
    DoCmd.Echo True
    DoCmd.Echo False
    Forms![Détails commande1].[Formulaire Sous-totaux commande].Requery
    DoCmd.Echo True
    End With
    Forms![Détails commande1].[txtDisplay].Caption = 1
 
Change_err:
    If Err = 3021 Then
    DoCmd.OpenForm "Message devez choisir une table"
    Exit Sub
    End If
CLoseRST:
    rst.Close
    rst2.Close
    dbs.Close
    Set rst = Nothing
    Set rst2 = Nothing
    Set dbs = Nothing
 
End Sub
toumack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 09h02   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 623
Points : 11 623
Bonjour,
J'avoue ne pas bien avoir compris la problématique.

Pourquoi tu ne peux pas utiliser l'ID du "plat" ?

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 23h45   #3
Membre du Club
 
Homme Claude Larocque
Développeur informatique
Inscription : mai 2009
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Claude Larocque
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : mai 2009
Messages : 61
Points : 46
Points : 46
Par défaut Pour Loufab, j'ai fait un document qui montre toutes les étapes de mon tableau noir

Comme j'expliquais dans ma discussion, l'ID du plat change selon le menu du jour, le champ ID de ces 4 sous-formulaires changent continuellement, j'ai créé un document juste pour que tu puisses visualiser ce que j'essai d'expliquer, comme on dit, une image vaut mille mots.

J'espère que tu me reviendras bientôt sur le sujet, je suis en train de programmer mon module des livraisons

Merci d'avance

Voici le lien:
http://cid-f7190044a52fae85.office.l...r%20Loufab.doc
toumack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 20h56   #4
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 623
Points : 11 623
Belle interface !

Ce que je ferais c'est utiliser le recordset de chaque sous-formulaire pour faire aller chercher le plat correspondant.

Comme ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
function Recupsoupe(btnNumber as integer)
dim rst as recordset
dim i as integer
set rst = me.sfSoupe.form.recordset
with rst 
rst.movefirst
for i = 1 to btnNumber -1
    rst.movenext
next
end with 
Recupsoupe=rst.fields("champàrecuperer")
rst = nothing
end function
L'appel se fait via chaque bouton.
Exemple :
Code :
1
2
Boutonsoupe1
Recupsoupe(0)
Voilà l'idée est là.
Encore félicitation pour ce belle interface !

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/05/2011, 20h17   #5
Membre du Club
 
Homme Claude Larocque
Développeur informatique
Inscription : mai 2009
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Claude Larocque
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : mai 2009
Messages : 61
Points : 46
Points : 46
Par défaut Super, merci Loufab

Tout fonctionne, tu m'as dirigé vers la solution, je savais qu'il y en avait une quelque part.

Merci pour le compliment, mon application est maintenant à 273 MB. Il me reste encore le module de comptabilité à programmer, mais j'ai presque terminé le module des commandes-clients et des paiements, le coeur du programme.

Depuis 1 année complète que je programme cette application, je vais pouvoir mettre mon programme sur le marché très bientôt

C'est grâce à des personnes comme toi qui prennent le temps de nous aider que nous pouvons arriver à nos buts

Merci pour ton aide précieuse

Claude Larocque
toumack 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 11h27.


 
 
 
 
Partenaires

Hébergement Web