Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 28/04/2011, 10h59   #1
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
Par défaut Rafraichir le contenu d'un sous-formulaire

Bonjour.

Je suis actuelleme à la recherche d'un moyen de rafrachir le contenu d'un sous-formulaire dont la source de données à été modifiée, et ceci sans avoir à fermer/rouvrir le formulaire principal (qui est la méthode que j'utilise actuellement, mais cela manque naturellement d'esthétisme)

Jai parcouru un peu le web, vos forums et consulté un de me professeurs pour avoir testé plusieurs sans succès.

J'ai notamment trouvé ceci, mais dans mon cas, la méthode .repaint ne fonctionne pas.
http://www.developpez.net/forums/d99...us-formulaire/

J'ai essayé toutes sortes de codes trouvés sur web, ainsi que dans l'aide d'access.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Form.Requery 'Liason à la source de données mise à jour
Form.Refresh 'On actualise la source de données liée
Form.Repaint 'On affiche instantanément les éléments graphiques en attente

'trouvé sur : http://www.access-programmers.co.uk/forums/showthread.php?t=195068
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

'Mon professeur d'informatique m'avait justement dirigé vers cette commande
DoCmd.DoMenuItem(BarreMenus, NomMenu, Commande, SousCommande, Version)

'Plusieurs tests sans succès... MSDN m'a redirigé vers
DoCmd.RunCommand(Commande)

'Plusieurs test sans succès également
Mon but est réellement de pouvoir afficher dans mon sous-formulaire, le contenu modifié de la source de données qui y est liée

Auriez-vous une solution ou même une piste ?
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 11h27   #2
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
bjr,

les DoMenuItem ne sont pas recommandés, c'est illisible ...

pour raffraichir les données d'un formulaire :
- refresh pour mettre à jour les enregistrements affichées (on ne voit pas les ajout, les suppressions restent avec un message "supprimé")
- requery pour actualiser tous les enregistrements (y compris ajout, suppression)

pour atteindre le sous-formulaire et appeler la commande sur le bon objet (l'objet form du contrôle contenant le sous-formulaire)
http://loufab.developpez.com/tutorie...pelformulaire/
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 12h09   #3
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
Merci pour ta réponse. Mais comme je l'ai dit, mon but est vraiment d'afficher le contenu modifié de la source de donnée à laquelle mon sous formulaire est lié.

C'est à dire inclure les nouveaux enregistrements, supprimer les enregistremetns supprimés, et que les enregistrements modifiés disposent de leurs nouvelles informations
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 13h40   #4
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
Citation:
Envoyé par Gibra Voir le message
Merci pour ta réponse. Mais comme je l'ai dit, mon but est vraiment d'afficher le contenu modifié de la source de donnée à laquelle mon sous formulaire est lié.

C'est à dire inclure les nouveaux enregistrements, supprimer les enregistremetns supprimés, et que les enregistrements modifiés disposent de leurs nouvelles informations
Citation:
Envoyé par Arkham46 Voir le message
- requery pour actualiser tous les enregistrements (y compris ajout, suppression)
ça marche pas le requery??
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 14h38   #5
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
Oui, requery actualise tout les enregistrements de la source de données.
Ce qu'il me faudrait c'est une sorte de

Code :
Subform.ActualiserAffichageDApresSourceDonnees
Ce que je cherche à faire, c'est que le contenu actuel du sous-formulaire (donc en visuel sur l'écran) soit mis à jour en fonction du noveau jeu d'enregistrements de la source de données sans avoir quitter et réouvrir mon formulaire principal.

(Pardon si j'ai de la peine à m'exprimer)
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 17h19   #6
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
quel est le code utilisé?
quelle est le résultat? l'erreur éventuelle?

je ne comprend pas où est le blocage
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 16h51   #7
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
Concrètement, ceci est un projet scolaire soumis à évaluation. Mon code source se trouve donc sauvegardé en salle de classe et ces forums seront cités en tant que ressources utilisées pour le développement du projet

Je reposterai sur ce topic mon code avec capture d'écran à l'appui pour expliquer plus concrètement mon problème. Cependant, je n'ai pas cours d'informatique d'ici mardi. Il faudra patienter.

Merci de m'avoir malgré tout proposé des solutions. Et a mardi
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 10h01   #8
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
Bonjour,
Pour rafraichir un sous-formulaire
depuis le formulaire
Code :
1
2
 
Me!NomSousFormulaire.requery
depuis un module
Code :
1
2
 
Forms("NomFormulaire")!NomSousFormulaire.requery
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 08h47   #9
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
Me revoila avec une description un peu plus détaillée de mon problème.

Je dispose donc, en tant qu'utilisateur, de l'interface qui vous est présentée dans la capture d'écran jointe à ce post.

Lorsque je clique sur le bouton rechercher, j'exécute le code suivant. (Bon, je vais pas tout vous mettre. Ca ne vous sert à rien =D)

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
27
28
29
30
 
Private Sub btnRecherche_Click()
 
    [...]
 
    'Récupération de la requête
    myString = CurrentDb.QueryDefs("REQ_SearchSource").SQL
 
    'Supression du ; final
    myString = Replace(myString, ";", "")
 
    'On ajoute la clause WHERE
    myString = myString + " WHERE"
 
    'Ici, analyse du contenu des champs de recherche pour modifier la requête
    'Ce code est fonctionnel
 
    [...]
 
    'Affectation de la requête
    CurrentDb.QueryDefs("REQ_Search").SQL = myString
 
    'Rafraichissement de la liste des e-mails
    sfrmListe.SetFocus
    sfrmListe.Requery       'Rafraichissement de la source de données
 
    DoCmd.Close
    DoCmd.OpenForm frmName
 
End Sub
frmName est une variable qui contient le nom du formulaire principal.
C'est pour garantir la fonctionalité du code même si le nom du formulaire venait à être modifié

sfrmListe est mon sous-formulaire

REQ_Search et REQ_SearchSource sont respectivement la chaine de la requête que je renvoie pour la recherche, et celle sur laquelle je me base (Affichage de la totalité du contenu)

Les deux dernières lignes vont faire s'ouvrir et refermer le formulaire afin que le contenu du sous-formulaire soit adapté à celui de la source de données qui à été modifiée.

En effet, le requery met à jour la source de données en y incluant les nouveaux enregistremts, les enregistrements modifiés, et supprime les enregistrements obsolètes. Cependant, mon contrôle sous-formulaire ne se met pas à jour lorsque sa source de données est mise à jour, et c'est cela que je souhaite faire. (Vous aurez compris que le sous-formulaire est la partie droite de la capture d'écran, qui fait le listing des e-mails)

Donc le requery mets bien à jours ma source de données. Maintenant, c'est mon contrôle "sous-formulaire" que je souhaite mettre a jour.

merci
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 10h19   #10
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
bjr,

Au vu du code donné :

Citation:
Envoyé par Gibra Voir le message
sfrmListe est mon sous-formulaire
non, sfrmListe est le contrôle qui contient le sous-formulaire
d'où mon lien vers un tuto pour bien cibler le formulaire contenu et non le contrôle le contenant

Citation:
Envoyé par Gibra Voir le message
En effet, le requery met à jour la source de données en y incluant les nouveaux enregistremts, les enregistrements modifiés, et supprime les enregistrements obsolètes.
[...]
Donc le requery mets bien à jours ma source de données. Maintenant, c'est mon contrôle "sous-formulaire" que je souhaite mettre a jour.
non, le requery ne fait aucune opération sur la source des données
le requery demande à réexécuter la requête source des données du formulaire
il faudrait essayer de le placer sur le sous-formulaire et non sur le contenant
[edit] de mémoire je ne saurais dire si le requery a un comportement différent si on l'exécute sur le contrôle contenant ou sur le sous-formulaire contenu, c'est à tester pour voir si ça corrige le problème

note : le setfocus est probablement inutile
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 10h41   #11
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
Merci pour ta réponse.

Le coup du pointeur à la première énonciation pour le contrôle de sous formulaire était un peu ambïgu pour moi. Raison pour laquelle je n'ai pas trouvé ce que je cherchais dans ton tutoriel.

J'ai donc re-recherché dans le tuto pour pointer correctement le sous-fomulaire et j'ai le plaisir de t'annoncer que cela fonctionne.

Merci beaucoup pour votre patience et votre aide Arkham46
Ainsi qu'à helas pour m'avoir proposé une solution
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 10h55   #12
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
Citation:
Envoyé par Gibra Voir le message
J'ai donc re-recherché dans le tuto pour pointer correctement le sous-fomulaire et j'ai le plaisir de t'annoncer que cela fonctionne.


j'ai été un peu sadique : je t'ai laisser chercher dans le tutoriel pour que tu comprennes bien
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 12h05   #13
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
IMPORTANT! Je retire ce que j'ai dit.

Un peu trop heureux d'avoir compris le principe du pointeur dans les sous formulaires, j'ai oublié de retirer les fameuses deux lignes de code peu esthétiques que j'utilisais auparavant pour que cela fonctionne (afin de ne pas me retarder dans mon projet). Normal donc, que cela fonctionnait

Code :
1
2
DoCmd.Close
DoCmd.OpenForm "maForme"
Ce qui se passe est la chose suivante avec le requery, que ce soit sur la forme du sous formulaire, ou le sous formulaire lui-même que l'on effectue l'action.

C'est la source de données liées au sous formulaire qui est mise à jour, mais pas le contenu du sous formulaire tel qu'il est affiché à l'écran
(Quand je parle de source de données liées, c'est la requête ou la table sur laquelle est basée le dit sous-formulaire)

Cependant, et graçe aux pointeurs que j'ai compris par arkham46, il faut pour raffraichir le contenu du sous-formulaire, lui réindiquer sa source de données pour qu'il puisse actualiser son contenu (que l'on voit donc à l'écran, j'insiste).

pour ce faire, j'ai utilisé le code suivant que je peux enfin garantir comme fonctionnel
Code :
1
2
Me.sfrmListe.SetFocus 'sinon, ca ne marche pas
Me.sfrmListe.Form.RecordSource = "MaRequete"
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h30.


 
 
 
 
Partenaires

Hébergement Web