Ecrire valeur d'un champ d'un formulaire dans une table indépendante
11 réponses
Luis
Bonjour,
J'ai un formulaire de prise de commande dans lequel on=20
rente la qualification demand=E9e dans un champ.
Cette qualification est s=E9lectionn=E9e dans une zone liste=20
d=E9roulante, avec une source requette
Ex.: M=E9canique_M=E9canicien
J'ai une table "COMPETENCESCOMMANDES" avec un=20
champ "NUMCOMMANDE" un champ "COMPETENCE" et un=20
champ "DOMAINECOMPETENCE"
J'ai bien trouv=E9 comment remplir "NUMCOMMANDE"=20
et "COMPETENCE"=20
Ce qui donne par exemple :2457 (R=E9fCommande)
:M=E9canique
:M=E9canicien =20
Par contre dans le champ DOMAINECOMPETENCE je n'arrive pas=20
=E0 inscrire M=E9canique_M=E9canicien.
Je me suis cass=E9 la t=EAte pour touver comment s=E9parer les=20
deux mots pour qu'ils s'inscrivent dans COMPETANCE et=20
maintenant je s=E8che.
Est-ce vous pouver me dire quoi rajouter, voici mon code:
Dim mot
mot =3D Me![Qualification]
If IsNull(mot) Then
MsgBox "La qualification ne peut =EAtre absente"
[Qualification].SetFocus
=20
Exit Sub
End If
'---------
posesp1 =3D InStr(1, mot, "_") ' Recherche le _.
If posesp1 =3D 0 Then
Exp=E9rience =3D mot
Else
LongueurMot =3D posesp1 - 1 ' Calcule la longueur du=20
deuxi=E8me mot.
Motdebut =3D Mid(mot, 1, LongueurMot)
' Retourne le premier mot.
Exp=E9rience =3D Motdebut
'---------
Cha=EEneTest =3D Qualification
'posesp1 =3D InStr(1, Cha=EEneTest, "_") 'position du _
If Not (posesp1 =3D "") Or Not IsNull(posesp1) Then
motMilieu =3D Mid$(Cha=EEneTest, posesp1 + 1)
' Retourne le deuxi=E8me mot.
Else
End If
Me![Qualification] =3D motMilieu
End If
SendKeys "+{ENTER}"
NUMCOMMANDE =3D R=E9fCommande
CAT1 =3D Exp=E9rience
=20
Dim Crit=E8re As String, MaBD As Database, MaTable As=20
Recordset
Set MaBD =3D DBEngine.Workspaces(0).Databases(0)
Set MaTable =3D MaBD.OpenRecordset("COMPETENCESCOMMANDES",=20
DB_OPEN_DYNASET) ' Cr=E9e la feuille de r=E9ponses dynamique.
MaTable.MoveFirst ' Recherche la premi=E8re occurence.
Do Until MaTable.EOF ' Boucle jusqu'=E0 ce qu'il n'y ait=20
plus d'enregistrement correspondant.
=20
TESTER =3D MaTable!R=E9fCommande
If TESTER =3D NUMCOMMANDE Then
COMPE =3D MaTable!COMPETENCE
If COMPE =3D CAT1 Then
trouve =3D 1
Exit Do
Else
trouve =3D 0
End If
MaTable.MoveNext
Else
MaTable.MoveNext
End If
Loop ' Fin de la boucle.
If trouve =3D 0 Then
MaTable.AddNew
MaTable!R=E9fCommande =3D NUMCOMMANDE
MaTable!COMPETENCE =3D CAT1
MaTable.Update
MaTable.Close
Else
'matable.Close
End If
'--
CAT2 =3D Qualification
Set MaTable =3D MaBD.OpenRecordset
("COMPETENCESCOMMANDES", DB_OPEN_DYNASET)
MaTable.MoveFirst ' Recherche la premi=E8re occurence.
Do Until MaTable.EOF ' Boucle jusqu'=E0 ce qu'il n'y ait=20
plus d'enregistrement correspondant.
=20
TESTER =3D MaTable!R=E9fCommande
If TESTER =3D NUMCOMMANDE Then
COMPE =3D MaTable!COMPETENCE
If COMPE =3D CAT2 Then
trouve =3D 1
Exit Do
Else
trouve =3D 0
End If
MaTable.MoveNext
Else
MaTable.MoveNext
End If
Loop ' Fin de la boucle.
If trouve =3D 0 Then
MaTable.AddNew
MaTable!R=E9fCommande =3D NUMCOMMANDE
MaTable!COMPETENCE =3D CAT2
MaTable.Update
MaTable.Close
Else
'matable.Close
End If
fintz:
Exit Sub
If IsNull(mot) Then
ertz:
MsgBox " Une Qualification principale ne peut pas rester=20
vide"
Bonjour, Alors là je veux bien, je créé une nouvelle base j'importe le formulaire et les tables et requêttes correspondants. Merci. Luis
-----Message d'origine----- Salut, si tu veux que j'essaie de déboguer ton module, envoie- moi une copie de ta
base avec simplement la ou les tables nécessaires ainsi que le formulaire
concerné. Compacte le tout et zippe-le (si possible). Mon adresse se trouve
dans la signature (enlever les majuscules).
"Luis" a écrit dans le message de
news: 0b3e01c3aaad$ffed45f0$ Bonjour, Voilà ce que j'ai trouvé et qui fonctionne:
Dim mot mot = Me![Qualification]
If IsNull(mot) Then MsgBox "La qualification ne peut être absente" [Qualification].SetFocus
Exit Sub End If '----- CAT1 = Me![Qualification]
Dim Critère As String, MaBD As Database, MaTable As Recordset Set MaBD = DBEngine.Workspaces(0).Databases(0) Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES", DB_OPEN_DYNASET) MaTable.MoveFirst ' Recherche la première occurence. Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande If TESTER = NUMCOMMANDE Then COMPE = MaTable!DOMAINECOMPETENCE If COMPE = CAT1 Then trouve = 1 Exit Do Else trouve = 0 End If MaTable.MoveNext Else MaTable.MoveNext End If Loop ' Fin de la boucle.
If trouve = 0 Then MaTable.AddNew MaTable!RéfCommande = NUMCOMMANDE MaTable!DOMAINECOMPETENCE = CAT1 MaTable.Update MaTable.Close Else 'matable.Close End If
'---------
posesp1 = InStr(1, mot, "_") ' Recherche le _. If posesp1 = 0 Then
Expérience = mot Else
LongueurMot = posesp1 - 1 ' Calcule la longueur du deuxième mot. Motdebut = Mid(mot, 1, LongueurMot) ' Retourne le premier mot. Expérience = Motdebut '--------- ChaîneTest = Qualification 'posesp1 = InStr(1, ChaîneTest, "_") 'position du _
If Not (posesp1 = "") Or Not IsNull(posesp1) Then
motMilieu = Mid$(ChaîneTest, posesp1 + 1) ' Retourne le deuxième mot. Else End If Me![Qualification] = motMilieu
End If SendKeys "+{ENTER}"
NUMCOMMANDE = RéfCommande CAT2 = Expérience
Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES", DB_OPEN_DYNASET) ' Crée la feuille de réponses dynamique. MaTable.MoveFirst ' Recherche la première occurence. Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande If TESTER = NUMCOMMANDE Then COMPE = MaTable!COMPETENCE If COMPE = CAT2 Then trouve = 1 Exit Do Else trouve = 0 End If MaTable.MoveNext Else MaTable.MoveNext End If Loop ' Fin de la boucle.
If trouve = 0 Then MaTable.AddNew MaTable!RéfCommande = NUMCOMMANDE MaTable!COMPETENCE = CAT2 MaTable.Update MaTable.Close Else 'matable.Close End If '-- CAT3 = Qualification Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES", DB_OPEN_DYNASET) MaTable.MoveFirst ' Recherche la première occurence. Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande If TESTER = NUMCOMMANDE Then COMPE = MaTable!COMPETENCE If COMPE = CAT3 Then trouve = 1 Exit Do Else trouve = 0 End If MaTable.MoveNext Else MaTable.MoveNext End If Loop ' Fin de la boucle.
If trouve = 0 Then MaTable.AddNew MaTable!RéfCommande = NUMCOMMANDE MaTable!COMPETENCE = CAT3 MaTable.Update MaTable.Close Else 'matable.Close End If
Mais si tu as quelque chose de plus élégant, je préfère (car je suis passé de Access 2 à 97'quelques jours' et maintenant sur Xp et il est vrais que je ne suis pas à jour et que j'ai appris seul avec des bouquins...alors voilà le problème. JE NE SUIS PAS BON DU TOUT)
!!!TRèS IMPORTANT!!!!, Le formulaire n'est pas Option Explicit, car j'ai une quirielle de variables que je devrais justifier. A bientôt. Luis
-----Message d'origine----- Voilà ce que je te propose, mais je n'ai peut-être pas bien saisi ce que tu
veux.
Dim Critère As String Dim MaBD As Database Dim MaTable As Recordset
If IsNull(Me.Qualification) Then MsgBox "La qualification ne peut être absente" [Qualification].SetFocus Exit Sub End If
posesp1 = InStr(1, Me.Qualification, "_") ' Recherche le _.
If posesp1 = 0 Then Expérience = Me.Qualification Else LongueurMot = posesp1 - 1 ' Calcule la longueur du deuxième mot.
Expérience = Left(Me.Qualification, posesp1 - 1) ' Retourne le
premier mot. motMilieu = Mid(Me.Qualification, posesp1 + 1) ' Retourne le
"';") If MaTable.RecordCount = 0 Then 'ajouter l'enregistrement End If
Tiens-moi au courant Cordialement
Gilbert
"Luis" a écrit dans le message de
news: 0d0001c3a9f0$3e3aec40$ Bonjour, Au départ j'ai un formulaire avec plusieurs champs dont un est une liste déroulante (source de cette liste déroulante une requêtte avec tous les domaines de métiers et à chaque domaine les métiers, ex.:
Banques_Conseiller à la clientèle Mécanique_Outilleur Mécanique_Monteur de machines outils Mécanique_Mécanicien
Après la sélection et à la sortie de ce champs, il ne reste que par exemple "Mécanicien" dans ce champ du formulaire, car c'est la seule information importante dans le formulaire.
Pour des raisons de sélection dans un autre formulaire je dois récupérer dans une table indépendante: Dans le 1er champ "IDCOMMANDE" (appelée RéfCommande) Dans le 2ème champ "Mécanique" (C'est à dire le mot placé avant le _) Dans le 2ème champ "Mécanicien" (c'est à dire le mot placé après le_) De là le code que j'ai envoyé dans mon méssage. CECI MARCHE BIEN. Ce que je n'arrive pas à faire: Ecrire dans le 3ème champ de cette table indépendante le tout c'est à dire le "Mot avant le _ et le mot après le _"
formaté telle que dans la liste déroulante. Je ne sais pas si j'ai réussi à répondre à ta ? Merci, à bientôt. Luis
-----Message d'origine----- Bonjour,
J'ai du mal à comprendre ce que tu as au départ et ce que tu veux obtenir
exactement. Un complément d'infos serait le bienvenu.
Gilbert
"Luis" a écrit dans le message de
news: 026501c3a945$4c57b5c0$ Bonjour, J'ai un formulaire de prise de commande dans lequel on rente la qualification demandée dans un champ. Cette qualification est sélectionnée dans une zone liste déroulante, avec une source requette
Ex.: Mécanique_Mécanicien
J'ai une table "COMPETENCESCOMMANDES" avec un champ "NUMCOMMANDE" un champ "COMPETENCE" et un champ "DOMAINECOMPETENCE"
J'ai bien trouvé comment remplir "NUMCOMMANDE" et "COMPETENCE" Ce qui donne par exemple :2457 (RéfCommande) :Mécanique :Mécanicien
Par contre dans le champ DOMAINECOMPETENCE je n'arrive pas
à inscrire Mécanique_Mécanicien.
Je me suis cassé la tête pour touver comment séparer les deux mots pour qu'ils s'inscrivent dans COMPETANCE et maintenant je sèche. Est-ce vous pouver me dire quoi rajouter, voici mon code:
Dim mot mot = Me![Qualification]
If IsNull(mot) Then MsgBox "La qualification ne peut être absente" [Qualification].SetFocus
Exit Sub End If '---------
posesp1 = InStr(1, mot, "_") ' Recherche le _. If posesp1 = 0 Then
Expérience = mot Else
LongueurMot = posesp1 - 1 ' Calcule la longueur du deuxième mot. Motdebut = Mid(mot, 1, LongueurMot) ' Retourne le premier mot. Expérience = Motdebut '--------- ChaîneTest = Qualification 'posesp1 = InStr(1, ChaîneTest, "_") 'position du _
If Not (posesp1 = "") Or Not IsNull(posesp1) Then
motMilieu = Mid$(ChaîneTest, posesp1 + 1) ' Retourne le deuxième mot. Else End If Me![Qualification] = motMilieu
End If SendKeys "+{ENTER}"
NUMCOMMANDE = RéfCommande CAT1 = Expérience
Dim Critère As String, MaBD As Database, MaTable As Recordset
Set MaBD = DBEngine.Workspaces(0).Databases(0) Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES", DB_OPEN_DYNASET) ' Crée la feuille de réponses dynamique.
MaTable.MoveFirst ' Recherche la première occurence. Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande If TESTER = NUMCOMMANDE Then COMPE = MaTable!COMPETENCE If COMPE = CAT1 Then trouve = 1 Exit Do Else trouve = 0 End If MaTable.MoveNext Else MaTable.MoveNext End If Loop ' Fin de la boucle.
If trouve = 0 Then MaTable.AddNew MaTable!RéfCommande = NUMCOMMANDE MaTable!COMPETENCE = CAT1 MaTable.Update MaTable.Close Else 'matable.Close End If '-- CAT2 = Qualification Set MaTable = MaBD.OpenRecordset ("COMPETENCESCOMMANDES", DB_OPEN_DYNASET) MaTable.MoveFirst ' Recherche la première occurence. Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande If TESTER = NUMCOMMANDE Then COMPE = MaTable!COMPETENCE If COMPE = CAT2 Then trouve = 1 Exit Do Else trouve = 0 End If MaTable.MoveNext Else MaTable.MoveNext End If Loop ' Fin de la boucle.
If trouve = 0 Then MaTable.AddNew MaTable!RéfCommande = NUMCOMMANDE MaTable!COMPETENCE = CAT2 MaTable.Update MaTable.Close Else 'matable.Close End If
fintz: Exit Sub If IsNull(mot) Then ertz: MsgBox " Une Qualification principale ne peut pas rester vide"
Qualification.SetFocus Resume fintz End If
Merci. Luis
.
.
.
Bonjour,
Alors là je veux bien, je créé une nouvelle base j'importe
le formulaire et les tables et requêttes correspondants.
Merci.
Luis
-----Message d'origine-----
Salut,
si tu veux que j'essaie de déboguer ton module, envoie-
moi une copie de ta
base avec simplement la ou les tables nécessaires ainsi
que le formulaire
concerné. Compacte le tout et zippe-le (si possible). Mon
adresse se trouve
dans la signature (enlever les majuscules).
ZgiYlbJerKtvie@tHisZcLali.fr
"Luis" <anonymous@discussions.microsoft.com> a écrit dans
le message de
news: 0b3e01c3aaad$ffed45f0$a301280a@phx.gbl...
Bonjour,
Voilà ce que j'ai trouvé et qui fonctionne:
Dim mot
mot = Me![Qualification]
If IsNull(mot) Then
MsgBox "La qualification ne peut être absente"
[Qualification].SetFocus
Exit Sub
End If
'-----
CAT1 = Me![Qualification]
Dim Critère As String, MaBD As Database, MaTable As
Recordset
Set MaBD = DBEngine.Workspaces(0).Databases(0)
Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES",
DB_OPEN_DYNASET)
MaTable.MoveFirst ' Recherche la première occurence.
Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait
plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande
If TESTER = NUMCOMMANDE Then
COMPE = MaTable!DOMAINECOMPETENCE
If COMPE = CAT1 Then
trouve = 1
Exit Do
Else
trouve = 0
End If
MaTable.MoveNext
Else
MaTable.MoveNext
End If
Loop ' Fin de la boucle.
If trouve = 0 Then
MaTable.AddNew
MaTable!RéfCommande = NUMCOMMANDE
MaTable!DOMAINECOMPETENCE = CAT1
MaTable.Update
MaTable.Close
Else
'matable.Close
End If
'---------
posesp1 = InStr(1, mot, "_") ' Recherche le _.
If posesp1 = 0 Then
Expérience = mot
Else
LongueurMot = posesp1 - 1 ' Calcule la longueur du
deuxième mot.
Motdebut = Mid(mot, 1, LongueurMot)
' Retourne le premier mot.
Expérience = Motdebut
'---------
ChaîneTest = Qualification
'posesp1 = InStr(1, ChaîneTest, "_") 'position du _
If Not (posesp1 = "") Or Not IsNull(posesp1) Then
motMilieu = Mid$(ChaîneTest, posesp1 + 1)
' Retourne le deuxième mot.
Else
End If
Me![Qualification] = motMilieu
End If
SendKeys "+{ENTER}"
NUMCOMMANDE = RéfCommande
CAT2 = Expérience
Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES",
DB_OPEN_DYNASET) ' Crée la feuille de réponses dynamique.
MaTable.MoveFirst ' Recherche la première occurence.
Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait
plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande
If TESTER = NUMCOMMANDE Then
COMPE = MaTable!COMPETENCE
If COMPE = CAT2 Then
trouve = 1
Exit Do
Else
trouve = 0
End If
MaTable.MoveNext
Else
MaTable.MoveNext
End If
Loop ' Fin de la boucle.
If trouve = 0 Then
MaTable.AddNew
MaTable!RéfCommande = NUMCOMMANDE
MaTable!COMPETENCE = CAT2
MaTable.Update
MaTable.Close
Else
'matable.Close
End If
'--
CAT3 = Qualification
Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES",
DB_OPEN_DYNASET)
MaTable.MoveFirst ' Recherche la première occurence.
Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait
plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande
If TESTER = NUMCOMMANDE Then
COMPE = MaTable!COMPETENCE
If COMPE = CAT3 Then
trouve = 1
Exit Do
Else
trouve = 0
End If
MaTable.MoveNext
Else
MaTable.MoveNext
End If
Loop ' Fin de la boucle.
If trouve = 0 Then
MaTable.AddNew
MaTable!RéfCommande = NUMCOMMANDE
MaTable!COMPETENCE = CAT3
MaTable.Update
MaTable.Close
Else
'matable.Close
End If
Mais si tu as quelque chose de plus élégant, je préfère
(car je suis passé de Access 2 à 97'quelques jours' et
maintenant sur Xp et il est vrais que je ne suis pas à
jour et que j'ai appris seul avec des bouquins...alors
voilà le problème. JE NE SUIS PAS BON DU TOUT)
!!!TRèS IMPORTANT!!!!, Le formulaire n'est pas Option
Explicit, car j'ai une quirielle de variables que je
devrais justifier.
A bientôt.
Luis
-----Message d'origine-----
Voilà ce que je te propose, mais je n'ai peut-être pas
bien saisi ce que tu
veux.
Dim Critère As String
Dim MaBD As Database
Dim MaTable As Recordset
If IsNull(Me.Qualification) Then
MsgBox "La qualification ne peut être absente"
[Qualification].SetFocus
Exit Sub
End If
posesp1 = InStr(1, Me.Qualification, "_") ' Recherche le
_.
If posesp1 = 0 Then
Expérience = Me.Qualification
Else
LongueurMot = posesp1 - 1 ' Calcule la longueur du
deuxième mot.
Expérience = Left(Me.Qualification, posesp1 - 1) '
Retourne le
premier mot.
motMilieu = Mid(Me.Qualification, posesp1 + 1) '
Retourne le
"';")
If MaTable.RecordCount = 0 Then
'ajouter l'enregistrement
End If
Tiens-moi au courant
Cordialement
Gilbert
"Luis" <anonymous@discussions.microsoft.com> a écrit dans
le message de
news: 0d0001c3a9f0$3e3aec40$a401280a@phx.gbl...
Bonjour,
Au départ j'ai un formulaire avec plusieurs champs dont
un est une liste déroulante (source de cette liste
déroulante une requêtte avec tous les domaines de métiers
et à chaque domaine les métiers, ex.:
Banques_Conseiller à la clientèle
Mécanique_Outilleur
Mécanique_Monteur de machines outils
Mécanique_Mécanicien
Après la sélection et à la sortie de ce champs, il ne
reste que par exemple "Mécanicien" dans ce champ du
formulaire, car c'est la seule information importante
dans le formulaire.
Pour des raisons de sélection dans un autre formulaire je
dois récupérer dans une table indépendante:
Dans le 1er champ "IDCOMMANDE" (appelée RéfCommande)
Dans le 2ème champ "Mécanique" (C'est à dire le mot placé
avant le _)
Dans le 2ème champ "Mécanicien" (c'est à dire le mot
placé après le_)
De là le code que j'ai envoyé dans mon méssage.
CECI MARCHE BIEN.
Ce que je n'arrive pas à faire:
Ecrire dans le 3ème champ de cette table indépendante le
tout c'est à dire le "Mot avant le _ et le mot après le
_"
formaté telle que dans la liste déroulante.
Je ne sais pas si j'ai réussi à répondre à ta ?
Merci, à bientôt.
Luis
-----Message d'origine-----
Bonjour,
J'ai du mal à comprendre ce que tu as au départ et ce
que tu veux obtenir
exactement.
Un complément d'infos serait le bienvenu.
Gilbert
"Luis" <anonymous@discussions.microsoft.com> a écrit
dans le message de
news: 026501c3a945$4c57b5c0$a101280a@phx.gbl...
Bonjour,
J'ai un formulaire de prise de commande dans lequel on
rente la qualification demandée dans un champ.
Cette qualification est sélectionnée dans une zone liste
déroulante, avec une source requette
Ex.: Mécanique_Mécanicien
J'ai une table "COMPETENCESCOMMANDES" avec un
champ "NUMCOMMANDE" un champ "COMPETENCE" et un
champ "DOMAINECOMPETENCE"
J'ai bien trouvé comment remplir "NUMCOMMANDE"
et "COMPETENCE"
Ce qui donne par exemple :2457 (RéfCommande)
:Mécanique
:Mécanicien
Par contre dans le champ DOMAINECOMPETENCE je n'arrive
pas
à inscrire Mécanique_Mécanicien.
Je me suis cassé la tête pour touver comment séparer les
deux mots pour qu'ils s'inscrivent dans COMPETANCE et
maintenant je sèche.
Est-ce vous pouver me dire quoi rajouter, voici mon
code:
Dim mot
mot = Me![Qualification]
If IsNull(mot) Then
MsgBox "La qualification ne peut être absente"
[Qualification].SetFocus
Exit Sub
End If
'---------
posesp1 = InStr(1, mot, "_") ' Recherche le _.
If posesp1 = 0 Then
Expérience = mot
Else
LongueurMot = posesp1 - 1 ' Calcule la longueur du
deuxième mot.
Motdebut = Mid(mot, 1, LongueurMot)
' Retourne le premier mot.
Expérience = Motdebut
'---------
ChaîneTest = Qualification
'posesp1 = InStr(1, ChaîneTest, "_") 'position du _
If Not (posesp1 = "") Or Not IsNull(posesp1) Then
motMilieu = Mid$(ChaîneTest, posesp1 + 1)
' Retourne le deuxième mot.
Else
End If
Me![Qualification] = motMilieu
End If
SendKeys "+{ENTER}"
NUMCOMMANDE = RéfCommande
CAT1 = Expérience
Dim Critère As String, MaBD As Database, MaTable As
Recordset
Set MaBD = DBEngine.Workspaces(0).Databases(0)
Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES",
DB_OPEN_DYNASET) ' Crée la feuille de réponses
dynamique.
MaTable.MoveFirst ' Recherche la première occurence.
Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait
plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande
If TESTER = NUMCOMMANDE Then
COMPE = MaTable!COMPETENCE
If COMPE = CAT1 Then
trouve = 1
Exit Do
Else
trouve = 0
End If
MaTable.MoveNext
Else
MaTable.MoveNext
End If
Loop ' Fin de la boucle.
If trouve = 0 Then
MaTable.AddNew
MaTable!RéfCommande = NUMCOMMANDE
MaTable!COMPETENCE = CAT1
MaTable.Update
MaTable.Close
Else
'matable.Close
End If
'--
CAT2 = Qualification
Set MaTable = MaBD.OpenRecordset
("COMPETENCESCOMMANDES", DB_OPEN_DYNASET)
MaTable.MoveFirst ' Recherche la première occurence.
Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait
plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande
If TESTER = NUMCOMMANDE Then
COMPE = MaTable!COMPETENCE
If COMPE = CAT2 Then
trouve = 1
Exit Do
Else
trouve = 0
End If
MaTable.MoveNext
Else
MaTable.MoveNext
End If
Loop ' Fin de la boucle.
If trouve = 0 Then
MaTable.AddNew
MaTable!RéfCommande = NUMCOMMANDE
MaTable!COMPETENCE = CAT2
MaTable.Update
MaTable.Close
Else
'matable.Close
End If
fintz:
Exit Sub
If IsNull(mot) Then
ertz:
MsgBox " Une Qualification principale ne peut pas rester
vide"
Bonjour, Alors là je veux bien, je créé une nouvelle base j'importe le formulaire et les tables et requêttes correspondants. Merci. Luis
-----Message d'origine----- Salut, si tu veux que j'essaie de déboguer ton module, envoie- moi une copie de ta
base avec simplement la ou les tables nécessaires ainsi que le formulaire
concerné. Compacte le tout et zippe-le (si possible). Mon adresse se trouve
dans la signature (enlever les majuscules).
"Luis" a écrit dans le message de
news: 0b3e01c3aaad$ffed45f0$ Bonjour, Voilà ce que j'ai trouvé et qui fonctionne:
Dim mot mot = Me![Qualification]
If IsNull(mot) Then MsgBox "La qualification ne peut être absente" [Qualification].SetFocus
Exit Sub End If '----- CAT1 = Me![Qualification]
Dim Critère As String, MaBD As Database, MaTable As Recordset Set MaBD = DBEngine.Workspaces(0).Databases(0) Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES", DB_OPEN_DYNASET) MaTable.MoveFirst ' Recherche la première occurence. Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande If TESTER = NUMCOMMANDE Then COMPE = MaTable!DOMAINECOMPETENCE If COMPE = CAT1 Then trouve = 1 Exit Do Else trouve = 0 End If MaTable.MoveNext Else MaTable.MoveNext End If Loop ' Fin de la boucle.
If trouve = 0 Then MaTable.AddNew MaTable!RéfCommande = NUMCOMMANDE MaTable!DOMAINECOMPETENCE = CAT1 MaTable.Update MaTable.Close Else 'matable.Close End If
'---------
posesp1 = InStr(1, mot, "_") ' Recherche le _. If posesp1 = 0 Then
Expérience = mot Else
LongueurMot = posesp1 - 1 ' Calcule la longueur du deuxième mot. Motdebut = Mid(mot, 1, LongueurMot) ' Retourne le premier mot. Expérience = Motdebut '--------- ChaîneTest = Qualification 'posesp1 = InStr(1, ChaîneTest, "_") 'position du _
If Not (posesp1 = "") Or Not IsNull(posesp1) Then
motMilieu = Mid$(ChaîneTest, posesp1 + 1) ' Retourne le deuxième mot. Else End If Me![Qualification] = motMilieu
End If SendKeys "+{ENTER}"
NUMCOMMANDE = RéfCommande CAT2 = Expérience
Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES", DB_OPEN_DYNASET) ' Crée la feuille de réponses dynamique. MaTable.MoveFirst ' Recherche la première occurence. Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande If TESTER = NUMCOMMANDE Then COMPE = MaTable!COMPETENCE If COMPE = CAT2 Then trouve = 1 Exit Do Else trouve = 0 End If MaTable.MoveNext Else MaTable.MoveNext End If Loop ' Fin de la boucle.
If trouve = 0 Then MaTable.AddNew MaTable!RéfCommande = NUMCOMMANDE MaTable!COMPETENCE = CAT2 MaTable.Update MaTable.Close Else 'matable.Close End If '-- CAT3 = Qualification Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES", DB_OPEN_DYNASET) MaTable.MoveFirst ' Recherche la première occurence. Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande If TESTER = NUMCOMMANDE Then COMPE = MaTable!COMPETENCE If COMPE = CAT3 Then trouve = 1 Exit Do Else trouve = 0 End If MaTable.MoveNext Else MaTable.MoveNext End If Loop ' Fin de la boucle.
If trouve = 0 Then MaTable.AddNew MaTable!RéfCommande = NUMCOMMANDE MaTable!COMPETENCE = CAT3 MaTable.Update MaTable.Close Else 'matable.Close End If
Mais si tu as quelque chose de plus élégant, je préfère (car je suis passé de Access 2 à 97'quelques jours' et maintenant sur Xp et il est vrais que je ne suis pas à jour et que j'ai appris seul avec des bouquins...alors voilà le problème. JE NE SUIS PAS BON DU TOUT)
!!!TRèS IMPORTANT!!!!, Le formulaire n'est pas Option Explicit, car j'ai une quirielle de variables que je devrais justifier. A bientôt. Luis
-----Message d'origine----- Voilà ce que je te propose, mais je n'ai peut-être pas bien saisi ce que tu
veux.
Dim Critère As String Dim MaBD As Database Dim MaTable As Recordset
If IsNull(Me.Qualification) Then MsgBox "La qualification ne peut être absente" [Qualification].SetFocus Exit Sub End If
posesp1 = InStr(1, Me.Qualification, "_") ' Recherche le _.
If posesp1 = 0 Then Expérience = Me.Qualification Else LongueurMot = posesp1 - 1 ' Calcule la longueur du deuxième mot.
Expérience = Left(Me.Qualification, posesp1 - 1) ' Retourne le
premier mot. motMilieu = Mid(Me.Qualification, posesp1 + 1) ' Retourne le
"';") If MaTable.RecordCount = 0 Then 'ajouter l'enregistrement End If
Tiens-moi au courant Cordialement
Gilbert
"Luis" a écrit dans le message de
news: 0d0001c3a9f0$3e3aec40$ Bonjour, Au départ j'ai un formulaire avec plusieurs champs dont un est une liste déroulante (source de cette liste déroulante une requêtte avec tous les domaines de métiers et à chaque domaine les métiers, ex.:
Banques_Conseiller à la clientèle Mécanique_Outilleur Mécanique_Monteur de machines outils Mécanique_Mécanicien
Après la sélection et à la sortie de ce champs, il ne reste que par exemple "Mécanicien" dans ce champ du formulaire, car c'est la seule information importante dans le formulaire.
Pour des raisons de sélection dans un autre formulaire je dois récupérer dans une table indépendante: Dans le 1er champ "IDCOMMANDE" (appelée RéfCommande) Dans le 2ème champ "Mécanique" (C'est à dire le mot placé avant le _) Dans le 2ème champ "Mécanicien" (c'est à dire le mot placé après le_) De là le code que j'ai envoyé dans mon méssage. CECI MARCHE BIEN. Ce que je n'arrive pas à faire: Ecrire dans le 3ème champ de cette table indépendante le tout c'est à dire le "Mot avant le _ et le mot après le _"
formaté telle que dans la liste déroulante. Je ne sais pas si j'ai réussi à répondre à ta ? Merci, à bientôt. Luis
-----Message d'origine----- Bonjour,
J'ai du mal à comprendre ce que tu as au départ et ce que tu veux obtenir
exactement. Un complément d'infos serait le bienvenu.
Gilbert
"Luis" a écrit dans le message de
news: 026501c3a945$4c57b5c0$ Bonjour, J'ai un formulaire de prise de commande dans lequel on rente la qualification demandée dans un champ. Cette qualification est sélectionnée dans une zone liste déroulante, avec une source requette
Ex.: Mécanique_Mécanicien
J'ai une table "COMPETENCESCOMMANDES" avec un champ "NUMCOMMANDE" un champ "COMPETENCE" et un champ "DOMAINECOMPETENCE"
J'ai bien trouvé comment remplir "NUMCOMMANDE" et "COMPETENCE" Ce qui donne par exemple :2457 (RéfCommande) :Mécanique :Mécanicien
Par contre dans le champ DOMAINECOMPETENCE je n'arrive pas
à inscrire Mécanique_Mécanicien.
Je me suis cassé la tête pour touver comment séparer les deux mots pour qu'ils s'inscrivent dans COMPETANCE et maintenant je sèche. Est-ce vous pouver me dire quoi rajouter, voici mon code:
Dim mot mot = Me![Qualification]
If IsNull(mot) Then MsgBox "La qualification ne peut être absente" [Qualification].SetFocus
Exit Sub End If '---------
posesp1 = InStr(1, mot, "_") ' Recherche le _. If posesp1 = 0 Then
Expérience = mot Else
LongueurMot = posesp1 - 1 ' Calcule la longueur du deuxième mot. Motdebut = Mid(mot, 1, LongueurMot) ' Retourne le premier mot. Expérience = Motdebut '--------- ChaîneTest = Qualification 'posesp1 = InStr(1, ChaîneTest, "_") 'position du _
If Not (posesp1 = "") Or Not IsNull(posesp1) Then
motMilieu = Mid$(ChaîneTest, posesp1 + 1) ' Retourne le deuxième mot. Else End If Me![Qualification] = motMilieu
End If SendKeys "+{ENTER}"
NUMCOMMANDE = RéfCommande CAT1 = Expérience
Dim Critère As String, MaBD As Database, MaTable As Recordset
Set MaBD = DBEngine.Workspaces(0).Databases(0) Set MaTable = MaBD.OpenRecordset("COMPETENCESCOMMANDES", DB_OPEN_DYNASET) ' Crée la feuille de réponses dynamique.
MaTable.MoveFirst ' Recherche la première occurence. Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande If TESTER = NUMCOMMANDE Then COMPE = MaTable!COMPETENCE If COMPE = CAT1 Then trouve = 1 Exit Do Else trouve = 0 End If MaTable.MoveNext Else MaTable.MoveNext End If Loop ' Fin de la boucle.
If trouve = 0 Then MaTable.AddNew MaTable!RéfCommande = NUMCOMMANDE MaTable!COMPETENCE = CAT1 MaTable.Update MaTable.Close Else 'matable.Close End If '-- CAT2 = Qualification Set MaTable = MaBD.OpenRecordset ("COMPETENCESCOMMANDES", DB_OPEN_DYNASET) MaTable.MoveFirst ' Recherche la première occurence. Do Until MaTable.EOF ' Boucle jusqu'à ce qu'il n'y ait plus d'enregistrement correspondant.
TESTER = MaTable!RéfCommande If TESTER = NUMCOMMANDE Then COMPE = MaTable!COMPETENCE If COMPE = CAT2 Then trouve = 1 Exit Do Else trouve = 0 End If MaTable.MoveNext Else MaTable.MoveNext End If Loop ' Fin de la boucle.
If trouve = 0 Then MaTable.AddNew MaTable!RéfCommande = NUMCOMMANDE MaTable!COMPETENCE = CAT2 MaTable.Update MaTable.Close Else 'matable.Close End If
fintz: Exit Sub If IsNull(mot) Then ertz: MsgBox " Une Qualification principale ne peut pas rester vide"