OVH Cloud OVH Cloud

module

7 réponses
Avatar
yann
Bonjour

Comment faire.
Dans une FORM avec une variable Y
comment passer le parrametre Y sur le module Z en temp que critere pour une
requette.
merci.

7 réponses

Avatar
Xavier HUE
Bonjour Yann,

Une possibilité:

1) Dans ton module:

Public z As TypedDeTaDonnée (Long, String, etc.)

Function LireZ() As TypedDeTaDonnée(Long, String, etc.)
LireZ = z
End Function

Sub InitZ(ValeurZ As TypedDeTaDonnée)
z = ValeurZ
End Sub

2) Dans ton formulaire
Call InitZ(ValeurZàEtablir)

3) Dans ta requête

SELECT ..., LireZ() As LaValeurDeZ,...
...
WHERE UneZone = LireZ()

Cordialement.


-----Message d'origine-----
Bonjour

Comment faire.
Dans une FORM avec une variable Y
comment passer le parrametre Y sur le module Z en temp
que critere pour une

requette.
merci.


.



Avatar
yann
bonjour Xavier,


ca marche pas bien ou du moins j'ai pas bien compris

jais une form dans laquelle jais une variable que je recuper sur le click
que j'ai nomée "r"
puis j'ais un module dans lequelle jais mis ma requette "requette en VBA "
du genre

strSelect = "LBA_PRODUIT.idproduit, LBA_PRODUIT.NomProduit,
LBA_PRODUIT.Libelle, LBA_FAMILLE.NomFamille, LBA_GAMME.NomGamme,
LBA_PRODUIT.CdeFer, LBA_PRODUIT.NomImage1, LBA_PRODUIT.NomImage2,
LBA_PRODUIT.NomImage3, LBA_PRODUIT.NomImage4, LBA_PRODUIT.NomImage5,
LBA_PRODUIT.NomImage6, LBA_PRODUIT.NomImage7,
LBA_Fournisseur.NomFournisseur, LBA_PRODUIT.PublicationType,
LBA_PRODUIT.Marketing, LBA_CHAPITRE.NomChapitre "
strFrom = "(((LBA_PRODUIT LEFT JOIN LBA_FAMILLE ON LBA_PRODUIT.IdFamille LBA_FAMILLE.IdFamille) LEFT JOIN LBA_GAMME ON LBA_PRODUIT.IdGamme LBA_GAMME.IdGamme) LEFT JOIN LBA_Fournisseur ON LBA_PRODUIT.IdFournisseur LBA_Fournisseur.IdFournisseur) LEFT JOIN LBA_CHAPITRE ON
LBA_PRODUIT.idchapitre = LBA_CHAPITRE.IdChapitre "
strWhere = "LBA_PRODUIT.idproduit = " & r

StrSql = "SELECT " & strSelect
StrSql = StrSql & "FROM " & strFrom
StrSql = StrSql & " WHERE " & Mid$(strWhere, 1) & ";"
CurrentDb.QueryDefs("Rvisue").SQL = StrSql

comment passe les parametre LireZ et valeurZ a la requette et au moment du
clik sur le formulaire.

Merci



"Xavier HUE" a écrit dans le message de
news:28c4601c464c9$40a51020$
Bonjour Yann,

Une possibilité:

1) Dans ton module:

Public z As TypedDeTaDonnée (Long, String, etc.)

Function LireZ() As TypedDeTaDonnée(Long, String, etc.)
LireZ = z
End Function

Sub InitZ(ValeurZ As TypedDeTaDonnée)
z = ValeurZ
End Sub

2) Dans ton formulaire
Call InitZ(ValeurZàEtablir)

3) Dans ta requête

SELECT ..., LireZ() As LaValeurDeZ,...
...
WHERE UneZone = LireZ()

Cordialement.


-----Message d'origine-----
Bonjour

Comment faire.
Dans une FORM avec une variable Y
comment passer le parrametre Y sur le module Z en temp
que critere pour une

requette.
merci.


.



Avatar
Xavier HUE
Ton post initial était trés généraliste, tu aurais dû
commencer par poster ton code ;-)

Or donc,

Dans l'évènement "Click" (de quel controle d'ailleurs?),
je suppose que tu as une ligne qui ressemble à quelque
chose comme:
Call NomDeProcedure

