Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
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 24/11/2011, 14h54   #1
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
Par défaut Assigner le résultat d'une procédure de code à un controle indépendant

Bonjour à tous,

J'ai un form qui me récapitule l'état des commandes en cours et quel employé travaille sur quelle commande.

Or je peux avoir 2 employés qui travaillent sur la même commande, donc j'ai fait un bout de code qui "ajoute" les noms d'employés travaillant sur la même commande, la variable s'appelle "empact"

Par exemple je peux avoir "jean" et "paul" qui sont sur la même commande et le code va me générer "jean paul".

Maintenant je voudrais afficher ce résultat de code "empact" dans le copntrole "empactif" du form.

J'ai une variable EC qui est la reprise du numéro de commande de l'enregistremùent actuel que le form affiche et dans ma requete le champ qui contient cette ref de commande s'appele [code]

Ca marche mais ca me l'affiche dans TOUS les enregistrements du form et pas seulement dans celui ou le numéro de commande "EC" matche bien le champ de la requete [code]

Merci d'avance de votre aide

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
 
Private Sub empactif_Enter()
Dim bd As Database
Dim tb As Recordset
Dim EC As Long
Dim EmpAct As String
  Set bd = CurrentDb
  Set tb = bd.OpenRecordset("REQ-MOencours")
  EC = Me.NumeroAuto
  EmpAct = ""
    With tb
      Do While Not tb.EOF
        If tb![attrib] = EC Then
          EmpAct = EmpAct & tb! & " "
          Me.empactif = EmpAct
          tb.MoveNext
        Else: tb.MoveNext
        End If
      Loop
    End With
  tb.Close
Me.Refresh
Me.empactif.SetFocus
Me.Requery
Me.Refresh
End Sub
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h21   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
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 089
Points : 11 620
Points : 11 620
Bonjour,

Je ne vois pas bien le rapport entre ce que tu veux faire et le code que tu mets en place.

Si tu souhaites ajouter un utilisateur au champ Attrib de l'enregistrement courant ceci devrait suffire.

Code :
1
2
3
4
 
if not (me.attrib like "*" & utilisateur & "*") then
   me.attrib = me.attrib & " " & utilisateur
endif
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 24/11/2011, 15h32   #3
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
Bonjour,

En fait je veux que le champ calculé me concatène des employés en se basant sur cette requête.

attrib.....employe
2159......PM
2158......DR
2179......AF
2159......DR

Ici par exemple l'employé "PM" et l'employé "DR" travaillent tous les deux sur la commande 2159 je veux que dans le form qui me liste les commandes en cours à la 2159, dans la case "empactif" j'ai "PM DR", donc je dois scanner les enregistrements de la requête un par un, puis quand je vois que le champ attrib correspond à la commande en cours (par ex la 2159) je mets dans une variable "PM", je continue à scanner et quand j'arrive au 2° enregistrement de la 2159 je rajoute " DR" pour avoir un résultat "PM DR"

Je ne veux pas les rajouter à la main mais que ca se fasse tout seul avec la requête.

En fait la partie calcul se fait bien mais c'est la partie attribution qui déconne...

Merci de l'aide
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 16h33   #4
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
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 089
Points : 11 620
Points : 11 620
Avec ce code effectivement cela ne peu que déconner.

1- on ouvre la requete de consultation
2- on recherche l'enregistrement
3- si on trouve on stocke dans le champ du formulaire.
4- on relance la recherche

Code :
1
2
3
4
5
6
7
8
9
10
 
dim rst as dao.recordset
set rst = currentdb.openrecordset("marequete",dbopensnapshot)
rst.findfirst "attrib=" & me.attrib
while not rst.nomatch
    me.empfic = me.empfic & " " & rst.fields("employe")
    rst.findnext
wend
rst.close
set rst = nothing
__________________
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 24/11/2011, 16h51   #5
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
Merci, j'ai adapté ton code à ma base (je fais des employés actifs et pas des emplois fictifs )

