Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Actualiser les données d'un autre formulaire
Avec l'astuce précédente, nous avons appris Ã
ouvrir un formulaire de mise à jour sur un
emplacement précis grâce au
code VBA Access. Il était question de faire correspondre les identifiants. Mais après modification dans la table source et de retour sur le
formulaire parent, nous avions constaté que les informations restaient figées. C'est simplement l'affichage qui travaille en mémoire et qu'il convient d'actualiser. C'est ce que nous proposons de découvrir ici.
Base de données Access à télécharger
Pour la mise en place de cette nouvelle
astuce VBA Access, nous suggérons de récupérer la
base de données des travaux précédents.
- Télécharger le fichier compressé atteindre-identifiant-formulaire.rar en cliquant sur ce lien,
- Double cliquer sur le fichier résultant pour l'ouvrir dans Access,
- Puis, cliquer sur le bouton Activer le contenu du bandeau de sécurité,
- Dans le volet de navigation, double cliquer sur le formulaire f_com pour l'exécuter,
- Avec la barre de navigation, atteindre par exemple le quatrième commercial,
Ce
formulaire archive les chiffres réalisés par chaque commercial issu de la
table Commerciaux. Et dans le même temps, il fixe les objectifs à atteindre. Dans le cas de ce commercial, le chiffre réalisé est inférieur à l'objectif. C'est la raison de cette couleur orange dynamique qui surgit automatiquement.
- Avec la souris, pointer sur la zone de son identifiant,
Comme vous pouvez le voir, un
autre formulaire surgit. Il s'agit du
formulaire f_valid. Et il restitue fidèlement les informations du commercial qui était en cours de consultation depuis le
premier formulaire. C'est le défi que nous avons relevé dans l'astuce précédente qui consistait à atteindre un
enregistrement précis sur un
autre formulaire par le
code VBA Access.
Le rôle de ce nouveau formulaire est de
réajuster l'objectif fixé au commercial à l'aide de la dernière zone de saisie. C'est d'ailleurs la seule qui est disponible à la modification.
- Dans la zone Nouvel objectif, saisir la valeur suivante : 38000,
- Puis, cliquer sur le bouton Valider,
Comme vous pouvez le voir, le
formulaire f_valid se ferme et rend la main au
formulaire f_com. Mais un fait notable se dresse. Malgré la modification de l'objectif entreprise depuis le
formulaire f_valid, sa valeur n'a pas varié sur le
formulaire f_com. De fait, la couleur de mise en valeur n'a pas changé. Pourtant, la
mise à jour a bien été effectuée dans la
table Commerciaux. Vous pouvez le vérifier en l'ouvrant en mode feuille de données. Mais il existe un moyen encore plus simple.
- Avec la barre de navigation, avancer d'un enregistrement,
- Puis, revenir d'un enregistrement vers l'arrière,
Comme vous pouvez le voir, tout rentre dans l'ordre. C'est simplement l'affichage qui n'avait pas été réactualisé. Le nouvel objectif est bien pris en compte et de fait la couleur dynamique s'ajuste automatiquement.
Mémoriser le numéro d'enregistrement
Pour que l'affichage du premier formulaire soit
automatiquement actualisé à validation de la modification par le second formulaire, nous devons simuler le même principe par le
code VBA. Après mise à jour dans la table source et fermeture du second formulaire, nous devons nous
déplacer au travers des enregistrements pour revenir sur le numéro de celui qui était en cours de consultation. C'est ainsi que l'
actualisation s'opèrera automatiquement.
Cependant, un obstacle se dresse. A peine le clic est-il entrepris sur le
bouton Valider que le
formulaire f_valid se réinitialise sur le
premier enregistrement de la
table Commerciaux. En conséquence, la trace du numéro à atteindre sur le premier formulaire pour actualiser l'affichage est perdue.
L'
astuce consiste à mémoriser ce numéro dans une
variable publique, c'est-Ã -dire
en dehors de toute procédure de code, par exemple après saisie du nouvel objectif dans la dernière zone de texte. Nous pourrons ainsi exploiter sa valeur à la
fermeture du formulaire pour bouger dans les enregistrements et
revenir au point de départ.
- Dans le volet de navigation, cliquer droit sur le formulaire f_navig,
- Dans le menu contextuel, choisir le mode Création,
- Sur le formulaire en conception, cliquer sur le bouton Valider pour le sélectionner,
- Activer l'onglet Evénement de sa feuille de propriétés,
- Cliquer sur le petit bouton associé à son événement Au clic,
Nous basculons ainsi dans l'
éditeur VBA Access entre les bornes de la
procédure Valider_Click.
Private Sub Valider_Click()
DoCmd.SetWarnings False
If (Me.Nvel_obj <> "") Then
DoCmd.OpenQuery "r_modif", acViewNormal, acEdit
DoCmd.ShowAllRecords
DoCmd.SetProperty "nvel_obj", acPropertyValue, ""
DoCmd.Close acForm, "f_valid"
End If
End Sub
C'est ainsi que nous avons le plaisir de découvrir le
code VBA qui se charge de ces actions au clic sur le
bouton Valider. Tout d'abord, la
méthode SetWarnings de l'
objet DoCmd permet de neutraliser les
messages d'avertissement d'Access, étant donnée la mise à jour entreprise dans la table source. Ensuite et si la zone du nouvel objectif porte bien une valeur (Nvel_obj <> ""), nous exécutons la
requête r_modif. C'est elle qui prélève la donnée du nouvel objectif fixé pour l'
actualiser dans la table source sur l'enregistrement du commercial concerné. Ensuite, nous fermons le formulaire grâce à la
méthode Close de l'
objet DoCmd. Et effectivement, nous constatons qu'aucune action n'est ensuite entreprise pour actualiser les informations du premier formulaire.
- En haut du code, sous l'instruction Option Compare Database, ajouter la ligne suivante :
Option Compare Database
Dim num As Integer
C'est ainsi que nous déclarons la
variable publique num, comme un entier.
Stocker le numéro récupéré
Grâce à cette
variable, nous allons pouvoir prélever le
numéro de l'enregistrement actif et le transmettre de procédure en procédure.
- Revenir sur le formulaire f_valid en conception,
- Cliquer sur la dernière zone de texte (nvel_obj) pour la sélectionner,
- Dans l'onglet Evénement de sa feuille de propriétés, cliquer sur la ligne Après MAJ,
- Puis, cliquer sur le petit bouton qui se propose à son extrémité droite,
- Dans la boîte de dialogue qui suit, choisir le générateur de code et valider par Ok,
Nous retournons donc dans l'
éditeur VBA Access mais cette fois entre les bornes de la
procédure événementielle nvel_obj_AfterUpdate. Son code se déclenchera à validation de toute nouvelle saisie dans cette zone.
- Dans les bornes de cette procédure, ajouter l'instruction VBA suivante :
Private Sub nvel_obj_AfterUpdate()
num = Me.com_id.Value
End Sub
Très simplement, nous stockons la valeur de l'
enregistrement actif (com_id.Value) dans la
variable num. Souvenez-vous, l'
objet Me désigne l'élément actif au moment de la demande. Ici, il s'agit du
formulaire. Et le
contrôle com_id lui appartient.
Déplacements dans les enregistrements du formulaire
Nous devons maintenant exploiter cette
valeur publique pour réaliser des
déplacements au travers des enregistrements du
formulaire parent (f_com). Et ces
déplacements doivent intervenir
après la mise à jour par la
requête r_modif pour que l'
affichage puisse être
actualisé en tenant compte de la donnée modifiée.
- A la fin de la procédure Valider_Click, ajouter les deux instructions VBA suivantes :
Private Sub Valider_Click()
DoCmd.SetWarnings False
If (Me.Nvel_obj <> "") Then
DoCmd.OpenQuery "r_modif", acViewNormal, acEdit
DoCmd.ShowAllRecords
DoCmd.SetProperty "nvel_obj", acPropertyValue, ""
DoCmd.Close acForm, "f_valid"
DoCmd.GoToRecord acDataForm,"f_com", acGoTo, 1
DoCmd.GoToRecord acDataForm, "f_com", acGoTo, num
End If
End Sub
Nous exploitons donc la méthode
GoToRecord de l'objet
DoCmd décidément précieux, sur le formulaire f_com (acDataForm, "f_com"). Dans un premier temps, il s'agit d'
atteindre (acGoTo) le
premier enregistrement (1) pour revenir sur le commercial qui était en cours de consultation (num). Ce simple
déplacement doit suffire à rétablir la
liaison avec la source de données et donc, Ã
actualiser les informations modifiées.
- Enregistrer les modifications (CTRL + S) et revenir sur le formulaire f_com en exécution,
- Atteindre par exemple le huitième commercial (Monsieur Orange),
- Survoler la zone de son identifiant,
- Saisir le nouvel objectif suivant : 90000 et cliquer sur le bouton Valider,
Aussitôt le
formulaire f_valid s'efface pour rendre l'affichage au
formulaire f_com. Et comme vous pouvez le constater avec plaisir, de manière transparente pour l'utilisateur, en même temps que la donnée de l'objectif est automatiquement mise à jour, la couleur contextuelle est adaptée dynamiquement. Et pour cela, ce sont quelques triviales
instructions VBA Access qui ont été nécessaires.