Bonjour,

Je me retrouve avec un code interessant developpé par LedZeppII et qui concerne la sélection d'enregistrement.

Il ne s'applique pas complètement à mon cas car je souhaite faire une sélection dans un sous form. Je me trouve obligé de laisse ce code dans le formulaire A en raison de controle présent sur celui ci, et d'appeler les sub dans le sous form A.
Je ne suis pas doué pour adapté ce code à mon réel besoin et c'est la seule solution que je pense réalisable à mon niveau.

voici le code et sa description

J'ai un formulaire "fmSelecteur" en mode continu, basé sur une table "Produits" ayant pour champ clé "Réf produit".
La table pour sauver la sélection s'appelle tblSelectionFmSelecteur.
Elle a un seul champ "Réf produit", clé primaire de la table.
Sur le formulaire "fmSelecteur", dans la section En-tête de formulaire, j'ai une image dont le contrôle s'appelle "imgToucheCtl".
Elle représente la touche Ctl et sa propriété "Visible" est à "Non"
Autre chose importante, la propriété "Apperçu des touches" est à "Oui", pour détecter l'état de la touche Ctl.

J'ai un deuxième formulaire "fmSelection". Celui-ci est en mode continu et est basé sur la table "tblSelectionFmSelecteur".
Cela me permet d'afficher le contenu de la table, pendant que je change mas sélection.
Voici maintenant le code du formulaire "fmSelecteur" :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Option Compare Database
Option Explicit
 
' Nom de la table dans laquelle on va sauver la sélection
Const strTableSelection = "tblSelectionFmSelecteur"
' Nom du champ dans la table
Const strChampSelection = "Réf produit"
' Nom du contrôle servant de clé pour mémoriser sélection
Const strCtlCle As String = "F1"
 
' Variable pour savoir si la touche "Control" est appuyée
Dim bToucheCTL As Boolean
 
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Call ToucheCTL(Shift, True)
End Sub
 
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Call ToucheCTL(Shift, False)
End Sub
 
Private Sub Form_Load()
Call ViderSelection
DoCmd.OpenForm "fmSelection"
Me.txtEnrSelectionnes = DCount("*", strTableSelection)
Me.SetFocus
End Sub
 
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lngSelTop As Long, lngSelHeight As Long
lngSelTop = Me.SelTop: lngSelHeight = Me.SelHeight
 
If Not bToucheCTL Then Call ViderSelection
SauverSelection2 lngSelTop, lngSelHeight
If CurrentProject.AllForms("fmSelection").IsLoaded Then
   Forms("fmSelection").Requery
End If
Me.txtEnrSelectionnes = DCount("*", strTableSelection)
End Sub
 
Private Sub ToucheCTL(Shift As Integer, bKeyDown As Boolean)
If (Shift And acCtrlMask) = acCtrlMask Then
   bToucheCTL = bKeyDown
   If Me.imgToucheCtl.Visible <> bToucheCTL Then
      Me.imgToucheCtl.Visible = bToucheCTL
   End If
End If
End Sub
 
Private Sub ViderSelection()
Dim db As DAO.Database
Set db = CurrentDb
db.Execute "DELETE FROM [" & strTableSelection & "]"
End Sub
Il est developpé pour fonctionné sur un formulaire en mode continu. Je souhaite le faire fonctionné sur un sous formulaire en mode feuille de donnée. Le principe des table qui sauvgarde les données m'oblige à devoir avoir cette table en source de mon formulaire. (sur le sous fom cela n'affiche plus mes données).
Je souhaite donc laissé ce code sur le formulaire et appeler les sub dans le sous formulaire si c'est possible. Si il y a une autre solution je suis preneur.

MERCI §