Où NomDeProcedure est le nom de la Sub qui contient ton
code VBA. Oui?

Il te suffit de passer ta variable à ta procédure:
Call NomDeProcedure(r)

Pour la récupérer, c'est dans la définition de ta Sub

Sub NomDeProcedure(r As Long)

Voilà tout ce que je peux te dire.
Si je suis encore à côté de la plaque, poste le code
inclus dans la procédure évènement "Click", et celle
contenant ta requête, et surtout les entêtes des
procédures (Sub ..._Click (...), Sub ...(...)).
C'est plus facile pour suivre.

Pour finir, quelques remarques:

1) StrSql = StrSql & " WHERE " & Mid$(strWhere, 1) & ";"
peux s'écrire directement
StrSql = StrSql & " WHERE " & strWhere & ";"

2) CurrentDb.QueryDefs("Rvisue").SQL = StrSql
modifie directement la chaine SQL de ta requête
enregistrée. Si la modification ne consiste qu'à fournir
l'ID produit, tu as tout intérêt à t-y prendre autrement
(voir le post que je vais publier après celui-ci)

Cordialement.
Avatar
Xavier HUE
1) Construire un formulaire nommé "frmSaisieProdID"
contenant:
- Un TextBox nommé "tbxProdID"
- Un bouton de commande nommé "cmdVisu"
- Un bouton de commande nommé "cmdVisu2"

2) Enregistrer une requête nommée "reqVisuProd" dont le
SQL ressemble à: (adapter en fonction de test tables)
SELECT TblProduit.ProdID, TblProduit.ProdLib
FROM TblProduit
WHERE (((TblProduit.ProdID)=Formulaires!frmSaisieProdID!
tbxProdID));

3) Enregistrer une requête nommée "reqVisuProd2" dont le
SQL ressemble à: (adapter en fonction de test tables)
SELECT TblProduit.ProdID, TblProduit.ProdLib
FROM TblProduit
WHERE (((TblProduit.ProdID)=LireProdID()));

4) Créer un module et y ajouter les lignes suivantes

Option Compare Database
Option Explicit

Public pLngProdID As Long

Function LireProdID() As Long
LireProdID = pLngProdID
End Function

Sub MemoriserProdID(lngValeur As Long)
pLngProdID = lngValeur
End Sub

5) Dans l'évènement Sur click du bouton cmdVisu:

Private Sub cmdVisu_Click()
'Ceci ouvre la requête qui va prendre l'ID Produit
directement dans le formulaire
DoCmd.OpenQuery "ReqVisuProd"
End Sub

6) Dans l'évènement Sur click du bouton cmdVisu2:

Private Sub cmdVisu2_Click()
'Ceci ouvre la requête qui va prendre l'ID Produit via
la fonction LireProdID
Call MemoriserProdID(Me.tbxProdID.Value)
DoCmd.OpenQuery "ReqVisuProd2"
End Sub

J'espère être plus clair.

Cordialement.
Avatar
yann
Oui merci Xavier,
jais du retard .

enfaite l'op consite à afficher tous les enregistrement d'une table sur 1
seul et unique formulaire
1 / donc transforation de la table pour efficher tous les recordset
////////////code
Private Sub Form_Load()
On Error Resume Next
Dim coul As Long
Dim polcoul As Long

coul = GetSetting("LBA&TARIF", "fond", "Détail.BackColor", 16777215)
polcoul = GetSetting("LBA&TARIF", "police", "Form_Menu.Lbl5.ForeColor", 0)
Me.Bascule1752.ForeColor = polcoul
Me.Bascule1753.ForeColor = polcoul
Me.Commande1676.ForeColor = polcoul
Me.Commande1751.ForeColor = polcoul

Dim db As DAO.Database
Dim Rs1 As DAO.Recordset
Dim I As Integer
Dim A As Integer
Dim B As Integer
Dim VAL As String

For B = 1 To 20
Me("Image" & I).Picture = ""
Next B


VAL = DCount("nomimage1", "||||||||||||||||||||")
Strquoi = DLookup("repertoire", "[Informations sur ma société]")
REPBASE = Strquoi

Set db = CurrentDb()
Set Rs1 = db.OpenRecordset("table1")
For I = 1 To VAL
If IsNull(Rs1("champ" & I)) Then
Me("Image" & I).Picture = ""
Else
Me("Image" & I).Picture = REPBASE & "" & Rs1("champ" & I)
End If
Next I
Set Rs1 = Nothing
Set db = Nothing

Set db = CurrentDb()
Set Rs2 = db.OpenRecordset("table2")
For I = 1 To VAL
If IsNull(Rs2("champB" & I)) Then
Me("boiteA" & I).Value = ""
Else
Me("boiteA" & I).Value = Rs2("champB" & I)
End If
Next I
Set Rs2 = Nothing
Set db = Nothing

For A = 1 To 250
Me("champ" & A).Visible = False
Next A
If VAL < 23 Then Bascule1752.Visible = False
End Sub
/////////////END CODE
3/ sur le click du control image(indepandant unique un chemin ou un nom
image.bmp) que je transforme pour avoir ID du produit. ( autant de fois que
de control pour cette sub)
/////////////CODE
Private Sub image1_Click()
On Error Resume Next
Dim ValeurZ As String
B = Me.Champ1
A = B
r = Replace(A, "01.bmp", " ")
ValeurZ = r
Call InitZ(ValeurZ)
visu.positions
End Sub
/////////END CODE
4/ passer le tous au module pour construire le 2e formulaire (le finale qui
pointe sur IDproduit)
/////////CODE MODULE

Option Compare Database
Public z As String
Function LireZ() As String
LireZ = z
Debug.Print z
End Function
Sub InitZ(ValeurZ As String)
z = ValeurZ
Debug.Print z
End Sub
Function positions()
On Error Resume Next
Dim stDocName As String
Dim strSelect As String
Dim strFrom As String
Dim strWhere As String

stDocName = "visue"

strSelect = "LBA_PRODUIT.idproduit, LBA_PRODUIT.NomProduit,
LBA_PRODUIT.Libelle, LBA_FAMILLE.NomFamille, LBA_GAMME.NomGamme,
LBA_PRODUIT.CdeFer, LBA_PRODUIT.NomImage1, LBA_PRODUIT.NomImage2,
LBA_PRODUIT.NomImage3, LBA_PRODUIT.NomImage4, LBA_PRODUIT.NomImage5,
LBA_PRODUIT.NomImage6, LBA_PRODUIT.NomImage7,
LBA_Fournisseur.NomFournisseur, LBA_PRODUIT.PublicationType,
LBA_PRODUIT.Marketing, LBA_CHAPITRE.NomChapitre "
strFrom = "(((LBA_PRODUIT LEFT JOIN LBA_FAMILLE ON LBA_PRODUIT.IdFamille LBA_FAMILLE.IdFamille) LEFT JOIN LBA_GAMME ON LBA_PRODUIT.IdGamme LBA_GAMME.IdGamme) LEFT JOIN LBA_Fournisseur ON LBA_PRODUIT.IdFournisseur LBA_Fournisseur.IdFournisseur) LEFT JOIN LBA_CHAPITRE ON
LBA_PRODUIT.idchapitre = LBA_CHAPITRE.IdChapitre "
strWhere = "LBA_PRODUIT.idproduit = " & LireZ()

StrSql = "SELECT " & strSelect
StrSql = StrSql & "FROM " & strFrom
StrSql = StrSql & " WHERE " & Mid$(strWhere, 1) & ";"
CurrentDb.QueryDefs("Rvisue").SQL = StrSql
Debug.Print StrSql
DoCmd.OpenForm stDocName
End Function

//////////////END MODULE

voilla ca marche



"Xavier HUE" a écrit dans le message de
news:2864c01c464ec$04fc2770$
1) Construire un formulaire nommé "frmSaisieProdID"
contenant:
- Un TextBox nommé "tbxProdID"
- Un bouton de commande nommé "cmdVisu"
- Un bouton de commande nommé "cmdVisu2"

2) Enregistrer une requête nommée "reqVisuProd" dont le
SQL ressemble à: (adapter en fonction de test tables)
SELECT TblProduit.ProdID, TblProduit.ProdLib
FROM TblProduit
WHERE (((TblProduit.ProdID)=Formulaires!frmSaisieProdID!
tbxProdID));