j'ai une erreur sur le rst.findnext de type "argument non facultatif"

Voila le code que j'obtiens, dans la ligne 4 on est bien d'accord sur le fait que attrib est un champ de la requete alors que numéroauto est le controle du form qui reprend le numéro de la commande, donc je cherche bien une condition "attrib=numeroauto" avant de stocker le nom de l'employé.

Code :
1
2
3
4
5
6
7
8
9
10
11
Private Sub empactif_Click()
Dim rst As dao.Recordset
Set rst = CurrentDb.OpenRecordset("REQ-MOENCOURS", dbOpenSnapshot)
rst.FindFirst "attrib=" & Me.NumeroAuto
While Not rst.NoMatch
    Me.empactif = Me.empactif & " " & rst.Fields("code")
    rst.FindNext
Wend
rst.Close
Set rst = Nothing
End Sub
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 17h35   #6
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
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 089
Points : 11 620
Points : 11 620
C'est ça d'écrire le code de tête, on oublie toujours un truc.

Code :
rst.findnext "attrib=" & Me.NumeroAuto
Effectivement c'est l'ID courant que tu recherches donc le nom du controle qui le contient.

Cordialement,

Ps : inutile de faire de la citation, nous ne sommes que 2 dans ce fil.
__________________
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 25/11/2011, 08h07   #7
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
Salut,

Ben ca fait pareil, ca me met le champ calculé dans tous les enregistrements du form (en mode continu) et pas seulement sur celui en cours....

il faudrait arriver à lui dire que le champ calculé va dans l'enregistrement

Code :
where req-smoEnCours.attrib=me.numeroauto
Mais comment inclure ca dans le code ?

Merci d'avance
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 08h34   #8
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
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 089
Points : 11 620
Points : 11 620
Bonjour,

ça te met toujours l'erreur "argument non facultatif" sur rst.findnext ?

Normalement

fait toujours référence à l'enregistrement courant. Je ne vois pas trop pourquoi il te l'applique partout. A moins que NumeroAuto ne renvoie pas ce qu'il faut.

Tu devrais faire une exécution pas-à-pas pour vérifier ce qu'il fait.
__________________
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 25/11/2011, 08h38   #9
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
L'argument non facultatif a été résolu en remettant les indications après le findnext donc ca c'est bon.

J'ai mis le bout de code en "sur clic" du champ indépendant "empactif" dans le sous-form qui contient aussi numeroauto...

Je vais faire un pas à pas et je vois ce que ca dit.

On est pas loin du bout

Merci
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 08h47   #10
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
On teste ca Le code le plus interrompu du monde....


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub empactif_Click()
Dim rst As dao.Recordset
Set rst = CurrentDb.OpenRecordset("REQ-MOENCOURS", dbOpenSnapshot)
MsgBox "dim fait"
rst.FindFirst "attrib=" & Me.NumeroAuto
MsgBox attrib
MsgBox Me.NumeroAuto
While Not rst.NoMatch
MsgBox "in while"
    Me.empactif = Me.empactif & " " & rst.Fields("code")
MsgBox Me.empactif
MsgBox CODE
    rst.FindNext "attrib=" & Me.NumeroAuto
MsgBox "after findnext before wend"
Wend
MsgBox "while exit before rst close"
rst.Close
MsgBox "after rst close before rst nothing"
Set rst = Nothing
MsgBox "after rst nothing, before end"
End Sub

Tout marche comme prévu mais ca écrit le résultat au fur et a mesure dans tous les enregistrements du form...bizarre parce que le numauto de la commande sort bon à chaque fois....

Qu'est ce que je peux tester ?

Merci

UPDATE : C'est vraiment un problème d'attribution parce que si je lance le calcul avec une autre commande (ou je n'ai pas d'employé actif) ca efface tous les champs, donc le calcul de qui fait quoi fonctionne très bien mais c'est la partie attrib qui déconne...

Si on stocke ce calcul dans une variable "toto"

