Mettre en place un contrôle Onglet

Comment réorganiser les objets d’un formulaire dans un contrôle Onglet ?

Le contrôle Onglet (ou « boîte à onglets ») est pratique pour organiser les informations d’un formulaire en pages (vous connaissez la boîte de dialogue Format / Cellule, dans Excel, par exemple). Il y a juste quelques petites choses à savoir pour l’utiliser de manière correcte…

Ce qu’il ne faut pas faire

Si vous souhaitez transférer des objets existants dans un onglet, il est tentant d’aller au plus simple, c’est-à-dire :

  1. Ouvrir le formulaire en mode Création.
  2. Y placer un contrôle Onglet.
  3. Glisser à la souris les objets sur l’un des onglets.

… mais en faisant ça, vous « posez » seulement vos objets par-dessus le contrôle Onglet, vous ne les « rangez » pas dans une page précise. Le symptôme : cliquez sur chaque page du contrôle Onglet, vous constatez que les objets restent toujours à l’écran. Pas bon 🙂

Ce qu’il faut faire

L’astuce consiste à utiliser le Couper/Coller :

  1. Ouvrez votre formulaire en mode Création.
  2. Cliquez sur l’icône Contrôle Onglet de la boîte à outils.
  3. Cliquez sur le formulaire pour placer la « boîte à onglets ».
  4. Sélectionnez les objets qui doivent être rangés dans une page de la boîte.
  5. Cliquez sur l’icône Couper (ou utilisez n’importe quel autre équivalent !).
  6. Sélectionnez la page d’arrivée, sur le contrôle Onglet (en cliquant sur un onglet, pas sur l’intérieur de la page).
  7. Cliquez sur l’icône Coller.

Si ce n’est pas clair, cliquez sur le screencast associé à ce billet pour voir une vidéo de démo !

Vous aimerez aussi...

12 réponses

  1. Hervé Inisan dit :

    RFU > A quoi vont servir les données des onglets qui reprennent les infos du formulaire principal ?

    Et à quoi servent les champs indépendants du formulaire principal, précisément ?

  2. RFU dit :

    Bonjour, suite à une modification conséquente de ma BD, j’ai du utiliser des onglets. J’ai donc un formulaire principale, avec des champs indépendants. J’ai 3 autres onglets qui reprennent les champs du FormPrincipal. Ce que je ne sais pas, c’est comment mettre à jour les 3 formulaires quand je change une donnée du FormPrincipal. Merci de me dire ou je mets le code et comment le composer. MERCI encore une fois.

  3. Hervé Inisan dit :

    mohamed > De quelle version d’Access s’agit-il ?

    Sinon, est-ce que c’est bien le contrôle Onglet qui pose problème, ou d’autres objets autour ? La zone Détail est-elle correctement dimensionnée ?

  4. mohamed dit :

    j’ai un pb de positinnement des onglets, quand je passe d’une page d’onglet à une autre la position du formulaire principal change, ce qui est dérangeant

  5. Hervé Inisan dit :

    Verlos > Quelle serait l’application pratique ?

    Je me dis qu’un formulaire est généralement créé par le concepteur de la base et n’évolue pas ensuite dynamiquement (sauf intervention du concepteur). On peut afficher / masquer des champs, mais ce n’est pas nécessairement pratique d’en rajouter, voire d’en copier/coller. D’autant qu’en MDE/ACCDE, c’est impossible, les formulaires et les états étant verrouillés.

    Peut-être pour une création d’Assistant ?

  6. Verlos dit :

    Il semble que la méthode vaille pour les groupes d’options (pour rajouter une option)…

    Mais comment faire ce couper coller en vba ?

  7. Hervé Inisan dit :

    ticabri > Le 1000 est l’indice qui numérote les champs, et qui ne fait qu’augmenter, indépendamment du nombre d’objets. Donc il n’est pas significatif.

    Par contre, si tu as tant d’objets, est-ce que la structure des tables est optimale ? En général, les données se répartissent sur plusieurs tables, ce qui donne des formulaires avec sous-formulaires, et qui évite d’atteindre la limite de champs.

  8. ticabri dit :

    Bonjour,
    j’ai créé un long formulaire et j’arrive enfin maintenant à la « mise en page » avec les onglets. Or, je rencontre un problème au niveau des contrôles avec l’affichage du message d’erreur (j’en suis au 1/3 de ce que le formulaire doit contenir):
    « Microsoft Office Access ne peut pas créer plus de contrôles sur ce formulaire ».
    La limite pour access 2003 est à 754 et je ne pense pas atteindre les 200.
    Pourtant, si j’efface le dernier contrôle et que je le crée de nouveau, le chiffre indiqué est supérieur à 1000.
    Est-il alors indispensable (et possible) de créer un autre formulaire qui s’ouvrirait à la fin du remplissage de celui-ci?
    Merci d’avance pour votre aide.

  9. Hervé Inisan dit :

    caro > Exact. Ou plus précisément : le code VBA est conservé, mais l’association entre les objets coupés/collés et les bouts de code VBA est perdue. C’est un vrai défaut (un bug ?).

    La solution consiste à reprendre les objets impactés (par exemple un bouton qui aurait « perdu son clic »), à faire apparaître les propriétés de ces objets (onglet Evénement), et à redéfinir la mention « Procédure événementielle » dans l’événement. Ca suffit pour rétablir la liaison.

  10. Lady dit :

    Bonjour, n’importe quelle procédure évènement(après mise à jour, clic, etc…) qui serait présente sur le formulaire et que l’on place sur l’onglet grâce à un couper/coller, est perdue.

  11. Hervé Inisan dit :

    > Jean-Pierre : A priori, je dirais que les onglets servent juste à la répartition des données, ils n’ont pas d’effet sur le code. Si j’ai suivi la question, un sous-formulaire activé par code est quand même manipulable ensuite (les onglets ne devraient pas l’affecter), ses champs sont accessibles et manipulables par le formulaire principal. Est-ce que je peux avoir un exemple de scénario qui ne marcherait pas, ou un bout de code (pour préciser) ? Merci.

  12. Jean-Pierre SALAÜN dit :

    Bonjour,
    La pratique que vous décrivez comporte un inconvénient majeur.
    Dans le cas d’un formulaire comportant des sous formulaires activés par du code événementiels, les controles de ces sous_Forms ne sont pas reconnus. A moins que j’ai raté quelque chose.
    Merci de me répondre.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *