formateur informatique

Se déplacer sur un enregistrement précis du formulaire

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Se déplacer sur un enregistrement précis du formulaire
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Inscription Newsletter
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,
Objectifs et chiffres affaires des commerciaux sur un formulaire Access

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,
Formulaire Access pour modifier les objectifs à atteindre

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,
Actualiser les données sur un formulaire Access par déplacements entre enregistrements

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.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn