IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Ouverture de formulaire sur un enregistrement précis


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Points : 45
    Points
    45
    Par défaut Ouverture de formulaire sur un enregistrement précis
    Bonjour,

    Je suis en train de monter une base de données pour travailler sur des projets.
    Celle-ci contient enrivon 15 tables et 10 formulaires.
    J'ai mis un formulaire de navigation avec une barre en haut et une barre latérale gauche qui permet de naviguer facilement entre les différents formulaires.

    Mon problème est que chaque enregistrement dans une table fait référence à un projet précis. Par exemple l'enregistrement n°3 correspond au projet HELP.
    J'aimerais que lorsque je change de formulaire à l'aide du formulaire de navigation, il s'ouvre automatiquement sur le projet en cours, ici le n°3 (et pas sur le premier enregistrement).

    Je pensais à chaque changement de projet sur le formulaire principal, stocker le numéro d'enregistrement dans une variable globale...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub Réf_dossier___OIF_Change()
    Dim noif As Integer
    noif = Me.CurrentRecord
    End Sub
    ...et ouvrir un autre formulaire sur cet enregistrement précis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Load()
    DoCmd.GoToRecord , , acGoTo, noif
    End Sub
    Mais rien ne fonctionne.
    Auriez-vous une solution ?

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Pour ouvrir ton formumaire ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "Leformulaire", , , , , , Me.noif
    J'ai supposé que le contrôle qui contient le projet s'appelle "noif"
    Tu passes ainsi cette valeur comme argument d'ouverture de "LeFormulaire".


    Dans l'événement "Sur ouverture" de LeFormulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Open(Cancel As Integer)
    DoCmd.GoToControl "txtNoif"  'tu donnes le focus au contrôle qui contient la valeur noif
    DoCmd.FindRecord Me.OpenArgs  'et tu cherches l'enregistrement qui contient la valeur passée en argument
    End Sub

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Points : 45
    Points
    45
    Par défaut
    Merci Claude pour ta réponse.

    C'est là ou je galère (je débute en VBA Access).

    J'avais mis lors du changement du contrôle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub Réf_dossier___OIF_Change()
    Dim noif As Integer
    noif = Me.CurrentRecord
    End Sub
    En gros, lors d'un changement sur le champ référence dossier, ce numéro était stocké dans la variable noif.

    Comment dois-je procéder ?

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Peux-tu poster une bdd compatible Access2000 avec tes formulaires et tables, cela permettra de dialoguer avec des données concrètes.

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Points : 45
    Points
    45
    Par défaut
    Les formulaires de navigation sont uniquement sous Access 2010.

    Pour résumé :
    une table A avec un champ Réfdossier
    une autre table B avec un champ Réf dossier également
    quand je suis sur un enregistrement correspondant à un projet sur la table A, la réf du projet doit être mémorisée.
    Quand j'ouvre la table B, cela doit se faire sur le projet en cours (celui mémorisé).

    C'est plus clair ?

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Désolé, je passe la main.

  7. #7
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Pourrais-tu poster une image de ton formulaire de navigation en pièce jointe, qu'on puisse au moins voir à quoi cela ressemble ?

    Domi2

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Points : 45
    Points
    45
    Par défaut
    Et voila.
    Il y a une référence unique dans le champ Réf dossier / OIF onglet synthèse.
    Si on passe sur l'onglet commissions à gauche, on doit arriver directement sur le dossier sur lequel nous étions dans l'onglet synthèse.
    Merci d'avance.
    Images attachées Images attachées  

  9. #9
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    C'est joli !

    Bon, on a donc me semble-t-il deux choses à régler.

    Récupérer Réfdossier et trouver l'événement qui va bien sur le menu de gauche.

    D'abord, définir ta variable publique, soit dans un module standard, soit dans le module de classe du formulaire. Je pars du principe que c'est un Numéroauto et qu'elle est donc de type Long, à toi d'adapter si ce n'est pas le cas.

    Dans l'entête du module, simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Compare Database
    Option Explicit
     
    'Déclaration de la variable publique RéfDossier
    Public lngRéfdossier As Long
    Ensuite, il te faut récupérer ta référence lors de l'ouverture du formulaire, car j'imagine que tu affiches un projet à l'ouverture, ainsi que chaque fois que tu vas changer d'enregistrement. L'évènement qui va bien est Sur activation, tu le trouveras dans les propriétés du formulaire. Tu cliques sur les ... à droite et tu génères le code, ce qui devrais te donner au final ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_Current()
     
        lngRéfdossier = Me.NomDuChampRéfDossier
     
    End Sub
    Tu dois bien sûr adapter NomDuChampRéfDossier.

    Maintenant, je suis dans l'inconnu. Comment as-tu construit ton menu de gauche ? Est-ce que tu vois dans les propriétés un évènement spécifique qui se déclencherait lors d'un clic, d'un changement ?

    Domi2

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Points : 45
    Points
    45
    Par défaut
    Merci !

    Oui en fait le menu à gauche est constitué de sorte de bouton avec de multiples propriétés notamment sur clic, sur réception focus; sur entrée...
    On peut à chaque fois y associer un générateur de macro, d'expression ou de code.

    TO.

  11. #11
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Ok, on avance.

    Il n'est pas nécessaire comme cela a été dit plus haut d'ouvrir le formulaire, puis dans l'évènement Sur ouverture d'atteindre l'enregistrement spécifié.

    C'est possible directement en ouvrant le formulaire en utilisant la méthode OpenForm.

    Regarde la syntaxe de cette méthode dans l'aide, en t'intéressant à l'argument facultatif conditionWhere.

    Tu as un exemple dans l'aide, tu en trouveras 2'000 (j'exagère à peine) sur le forum Access.

    En résumé, sur l'évènement Sur clic du bouton de menu qui va bien, je pense que c'est l'évènement qui convient le mieux, tu ouvres ton formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm.................... & lngRéfdossier
    Attention, la syntaxe est légèrement différente selon que ta variable est de type numérique ou texte.

    Je te laisse faire quelques essais.

    Domi2

  12. #12
    Membre du Club
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Points : 45
    Points
    45
    Par défaut
    Bon je ne m'en sors pas.
    Même sans passer par mon formulaire de navigation (qui complique un peu les choses), je n'y arrive pas.

    J'aimerais lier tous les formulaires de cette base entre eux par rapport aux enregistrements de sorte que si je sélectionne le troisième enregistrement du 1er formulaire que j'ouvre, alors tous les autres formulaires à ouvrir se positionnerons sur le 3ème enregistrements.
    Mon champ commun à toutes les tables est [Réf Dossier / OIF].

    Merci d'avance pour votre implication.
    TO.

  13. #13
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Reprenons au début.

    D'abord, définir ta variable publique, soit dans un module standard, soit dans le module de classe du formulaire. Je pars du principe que c'est un Numéroauto et qu'elle est donc de type Long, à toi d'adapter si ce n'est pas le cas.

    Dans l'entête du module, simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Compare Database
    Option Explicit
     
    'Déclaration de la variable publique RéfDossier
    Public lngRéfdossier As Long
    Ensuite, il te faut récupérer ta référence lors de l'ouverture du formulaire ainsi que chaque fois que tu vas changer d'enregistrement. L'évènement qui va bien est Sur activation, tu le trouveras dans les propriétés du formulaire. Tu cliques sur les ... à droite et tu génères le code, ce qui devrais te donner au final ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Current()
     
        lngRéfdossier = Me.[Réf Dossier / OIF]
     
        'Affichage d'un message pour vérification
        MsgBox lngRéfdossier
     
    End Sub
    On verra la suite lorsque ceci fonctionnera.

    Domi2

  14. #14
    Membre du Club
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Points : 45
    Points
    45
    Par défaut [AC-2010] Ouverture de formulaire sur un enregistrement précis
    Absent qq jours, de retour et je dois terminer cette base cette semaine...

    Je viens de faire les 2 opérations, cela semble fonctionner. J'ai pour le moment réaliser l'opération sur les formulaires hors formulaire de navigation (ça semble être un peu différent) ?
    J'ai mis le code sur "sur activé" (il y avait aussi sur ouverture).

    Quand j'ouvre le formulaire il m'indique 1, qui est le premier enregistrement du formulaire sur lequel il s'ouvre.

    Ensuite ?
    Merci pour votre aide.

  15. #15
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    L'évènement exact est Sur activation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Current()
     
        lngRéfdossier = Me.[Réf Dossier / OIF]
     
        'Affichage d'un message pour vérification
        MsgBox lngRéfdossier
     
    End Sub
    Ok, quand tu ouvres ton formulaire, logique que tu aies le premier enregistrement.

    Maintenant, si tu changes d'enregistrement, est-ce que le message t'indique correctement une nouvelle ID ?

    Domi2

  16. #16
    Membre du Club
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Points : 45
    Points
    45
    Par défaut
    Et bien, non toujours le premier enregistrement.

    Sur l’évènement Sur activé j'ai bien mis le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Compare Database
    Option Explicit
    'Déclaration de la variable publique RéfDossier
    Public lngRéfdossier As Long
     
    Private Sub Form_Activate()
    lngRéfdossier = Me.[Réf dossier / OIF]
    'Affichage d'un message pour vérification
    MsgBox lngRéfdossier
    End Sub

  17. #17
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Ce n'est pas le bon évènement, comme je l'ai déjà mentionné précédemment.

    Il faut utiliser Sur activation et non Sur activé. L'évènement est le premier de la liste des propriétés sous Access 2003, à voir sous 2010 :

    La procédure doit être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Form_Current()
    Domi2

  18. #18
    Membre du Club
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Points : 45
    Points
    45
    Par défaut
    Oui merci.
    Quand je passe à l'enregistrement suivant, le 2 par exemple, msgbox affiche 2.

  19. #19
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Le premier problème est donc réglé, ta variable publique mémorise correctement l'id de l'enregistrement courant.

    Pour la suite, commençons simplement. Dans mon idée, le formulaire "Synthèse" est le le formulaire "maître" de la navigation, c'est-à-dire qu'il est le seul à avoir des boutons de navigation permettant de changer d'enregistrement.

    Cela implique que si tu ouvres un autre formulaire, il te faudra y revenir pour passer à un autre enregistrement.

    Donc, sur ton formulaire "Synthèse", tu as le code précédent dans l'évènement Sur activation.

    Maintenant, dans un évènement Sur clic de l'onglet de navigation, tu mets ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Docmd.OpenForm "MonForm",,,"Id=" & lngRéfdossier
    En remplaçant MonForm et Id par ceux que tu utilises. En cas de doute, regarde la syntaxe de la méthode OpenForm dans l'aide.

    Domi2

  20. #20
    Membre du Club
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Points : 45
    Points
    45
    Par défaut
    Cela fonctionne mais hors formulaire de navigation ou tout semble être un peu plus compliqué.

    Merci pour votre aide.

Discussions similaires

  1. [Toutes versions] Probleme ouverture formulaire sur un enregistrement préci
    Par azur123 dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/08/2012, 23h43
  2. [AC-2003] Ouverture d'un formulaire sur un enregistrement précis
    Par Jeanpierre71 dans le forum IHM
    Réponses: 7
    Dernier message: 10/10/2011, 17h56
  3. Ouverture d'un formulaire sur un enregistrement précis
    Par Halzard dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/06/2007, 14h36
  4. Réponses: 1
    Dernier message: 06/07/2006, 14h44
  5. ouverture du formulaire sur nouvel enregistrement
    Par azde7015 dans le forum IHM
    Réponses: 3
    Dernier message: 14/02/2006, 19h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo