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 16/11/2010, 01h00   #1
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Par défaut pb de rafraichissement d'un sous-formulaire

Bonjour et merci d'avance pour vos réponse.

Je suis en train de développer une nouvelle appli. Pour cela, j'ai adapté la superbe application de robert SIMARD (pseudo LOGIPRO) "Logiciel de gestion de flotte de véhicule" (téléchargeable sur http://www.logicielappui.com/tips/Acc2007_Camion.zip).

Cependant, je pêche sur un problème de rafraichissement de sous-formulaire.

Le mode opératoire :
Sur le formulaire principal, j'ai créé plusieurs sous-formulaires (plus exactement, j'ai cloné un ss-form. existant et j'ai adapté le code)
chaque ss-form. contient 3 boutons "Ajouter", "modifier" et "supprimer"
les boutons "Ajouter" et "modifier" appellent un formulaire de saisie défini en mode modal. Le bouton "supprimer" ne fait qu'une opération de Delete dans la table.
De plus, pour améliorer l'appli, j'ai rajouté dans le formulaire principal un compteur d'enregistrement de chaque ss-form. (plutôt un compteur amélioré avec des critères supplémentaires de type clause WHERE).
Lors de l'ajout, l'appel au formulaire s'écrit de la manière suivante :
Code :
1
2
3
4
Private Sub cmdAdd_Click()
  DoCmd.OpenForm "frmCourrierOfficiel", , , , acFormAdd
  Forms!frmCourrierOfficiel!ENR = Forms!frmDomicilié!ENR
End Sub
Pour la modif , il s'écrit comme cela
Code :
1
2
3
4
5
Private Sub cmdModify_Click()
  If IsNull(Me!NoUnique) Then Exit Sub
  DoCmd.OpenForm "frmCourrierOfficiel", , , "[NoUnique]=" & Me!NoUnique, , acDialog
  Me.Requery
End Sub
pour la suppression le code se présente comme cela :
Code :
1
2
3
4
5
6
7
8
Private Sub cmdDel_Click()
  If MsgBox("Voulez-vous vraiment supprimer ce courrier officiel ?", 4 + 32 + 256, "Suppression") = vbYes Then
     CurrentDb.Execute "Delete Compteur FROM [Courrier officiel] WHERE (((NoUnique)=" & Me!NoUnique & "))"
     CurrentDb.Execute "UPDATE Domicilés SET Domicilés.[Compteur Courrier officiel] =" & CompteCourrierEnAttente("Courrier officiel", Forms!frmDomicilié!ENR) & _
                  " WHERE (((Domicilés.ENR)=" & Forms!frmDomicilié!ENR & "));"
     Me.Requery
  End If
End Sub
(NB : tous ces codes sont écrit dans le sous-formulaire)

Le pb est le suivant :
Lorsque j'ajoute un nouvel enregistrement, le sous-formulaire ne se rafraichit pas, et je suis obligé d'appuyer sur le bouton "actualiser tout". J'ai bien essayé un me.requery mais rien n'y fait.
De plus, j'ai essayé de rajouter le recalcul de mon compteur, de la manière suivante :
Code :
1
2
3
4
5
6
7
8
Private Sub cmdAdd_Click()
  DoCmd.OpenForm "frmCourrierOfficiel", , , , acFormAdd
  Forms!frmCourrierOfficiel!ENR = Forms!frmDomicilié!ENR
 
     CurrentDb.Execute "UPDATE Domicilés SET Domicilés.[Compteur Courrier officiel] =" & CompteCourrierEnAttente("Courrier officiel", Forms!frmDomicilié!ENR) & _
                  " WHERE (((Domicilés.ENR)=" & Forms!frmDomicilié!ENR & "));"
 
End Sub
et là je m'aperçoit que le CurrentDb.Execute s'exécute AVANT l'ouverture du formulaire (je pense donc qu'il en est de même pour le requery.
Comment puis-je contourner ce problème, de manière que le rafraichisement et mes calculs se fassent APRES la fermeture du formulaire de saisie ?

J'ai essayé de rajouter le paramètre ACMODAL, mais là je tombe en erreur, car l'exécution est suspendue jusqu'à la fermeture du formulaire, et alors je ne peux pas récupérer le ENR du formulaire principal.

Par contre, aucun problème de refresh/recalcul lors de la modif/suppression.

Quelle est la subtilité que je n'ai pas vue ?

Merci d'avance pour vos conseils éclairés.



PS : au fait, ce n'est pas ACMODAL, que j'ai rajouté, mais AcDialog ... vous aurez fait vous-mêmes la correction.
dumas.blr 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 17h44.


 
 
 
 
Partenaires

Hébergement Web