OVH Cloud OVH Cloud

Enregistrer les modifications...

2 réponses
Avatar
Ryo
Salut !

Je renviens (encore) à la charge avec mon problème, mais cette fois
j'ai mit le code source (enfin la plus grande partie).
Je voulais pas trop le mettre pour pas trop alourdir le post mais comme
je tourne vraiment en rond et que je trouve pas de solution.
EMP et 3stone m'ont proposé des solutions mais j'arrive pas a mettre en
oeuvre celle d'EMP et celle de 3stone ne marche pas.
Mon problème est que j'ai un message qui s'affiche me demandant
d'enregistrer les modifications effectuer sur mon form "frm_Menu" et
mon form TmpTri:

Public Sub GenerationRequeteEtForm()
'Génère la requête de tri et le formulaire d'affichage du résultat
On Error GoTo NoResult
Dim RS As Recordset
Dim Ctl As Control
Dim SQLBase As String
Dim SQLChoix As String
Dim SQLCondition As String
Dim SQLTriPar As String
Dim Champ As String

'Initialisation des éléments
Set RS = Form_frm_Sous_Formulaire_Tri_Creation.RecordsetClone
RS.MoveFirst
SQLBase = CurrentDb.QueryDefs("rqt_Base_Tri").SQL
SQLBase = Left(SQLBase, Len(SQLBase) - 3)
SQLChoix = "SELECT DISTINCT"
SQLCondition = " WHERE"
SQLTriPar = " ORDER BY"
Form_frm_Menu.Sous_Formulaire_Tri_Resultat.SourceObject =
"frm_Sous_Formulaire_Tri_Attente"
Form_frm_Sous_Formulaire_Tri_Attente.Texte_Etat.Caption = "En
cours..."
Form_frm_Sous_Formulaire_Tri_Attente.Barre_01.Value = 0
Form_frm_Sous_Formulaire_Tri_Attente.Barre_01.Visible = True

DoCmd.OpenForm TmpTri, acDesign, , , , acHidden
Form_frm_Sous_Formulaire_Tri_Attente.Barre_01.Max =
(Forms(TmpTri).Controls.Count / 2) + RS.RecordCount + DCount("[TES
Sortie]", RS.Name, "[TES Sortie]<>0") + DCount("[TES Condition]",
RS.Name, "[TES Condition] IS NOT NULL") + DCount("[TES TriPar]",
RS.Name, "[TES TriPar]<>0")

'Nettoyage du formulaire
While Forms(TmpTri).Controls.Count <> 0
Call DeleteControl(TmpTri, Forms(TmpTri).Controls(0).Name)
Form_frm_Sous_Formulaire_Tri_Attente.Barre_01.Value =
Form_frm_Sous_Formulaire_Tri_Attente.Barre_01.Value + 1
Wend

'Génération des éléments de la requête et du formulaire
->Supprimer<-

'Assemblage des éléments de la requête
If Len(SQLChoix) > 15 Then SQLBase = SQLChoix & " " &
Right(SQLBase, Len(SQLBase) - 19)
If Len(SQLCondition) > 6 Then SQLBase = SQLBase & SQLCondition
If Len(SQLTriPar) > 9 Then SQLBase = SQLBase & SQLTriPar
SQLBase = SQLBase & ";"

'Assignation de la requête génèrée comme enregistrement du
formulaire génèré et fermeture du formulaire
Forms(TmpTri).RecordSource = SQLBase
DoCmd.Close acForm, TmpTri, acSaveYes <- C'est sur cette ligne
qu'Access me pose la question.


'Assignation du formulaire généré comme source du sous formulaire
d'affichage du résultat
Set RS = CurrentDb.OpenRecordset(SQLBase)

If RS.RecordCount <> 0 Then
Form_frm_Menu.Sous_Formulaire_Tri_Resultat.SourceObject =
TmpTri
Form_frm_Menu.Sous_Formulaire_Tri_Resultat.LinkMasterFields =
""
Form_frm_Menu.Sous_Formulaire_Tri_Resultat.LinkChildFields = ""
Else
NoResult: Form_frm_Sous_Formulaire_Tri_Attente.Texte_Etat.Caption =
"Aucun résultat..."
End If

Set RS = Nothing
Set Ctl = Nothing
End Sub
Si vous voyez comment faire.
Merci d'avance.

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com

2 réponses

Avatar
3stone
Salut,

"Ryo"
[...] et celle de 3stone ne marche pas.


Je ne pense pas t'avoir conseillé ce plat de... "nouille" ;-))


<snip>
'Assignation de la requête génèrée comme enregistrement du
formulaire génèré et fermeture du formulaire
Forms(TmpTri).RecordSource = SQLBase
DoCmd.Close acForm, TmpTri, acSaveYes <- C'est sur cette ligne
qu'Access me pose la question.



Si tu modifie le sous formulaire ET le formulaire principal,
ferme en sauvant les *deux* et en commencant par
le sous-formulaire.


<snip>
If RS.RecordCount <> 0 Then
Form_frm_Menu.Sous_Formulaire_Tri_Resultat.SourceObject > TmpTri
Form_frm_Menu.Sous_Formulaire_Tri_Resultat.LinkMasterFields > ""
Form_frm_Menu.Sous_Formulaire_Tri_Resultat.LinkChildFields = ""
Else
NoResult: Form_frm_Sous_Formulaire_Tri_Attente.Texte_Etat.Caption > "Aucun résultat..."
End If



Pour être (re)lisible, écris plutôt:

If RS.RecordCount <> 0 Then

With Form_frm_Menu.Sous_Formulaire_Tri_Resultat
.SourceObject = TmpTri
.LinkMasterFields = ""
.LinkChildFields = ""
End With

Else

'NoResult
Form_frm_Sous_Formulaire_Tri_Attente.Texte_Etat.Caption = "Aucun résultat..."

End If



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------

Avatar
Ryo
Donc je devrais faire:
DoCmd.Close acForm, TmpTri, acSaveYes <- formulaire source du sous
formulaire
DoCmd.Close acForm, "frm_Menu", acSaveYes <- formulaire principal
contenant le sous formulaire
Sauf que ca resoud pas mon probleme, il me demande toujours de
sauvegarder apres le DoCmd.Close acForm, TmpTri, acSaveYes, et puis
surtout faut pas que je ferme mon formulaire principal vu qu'il va
afficher le résultat de ma requête dans son sous formulaire.
Merci quand même.

Le 22/06/04, 3stone a supposé :
Si tu modifie le sous formulaire ET le formulaire principal,
ferme en sauvant les deux et en commencant par
le sous-formulaire.


--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com