3) Enregistrer une requête nommée "reqVisuProd2" dont le
SQL ressemble à: (adapter en fonction de test tables)
SELECT TblProduit.ProdID, TblProduit.ProdLib
FROM TblProduit
WHERE (((TblProduit.ProdID)=LireProdID()));

4) Créer un module et y ajouter les lignes suivantes

Option Compare Database
Option Explicit

Public pLngProdID As Long

Function LireProdID() As Long
LireProdID = pLngProdID
End Function

Sub MemoriserProdID(lngValeur As Long)
pLngProdID = lngValeur
End Sub

5) Dans l'évènement Sur click du bouton cmdVisu:

Private Sub cmdVisu_Click()
'Ceci ouvre la requête qui va prendre l'ID Produit
directement dans le formulaire
DoCmd.OpenQuery "ReqVisuProd"
End Sub

6) Dans l'évènement Sur click du bouton cmdVisu2:

Private Sub cmdVisu2_Click()
'Ceci ouvre la requête qui va prendre l'ID Produit via
la fonction LireProdID
Call MemoriserProdID(Me.tbxProdID.Value)
DoCmd.OpenQuery "ReqVisuProd2"
End Sub

J'espère être plus clair.

Cordialement.
Avatar
yann
re,

mais ceu que je voudrais ces de pouvoir faire cette requette de selection
avec 3 critére qui est juste avant d'ouvrir la form "visue" ou du mois la
remplacer par ceu qu'ont a fait juste avant pourquoi parcequ'avec la metode
precedent je pert la posibilite de me deplacer sur les X recordset de la
selection . tandit avec celci je peux.
sauf que pour allez sur le produit (ceu qu'on a fais hier) j'utiliser une
sub (AA) bien + simple mais pas tre performante.

////////CODE (AA)
Private Sub image1_Click()
On Error Resume Next
Set r = Nothing
B = Me.Champ1
A = B
r = Replace(A, "01.bmp", " ")

DoCmd.OpenForm Form_ProdSelect
DoCmd.GoToControl "Idproduit"
DoCmd.FindRecord r

End Sub
////////////////////END CODE (AA) ///////////////////


//////////CODE de la requette de selection
Private Sub ChaîneSQL_Click()
On Error Resume Next
Dim strmsg As String
Dim StrSql As String
Dim strSelect As String
Dim strFrom As String
Dim strWhere As String
Dim VAL As String


If Cocher1.Value = False And Cocher2.Value = False And Cocher3.Value = False
Then
strmsg = " Aucun critère de sélection !"
MsgBox (strmsg)
End If
If Cocher1.Value = True And IsNull(SouF) Then
strmsg = " Vous n'avez pas effectué la saisie de la Sous-Famille !"
MsgBox (strmsg)
End If
If Cocher2.Value = True And IsNull(Famille) Then
strmsg = " Vous n'avez pas effectué la saisie de la Famille ! "
MsgBox (strmsg)
End If
If Cocher3.Value = True And IsNull(Fournisseurs) Then
strmsg = " Vous n'avez pas effectué la saisie du Fournisseur ! "
MsgBox (strmsg)
End If
If Cocher4.Value = True And IsNull(Chapitre) Then
strmsg = " Vous n'avez pas effectué la saisie du chapitre ! "
MsgBox (strmsg)
End If

If strmsg <> "" Then Exit Sub
'---------------------------------------------------------
'Requette de selection pour la construction du formulaire
'---------------------------------------------------------

strSelect = "LBA_PRODUIT.NomProduit, LBA_PRODUIT.IdProduit,
LBA_PRODUIT.Libelle, LBA_PRODUIT.NomImage1, LBA_PRODUIT.NomImage2,
LBA_PRODUIT.NomImage3, LBA_PRODUIT.NomImage4, LBA_PRODUIT.NomImage5,
LBA_PRODUIT.NomImage6, LBA_PRODUIT.NomImage7, LBA_PRODUIT.LégendeImage2,
LBA_PRODUIT.LégendeImage3, LBA_PRODUIT.LégendeImage1,
LBA_Fournisseur.NomFournisseur, LBA_GAMME.IdGamme, LBA_GAMME.NomGamme,
LBA_FAMILLE.IdFamille, LBA_FAMILLE.NomFamille, LBA_PRODUIT.IdGamme,
LBA_PRODUIT.CDeFer "
strFrom = "((LBA_PRODUIT INNER JOIN LBA_FAMILLE ON LBA_PRODUIT.IdFamille LBA_FAMILLE.IdFamille) INNER JOIN LBA_GAMME ON LBA_PRODUIT.IdGamme LBA_GAMME.IdGamme) INNER JOIN LBA_Fournisseur ON LBA_PRODUIT.IdFournisseur LBA_Fournisseur.IdFournisseur "

If Famille.Enabled = True Then
strWhere = strWhere & " And LBA_FAMILLE.IdFamille = " & Famille
End If
If SouF.Enabled = True Then
strWhere = strWhere & " AND LBA_GAMME.IdGamme = " & SouF
End If
If Fournisseurs.Enabled = True Then
strWhere = strWhere & " AND LBA_Fournisseur.IDfournisseur = " &
Fournisseurs
End If

StrSql = "SELECT " & strSelect
StrSql = StrSql & "FROM " & strFrom
StrSql = StrSql & "WHERE " & Mid$(strWhere, 6) & " ORDER BY
LBA_PRODUIT.CdeFer" & ";"
CurrentDb.QueryDefs("prodselect").SQL = StrSql



"Xavier HUE" a écrit dans le message de
news:2864c01c464ec$04fc2770$
1) Construire un formulaire nommé "frmSaisieProdID"
contenant:
- Un TextBox nommé "tbxProdID"
- Un bouton de commande nommé "cmdVisu"
- Un bouton de commande nommé "cmdVisu2"

2) Enregistrer une requête nommée "reqVisuProd" dont le
SQL ressemble à: (adapter en fonction de test tables)
SELECT TblProduit.ProdID, TblProduit.ProdLib
FROM TblProduit
WHERE (((TblProduit.ProdID)=Formulaires!frmSaisieProdID!
tbxProdID));

3) Enregistrer une requête nommée "reqVisuProd2" dont le
SQL ressemble à: (adapter en fonction de test tables)
SELECT TblProduit.ProdID, TblProduit.ProdLib
FROM TblProduit
WHERE (((TblProduit.ProdID)=LireProdID()));

4) Créer un module et y ajouter les lignes suivantes

Option Compare Database
Option Explicit

Public pLngProdID As Long

Function LireProdID() As Long
LireProdID = pLngProdID
End Function

Sub MemoriserProdID(lngValeur As Long)
pLngProdID = lngValeur
End Sub

5) Dans l'évènement Sur click du bouton cmdVisu:

Private Sub cmdVisu_Click()
'Ceci ouvre la requête qui va prendre l'ID Produit
directement dans le formulaire
DoCmd.OpenQuery "ReqVisuProd"
End Sub

6) Dans l'évènement Sur click du bouton cmdVisu2:

Private Sub cmdVisu2_Click()
'Ceci ouvre la requête qui va prendre l'ID Produit via
la fonction LireProdID
Call MemoriserProdID(Me.tbxProdID.Value)
DoCmd.OpenQuery "ReqVisuProd2"
End Sub

J'espère être plus clair.

Cordialement.
Avatar
Xavier HUE
Bonjour Yann,

Tu peux oublier InitZ et LireZ, et passer directement la
valeur de ta variable à ta fonction positions() comme ceci:

Function positions(strProdID As String)
...
strWhere = "LBA_PRODUIT.idproduit = '" & strProdID & "'"
...

Remarque la simple quote après le signe égal, et celle qui
est entre double guillemets après la variable strProdID.

Lorsque Access remplacera la variable par sa valeur, il
obtiendra (si strProdID = 'Prod19550'
"LBA_PRODUIT.idproduit = 'Prod19950'"

Pour appeler cette fonction:
visu.positions(r)

Si ton ID Produit est numérique alors:

Function positions(lngProdID As Long)
...
strWhere = "LBA_PRODUIT.idproduit = " & lngProdID
...

Ok?

Si tu as besoin de plus de critères, il te suffit de les
ajouter en entrée dans ta fonction positions:
Function positions(strProdID As String, strParam2 As
String, intParam3 as Integer)

visu.positions(ProdID, TonParam2, TonParam3)

Pour le reste, je n'ai pas regarder ton code en détail.
Donc, si tu rencontres d'autres problèmes, n'hésite pas à
poster.

Cordialement.