Code :
Me.empactif = Me.empactif & " " & rst.Fields("code")
et qu'on attribue ensuite cette variable "toto" a un enregistrement précis du form.

Code :
where me.numeroauto = REQ-MOENCOURS.attrib
Tu en penses quoi ?

Merci
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 09h21   #11
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
Avec la variable ca donne pas mieux...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub empactif_Click()
Dim rst As dao.Recordset
Dim employe As String
Set rst = CurrentDb.OpenRecordset("REQ-MOENCOURS", dbOpenSnapshot)
rst.FindFirst "attrib=" & Me.NumeroAuto
Me.empactif = ""
employe = ""
While Not rst.NoMatch
  employe = employe & " " & rst.Fields("code")
  rst.FindNext "attrib=" & Me.NumeroAuto
Wend
rst.Close
Set rst = Nothing
Me.empactif.SetFocus
Me.empactif = employe
End Sub
Le calcul se fait très bien mais ca me l'affiche dans tout le form...

Je sens que je vais finir par le faire comme un cochon et stocker dans une table meme si c'est mal de stocker des champs calculés, mais bon, quand ca veut pas....
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 11h45   #12
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
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 089
Points : 11 620
Points : 11 620
Je pense plutot à un problème de conception sur l'ihm.

Peux-tu poster cette partie (table et formulaire) ?

Que j'y vois plus clair.
__________________
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 25/11/2011, 14h07   #13
Invité de passage
 
Inscription : octobre 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 30
Points : 3
Points : 3
Ben la base fait 18Mo (sans les tables qui sont séparées....)

Je vais essayer d'expliquer la structure.

La table MO regroupe les infos de main d'œuvre

Numero (index numero auto)
employé (matricule employé numérique)
datedebut
heuredebut
datefin
heurefin
attrib (numéro de la commande client)
usinage (numéro de la pièce a usiner si l'opération n'est pas une commande)

j'ai un form "commandes clients en cours" qui contient un sousform "liste des commandes en cours" et dans ce sous form j'ai une liste des commandes en cours avec un champ "numeroauto" qui est le numéro de la commande client

Dans ce sousform un champ qui m'affiche quel employé travaille sur quelle commande (parce que sinon ils s'y perdaient....), au départ un truc facile qui allait dans la table MO et qui reprenait l'employé travaillant sur la commande=numeroauto mais quand j'ai eu 2 employés sur la même commande ca n'en affichait qu'un.

Donc l'idée de faire un controle indépendant "employeactif" qui listerait tous les employés dans une requete de mo en cours (donc avec une date de début mais pas de date de fin) et qui me concaténerait "AB" + "BC" pour affichier un champ "AB CD"

Voila le code de la requete de selection de la main d'oeuvre en cours
Code :
1
2
3
SELECT [Tm-MO].usinage, [Tm-EmployeDonerre].Code, [Tm-MO].attrib
FROM [Tv-CommandeClient] RIGHT JOIN ([Tm-EmployeDonerre] RIGHT JOIN ([Tm-MO] LEFT JOIN [STv-ComposantCommandeFournisseur] ON [Tm-MO].usinage = [STv-ComposantCommandeFournisseur].NumeroAuto) ON [Tm-EmployeDonerre].NumeroAuto = [Tm-MO].employe) ON [Tv-CommandeClient].NumeroAuto = [Tm-MO].attrib
WHERE ((([Tm-MO].datefin) Is Null));
Tout ca marche bien, la requete m'affiche ce qu'il faut en fonction du critère attrib=numeroauto mais quand le code qu'on utilise me met le résultat il le met dans le champ "employeactif" de tous les enregistrements du sousform et pas seulement dans celui de "attrib=numeroauto"

Par contre le problème théorique que je vois est que ce contrôle indépendant n'est par définition pas stocké nulle part, donc ca vient peut être de la...

Si je le stocke dans la table MO ca pourrait marcher mais c'est pas super propre comme solution....

Merci du coup de main en tout cas....
jchuillier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h42.


 
 
 
 
Partenaires

Hébergement Web