modifier rowsource d'une table
Le
kimai

Bonjour,
J'aimerais savoir comment modifier le rowsource d'une
table (en mode création pour un champ texte : zone de
liste modifiable, Origine source :"liste de valeurs" et
contenu "valeur1";"valeur2"; etc?) depuis un formulaire,
donc en VB
J'arrive très bien à utiliser la propriété Rowsource pour
modifier le contenu de la liste de mon formulaire avec une
procédure évennementielle sur "Absence dans liste", mais
lorsque je ferme le formulaire, ce que j'avais ajouté à ma
liste a disparu. Voila le code que j'utilise :
-
Private Sub carac_particuliere_NotInList(NewData As
String, Response As Integer)
'Supprimer les messages d'informations d'ACCESS
DoCmd.SetWarnings False
Dim rep As Integer
rep = MsgBox("Cet élément n'existe pas dans la liste
déroulante. Voulez-vous l'ajouter ?", vbExclamation +
vbYesNo, "Elément pas dans la liste")
If rep = 6 Then
Response = acDataErrAdded
carac_particuliere.RowSource =
carac_particuliere.RowSource & ";" & NewData
Else
Response = acDataErrContinue
Me.carac_particuliere.Undo
End If
DoCmd.SetWarnings True
End Sub
-
C'est pourquoi j'aimerais modifier la propriété Rowsource
de ma table, et non pas de ma liste du formulaire pour que
cela soit définitif !
Si quelqu'un sait comment faire
Merci d'avance
Kimai
J'aimerais savoir comment modifier le rowsource d'une
table (en mode création pour un champ texte : zone de
liste modifiable, Origine source :"liste de valeurs" et
contenu "valeur1";"valeur2"; etc?) depuis un formulaire,
donc en VB
J'arrive très bien à utiliser la propriété Rowsource pour
modifier le contenu de la liste de mon formulaire avec une
procédure évennementielle sur "Absence dans liste", mais
lorsque je ferme le formulaire, ce que j'avais ajouté à ma
liste a disparu. Voila le code que j'utilise :
-
Private Sub carac_particuliere_NotInList(NewData As
String, Response As Integer)
'Supprimer les messages d'informations d'ACCESS
DoCmd.SetWarnings False
Dim rep As Integer
rep = MsgBox("Cet élément n'existe pas dans la liste
déroulante. Voulez-vous l'ajouter ?", vbExclamation +
vbYesNo, "Elément pas dans la liste")
If rep = 6 Then
Response = acDataErrAdded
carac_particuliere.RowSource =
carac_particuliere.RowSource & ";" & NewData
Else
Response = acDataErrContinue
Me.carac_particuliere.Undo
End If
DoCmd.SetWarnings True
End Sub
-
C'est pourquoi j'aimerais modifier la propriété Rowsource
de ma table, et non pas de ma liste du formulaire pour que
cela soit définitif !
Si quelqu'un sait comment faire
Merci d'avance
Kimai
Au lieu de mettre une liste de valeur , mets une table
sur absence tu ajoutes l'element a la table
--
@+
André
Quelques liens avec des exemples, des utilitaires et des compléments pour
Access
http://access.seneque.free.fr/
http://www.self-access.com/
http://www.mvps.org/accessfr/
http://mypage.bluewin.ch/w.stucki/
http://access.jessy.free.fr/
"kimai" news:054c01c35ff3$04b8afd0$
Bonjour,
J'aimerais savoir comment modifier le rowsource d'une
table (en mode création pour un champ texte : zone de
liste modifiable, Origine source :"liste de valeurs" et
contenu "valeur1";"valeur2"; etc?) depuis un formulaire,
donc en VB
J'arrive très bien à utiliser la propriété Rowsource pour
modifier le contenu de la liste de mon formulaire avec une
procédure évennementielle sur "Absence dans liste", mais
lorsque je ferme le formulaire, ce que j'avais ajouté à ma
liste a disparu. Voila le code que j'utilise :
-------------------
Private Sub carac_particuliere_NotInList(NewData As
String, Response As Integer)
'Supprimer les messages d'informations d'ACCESS
DoCmd.SetWarnings False
Dim rep As Integer
rep = MsgBox("Cet élément n'existe pas dans la liste
déroulante. Voulez-vous l'ajouter ?", vbExclamation +
vbYesNo, "Elément pas dans la liste")
If rep = 6 Then
Response = acDataErrAdded
carac_particuliere.RowSource carac_particuliere.RowSource & ";" & NewData
Else
Response = acDataErrContinue
Me.carac_particuliere.Undo
End If
DoCmd.SetWarnings True
End Sub
-------------------
C'est pourquoi j'aimerais modifier la propriété Rowsource
de ma table, et non pas de ma liste du formulaire pour que
cela soit définitif !
Si quelqu'un sait comment faire...
Merci d'avance
Kimai
du style
Private Sub ListeModifiable_NotInList(NewData As String, Response As
Integer)
On Error GoTo erreur
Dim mdb As Database, strSQL As String, Reponse As Integer
'Efface la valeur entree dans la liste modifiable
DoCmd.DoMenuItem A_FORMBAR, A_EDIT, A_UNDOFIELD, , A_MENU_VER20
'Si on fait entree avec la zone modifiable vide
If NewData = "" Then Exit Sub
'Message choix creation article
Reponse = MsgBox("Voulez vous ajouter cet article : " & NewData, vbYesNo +
vbQuestion, "Ajout article")
If Reponse = vbYes Then
Set mdb = CurrentDb
'Ajoute la nouvelle valeur DANS LA TABLE
strSQL = "INSERT INTO Table1 (Champ1)" _
& " VALUES('" & NewData & "')"
'DoCmd.RunSQL strsql, 0
mdb.Execute strSQL
Response = acDataErrAdded
End If
'ACTUALISE LA LISTE avec la nouvelle valeur
Me.Requery
Set mdb = Nothing
Exit Sub
'Gere l'erreur si on repond non a l'ajout de l'enregistrement
erreur:
Response = acDataErrContinue
End Sub
--
@+
André
Quelques liens avec des exemples, des utilitaires et des compléments pour
Access
http://access.seneque.free.fr/
http://www.self-access.com/
http://www.mvps.org/accessfr/
http://mypage.bluewin.ch/w.stucki/
http://access.jessy.free.fr/
"kimai" news:054c01c35ff3$04b8afd0$
Bonjour,
J'aimerais savoir comment modifier le rowsource d'une
table (en mode création pour un champ texte : zone de
liste modifiable, Origine source :"liste de valeurs" et
contenu "valeur1";"valeur2"; etc?) depuis un formulaire,
donc en VB
J'arrive très bien à utiliser la propriété Rowsource pour
modifier le contenu de la liste de mon formulaire avec une
procédure évennementielle sur "Absence dans liste", mais
lorsque je ferme le formulaire, ce que j'avais ajouté à ma
liste a disparu. Voila le code que j'utilise :
-------------------
Private Sub carac_particuliere_NotInList(NewData As
String, Response As Integer)
'Supprimer les messages d'informations d'ACCESS
DoCmd.SetWarnings False
Dim rep As Integer
rep = MsgBox("Cet élément n'existe pas dans la liste
déroulante. Voulez-vous l'ajouter ?", vbExclamation +
vbYesNo, "Elément pas dans la liste")
If rep = 6 Then
Response = acDataErrAdded
carac_particuliere.RowSource carac_particuliere.RowSource & ";" & NewData
Else
Response = acDataErrContinue
Me.carac_particuliere.Undo
End If
DoCmd.SetWarnings True
End Sub
-------------------
C'est pourquoi j'aimerais modifier la propriété Rowsource
de ma table, et non pas de ma liste du formulaire pour que
cela soit définitif !
Si quelqu'un sait comment faire...
Merci d'avance
Kimai
une solution à mon problème !!
Je vais essayer de mettre en ouevre ce code, et je
t'envoie un message pour le résultat
Merci encore
Kimai
1)D'abord il faut trouver ou il y a l'erreur de compilation
2)Mets le code quz je t'ai envoyer pour ajouter une valeur a la table
Tu enleves la partie Ajout que tu remplaces par ton call
3) la liste passes la par une variable
liste = "'A';"B"
Call AjoutListeValeurChamp("T_diagnostic","PDM",Liste)
5) J'ai oublie un module
Public Function BaseEnCour() As String
On Error GoTo BaseEnCour_Error
BaseEnCour = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, ""))
Fin:
Exit Function
BaseEnCour_Error:
RepBaseCarte = "Erreur"
MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") " _
& "dans procedure BaseEnCour du Module Repertoire base en cour"
Resume Fin
End Function
'================================================== 'Si ta version ne gere pas instrrev Code de Anor
'================================================== 'Public Function InStrRev(ByVal sIn As String, sFind As String, _
'Optional nStart As Long = 1, Optional bCompare As _
'Long = vbBinaryCompare) As Long
'
' Dim nPos As Long
' sIn = StrReverse(sIn)
' sFind = StrReverse(sFind)
' nPos = InStr(nStart, sIn, sFind, bCompare)
' If nPos = 0 Then
' InStrRev = 0
' Else
' InStrRev = Len(sIn) - nPos - Len(sFind) + 2
' End If
'End Function
'
'Public Function StrReverse(ByVal sIn As String) As String
' Dim nC As Integer, sOut As String
' For nC = Len(sIn) To 1 Step -1
' sOut = sOut & Mid(sIn, nC, 1)
' Next
' StrReverse = sOut
'End Function
6)Si tu n' y arrives pas envoies moi une base avec le form et la table ou
les tables
--
@+
André
Quelques liens avec des exemples, des utilitaires et des compléments pour
Access
http://access.seneque.free.fr/
http://www.self-access.com/
http://www.mvps.org/accessfr/
http://mypage.bluewin.ch/w.stucki/
http://access.jessy.free.fr/
"kimai" news:076e01c36008$971163d0$
Re_salut ! (:-D)
J'ai copié le code dans un nouveau module
Mais je ne sais pas trop comment le faire fonctionner :
J'ai essayé cela :
----------
Private Sub PDM_NotInList(NewData As String, Response As
Integer)
Call AjoutListeValeurChamp
("T_diagnostic","PDM","'A';'B';'C';'D'")
End Sub
----------
cad sur ma liste basée sur le champ PDM , avec la
propriété "Limiter à liste" = oui,
"sur absence dans liste", je veux remplacer mon rowsource
du champ PDM de la table T_diagnostic par "'A';'B';'C';'D'"
Mais access me met ce message d'erreur :
"Erreur de compilation: Variable ou procédure attendue, et
non un module"
Alors j'ai essayé de lancer à la place une macro qui me
lancerai le module ('ExecuterCode'), sans succes...
Qu'est-ce-qui pourrait clocher ??
J'ai fais ce que tu m'as dit, cad que j'ai copié toutes
les fonctions dans le module de classe de mon formulaire.
Tout fonctionne comme sur des roulettes : lorsque j'ajoute
un élément qui n'est pas dans la liste, le rowsource de la
table a bien été changé. (je n'utilise plus l'ex "'A';'B'"
mais liste = PDM.RowSource & ";" & NewData)
Par contre, il me reste à réactualiser ma liste déroulante
de mon formulaire : Comment faire pour que cette liste me
renvoie les valeurs écrite dans la définition de la table ?
J'ai essayé un Me![PDM].Requery sans succes
Merci encore !!!
On y est presque !!!!
kimai
Private Sub Pdm_NotInList(NewData As String, Response As Integer)
On Error GoTo erreur
Dim mdb As Database, strSQL As String, Reponse As Integer,liste as string
'Efface la valeur entree dans la liste modifiable
DoCmd.DoMenuItem A_FORMBAR, A_EDIT, A_UNDOFIELD, , A_MENU_VER20
'Si on fait entree avec la zone modifiable vide
If NewData = "" Then Exit Sub
'Message choix creation article
Reponse = MsgBox("Voulez vous ajouter cet article : " & NewData, vbYesNo +
vbQuestion, "Ajout article")
If Reponse = vbYes Then
liste = me.PDM.RowSource & ";" & NewData
Call AjoutListeValeurChamp("T_diagnostic","PDM",Liste)
Response = acDataErrAdded
End If
'ACTUALISE LA LISTE avec la nouvelle valeur
Me.Requery
Exit Sub
'Gere l'erreur si on repond non a l'ajout de l'enregistrement
erreur:
Response = acDataErrContinue
End Sub
--
@+
André
Quelques liens avec des exemples, des utilitaires et des compléments pour
Access
http://access.seneque.free.fr/
http://www.self-access.com/
http://www.mvps.org/accessfr/
http://mypage.bluewin.ch/w.stucki/
http://access.jessy.free.fr/
"kimai" news:00d201c36021$a84e5900$
Helloo
J'ai fais ce que tu m'as dit, cad que j'ai copié toutes
les fonctions dans le module de classe de mon formulaire.
Tout fonctionne comme sur des roulettes : lorsque j'ajoute
un élément qui n'est pas dans la liste, le rowsource de la
table a bien été changé. (je n'utilise plus l'ex "'A';'B'"
mais liste = PDM.RowSource & ";" & NewData)
Par contre, il me reste à réactualiser ma liste déroulante
de mon formulaire : Comment faire pour que cette liste me
renvoie les valeurs écrite dans la définition de la table ?
J'ai essayé un Me![PDM].Requery sans succes
Merci encore !!!
On y est presque !!!!
kimai
J'ai essayé avec le code que tu m'as envoyé, sans succès...
il faudrait que je puisse écrire quelque chose du type :
"rowsource de la liste du formulaire" = "rowsource de la
liste de la table"
Je sais faire pour le formulaire : c'est Me!
[PDM].rowsource = "truc"
Et je ne sais pas faire pour la table. Je devrais pouvoir
le trouver dans ton code, puisque celui ci modifie le
rowsource de la table, mais je n'y arrive pas (il y a
beaucoup d'intermédiaire pour arriver à
obj.propertie.quelque_chose....
Il y a une autre solution : celle que j'avais essayé tout
au début, cad tout simplement: (après un msgbox)
PDM.RowSource = PDM.RowSource & ";" & NewData
Cela evite de trafique la table elle-même (on ne touche
qu'a la liste du formaulaire) et cela fonctionne très
bien : apresvalidation de la boite de dialogue, il y a un
nouvel élément dans la liste. MAIS
Le seul GROS pbm ,c'est que lorsqu'on ferme et qu'on ré-
ouvre le formulaire, ce nouvel élément a disparu !!!!
Comment le sauvegarder ???
Merci encore pour toutes tes réponses.
Si cela t'embête trop, dis moi et je prendrai une décision
draconienne : permettre simplement l'ajout sans enrichir
la liste...
A +
Kimai
Je t'ai envoyé un mail avec la base et toutes les
explications nécessaires
Merci encore pour ton aide précieuse
kimai
Ok je regarde ca en debut d'apres midi
--
@+
André
Quelques liens avec des exemples, des utilitaires et des compléments pour
Access
http://access.seneque.free.fr/
http://www.self-access.com/
http://www.mvps.org/accessfr/
http://mypage.bluewin.ch/w.stucki/
http://access.jessy.free.fr/
"kimai" news:097c01c360ac$a62686d0$
Salut,
Je t'ai envoyé un mail avec la base et toutes les
explications nécessaires
Merci encore pour ton aide précieuse
kimai
Merci BEAUCOUP !!! Tout fonctionne à merveille !
Allez, tu as le droit à une dernière petite question :
j'aimerais utiliser ce code pour d'autres listes; faut-il
que je copie colle (en adaptant bien sûr) le code dans
chaque module de classe, ou est ce qu'ilo y a un moyen
d'appeler un module (sans qu'acces m'affiche un message
d'erreur du style : "c'est une valeur ou une procédure
attendue, et non pas un module, espèce de nul !"
Allez, je ne te remercierais jamais assez : Merci !
A plus
Et bonne continuation
Mike