Appeler un formulaire

Résolu
Tessel75 -  
 Tessel75 -
Bonjour,
Existe-t-il une commande pour que, lorsqu'un formulaire est affiché en mode "formulaire Continu", et qu'on sélectionne un enregistrement, la liste des enregistrements remonte de telle sorte que ce soit l'enregistrement sélectionné qui apparaisse en haut de l'écran?
Il y a la commande "Scroll", mais je ne sais pas du tout comme elle fonctionne.
Merci pour vos connaissances.
Configuration: Windows / Firefox 88.0

12 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Ai rien trouve sur votre commande "Scroll". Vous voulez arriver a quoi en mettant l'enregistrement selectionne en premiere ligne?
    0
  2. Tessel75
     
    Merci de ta réponse.
    Il s'agit d'un formulaire dont le champ principal est de type Mémo, càd très grand. Aussi quand le pointeur est en dehors de ce champ, il est mis en taille réduite, et il s'agrandit jusqu'à occuper presque toute la fenêtre quand on pointe dessus, et reprend sa taille initiale quand on en sort. De la sorte, à l'ouverture du formulaire en modeContinu , le champ "Mémo" étant replié, je peux voir 5 à 6 enregistrements/formulaires en même temps et choisir celui sur lequel je veux travailler.
    Le problème est que, lorsque le champ Mémo se déploie, tous les formulaires voient leur champ Mémo se déployer en même temps. Aussi, si le formulaire sélectionné n'est pas en haut de la fenêtre, je ne le vois plus, mais je vois uniquement celui qui est en haut de la fenêtre parce que tous ont été abaissés de la hauteur du/des champ(s) Mémo de/des l'enregistrement qui le précède(nt).
    C'est la raison pour laquelle je voudrais une commande qui relève automatiquement l'enregistrement sélectionné en haut de la fenêtre, pour que lorsque je le choisis, c'est bien celui-là qui apparaitra au milieu de la fenêtre et non pas son voisin.
    Pour dire, le "Détail" du formulaire passe de 3,8cm de hauteur à 13,75cm et le champ-Mémo de 1,4cm à 11,5cm
    En espérant avoir été un peu clair dans mes explications.
    Merci
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bonjour,
      Merci à f894009 pour son excellent question!
      Je pensais que plusieurs enregistrements étaient visibles, et que Tessel75 voulait mettre en haut un de ces enregistrements.
      Je pense maintenant avoir compris que Tessel75 veut simplement rendre visible un des enregistrements qui n'est pas visible.
      Si j'ai compris, je pense que c'est assez simple à réaliser.
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Si je comprends, tu essayais de positionner l'enregistrement choisi en haut, avant de tout agrandir. Je ne vois pas comment faire cela.
        Par contre, il est possible, je pense, de mémoriser l'enregistrement choisi, de tout agrandir, et ensuite de se positionner sur l'enregistrement mémorisé, de façon à ce qu'il soit visible.
        La même technique est utilisée pour rafraichir un formulaire et ensuite se positionner sur l'enregistrement courant, ou, pour se positionner sur un enregistrement recherché.
        0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Pas tout compris. Pour moi, c'est impossible de placer un enregistrement particulier en debut par un code VBA gerant la barre de defilement verticale.
    Par contre avec un filtre sur click du champ, vous n'aurez que cet enregistrement sur le formulaire.

    Ex: Formulaire Liste de Taches, source requete Tâches en cours sur une Table Tâche avec une cle primaire(Obligatoire). Marche aussi sur formulaire lie directement a un table avec cle primaire
    Procedure evenementielle sur le champ Status du formulaire
    Private Sub Status_Click()
        If Enreg <> 0 Then
            DoCmd.ShowAllRecords    'tous enregistrements
        Else
            Enreg = Me.ID      'numero de la cle de l'enregistrement du champ selectionne
            DoCmd.ApplyFilter , "[Tâches en cours].ID=" & Enreg   'filtre 
        End If
    End Sub
    0
  4. Tessel75
     
    Merci pour ta réponse.
    Pour te figurer la chose, imagine un dictionnaire avec les mots et les définitions avec des exemples. Il y a un champ/contrôle Mot et un champ/contrôle Définition
    Tu sélectionnes un mot et tu pointes le champ/contrôle Définition, alors il prend sa dimension de travail pour découvrir le texte de la définition, les exemples, les synonymes, etc. Quand on sort de ce contrôle, il se replie, et on peut en sélectionner un autre. C'est pour ça que pour moi, il est important de garder l'ensemble des enregistrements visibles en même temps, et j'ai peur qu'avec ta méthode de sélection d'un enregistrement, je ne puisse plus revenir à ma présentation en mode continu.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Avec votre fichier, je pourrai peut-etre trouver une solution car je pige pas comment il fonctionne.
    0
  7. Tessel75
     
    Désolé, ce n'est pas possible, il est trop gros et trop compliqué avec des codes VBA imbriqués. Même en essayant de l'alléger, il faudrait trop d'explications pour indiquer toutes les manœuvres.
    Je peux juste essayer de construire un formulaire-type avec un contrôle à dimensions variables. Mais un peu de patience, s'il te plait, il me faut un certain temps.
    0
  8. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,
    Ok, y a pas d'lezard
    0
  9. Tessel75
     
    ça y est, c'est fait! Voir la pièce jointe :
    https://cjoint.com/c/KFdno1mVIGC

    Pour l'utilisation: Ouvrir le formulaire F_NotesRapides, il s'ouvre en mode continu.
    Le contrôle qui pose problème est celui étiqueté "Citation et Commentaires"
    Pour voir le problème que j'évoque, il faut se mettre qqpart au milieu de l'ensemble des enregistrements et pointer le contrôle "Citation et Commentaires", alors il s'agrandit et si l'enregistrement sélectionné n'est pas celui qui est en haut, il disparait au profit de celui qui était en haut.
    Bonne visite !
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      il y a déjà un code qui intervient au moment de cette action, ou pas?
      0
  10. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Passez par le site https://mon-partage.fr/, car petit probleme de bloquage de votre fichier au telechargement(!!)
    0
    1. Tessel75
       
      https://mon-partage.fr/f/hzB8nFEw/

      https://cjoint.com/c/KFdq26YhvFC


      J'ai fait une nouvelle version en format .mdb, en espérant que vous puissiez l'ouvrir. Merci.
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Tessel75
         
        ceci ne fonctionne pas, je continuerai à essayer, cela en inspirera peut-être d'autre:
        Private Sub CitationRapide_GotFocus()
        Dim rs As Recordset, np As Integer
        np = Me.NoPage
        Set rs = CurrentDb.OpenRecordset("select page from T_Notes where page=" + CStr(np), dbOpenDynaset)
        rs.MoveFirst
        Debug.Print rs!Page, rs.Bookmark
        Call AgrandissementCitation
        Me.Bookmark = rs.Bookmark
        End Sub
        0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      moi j'ai pu le télécharger.
      0
  11. Tessel75
     
    @Yg_Be , Merci pour ta réponse.
    Le problème est aussi que, étant un pur autodidacte en VBA, je n'ai pas trop l'habitude de ce genre d'expression du code. Aussi il y a-t-il pas mal d'expression que je ne comprends pas, et ne sais pas ce qu'elles ordonnent. Je me permets donc de demander des explications.
    CurrentDb.OpenRecordset("select page from T_Notes where page=" + CStr(np), dbOpenDynaset)
    Pourquoi "select page", alors que le formulaire dont les données sont celles de T_Notes, est déjà ouvert, et le pointeur est sur le contrôle à agrandir ?
    Par ailleurs qu'est ce que "CStr(np), et aussi "dbOpenDynaset" ?
    Que commande la ligne "rs.MoveFirst" ?
    Et de même "Debug.Print rs!Page, rs.Bookmark"
    Merci
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      j'ai publié une autre suggestion en #17, qui me semble fonctionner.
      debug.print
      , cela permet simplement d'afficher des informations dans une fenêtre de débogage, tu peux supprimer cela ou le mettre en commentaire.
      si tu fais une recherche
      vba cstr
      , tu trouveras une explication.
      0
    2. Tessel75
       
      Malgré tout, j'ai copié le bout de code dans mon code, et rien ne se passe. Aucun mouvement; rien !
      Désolé !
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Tessel75
         
        où as-tu copié quoi?
        0
  12. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    ceci semble fonctionner, après avoir ajouté au formulaire un contrôle, txtid, contenant la clé primaire de la table:
    Private Sub CitationRapide_GotFocus()
    Dim rs As Recordset
    Set rs = Me.Recordset
    rs.FindFirst ("NoNotesrap=" + CStr(txtid))
    If Not rs.NoMatch Then
        Debug.Print rs!NoNotesRap, rs!Page, CStr(rs.Bookmark)
        Call AgrandissementCitation
        Me.Form.Bookmark = rs.Bookmark
        'Me.Refresh
        Me.CitationRapide.SetFocus
    Else
        Debug.Print "oups"
    End If
    End Sub

    0
  13. Tessel75
     
    @Yg_Be
    Bravo, ça passe exactement comme je voulais, excepté pour la ligne
    "rs.FindFirst ("NoNotesrap=" + CStr(txtid))",
    que j'ai été obligé de supprimer parce qu'elle bloquait la procédure. Cela ne semble pas avoir affecter l'enchainement des ordres.
    Il me renvoie "Erreur de syntaxe , Opérateur absent".
    Maintenant pourrais-tu me détailler un peu la succession des commandes, parce que j'ai plusieurs autres formulaires et sous-formulaires de même type dans ma base, et je voudrais pouvoir reproduire la commande, or là, je suis bien content que ça s'exécute mais je n'y comprends rien.
    Merci pour ta complaisance.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      l'erreur de syntaxe vient probablement du fait que tu n'as pas associé le contrôle au champ.

      cela m'a permis de voir qu'on peut simplifier le code:
      Private Sub CitationRapide_GotFocus()
      Call AgrandissementCitation
      Me.CitationRapide.SetFocus
      End Sub
      0
      1. Tessel75 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Excellent ! Parfait ! Exactement ce que je cherchais, et je préfère d'autant plus cette 2ème rédaction que je connais la commande "SetFocus" que je peux alors facilement reproduire pour tous mes autres formulaires et sous-formulaires.
        Merci encore. Je mets en question résolue.
        0