Toute l'actualité de [self-access.com] en direct sur votre ordinateur !  Vous êtes ici : Accueil » Access » Tutoriaux » Maîtriser OpenForm et OpenReportConnexion
 


Dans cet article... 
  • Introduction
  • L'instruction OpenForm
  • L'instruction OpenReport
  •  Article mis à jour le 07/02/2009

    Introduction

    L'instruction OpenForm et OpenReport servent respectivement à ouvrir un formulaire ou un état en Visual Basic. Elles font partie des 2 commandes les plus utilisées (forcément : on passe son temps à ouvrir des formulaires et des états dans Access !).

    Comment ça marche ?

    L'instruction OpenForm

    Astuce
    Pour découvrir ces 2 instructions, passez d'abord par l'Assistant du bouton de commande (actions : Ouvrir un formulaire ou Aperçu d'un état), qui crée un code VB standard, que vous pourrez aménager par la suite.

    La syntaxe générale pour ouvrir un formulaire (normalement sur une seule ligne) est :

    DoCmd.OpenForm "Nom du formulaire", type d'ouverture, "nom du filtre", "condition Where" 

    D'autres paramètres existent encore en fin de ligne, si vous êtes amateur !
    Les 4 paramètres ci-dessus sont :

    • Nom du formulaire : le nom du formulaire, tel qu'il apparaît dans la fenêtre de base de données.
    • Type d'ouverture : une constante Access qui indique comment ouvrir le formulaire (en général, cette valeur sera acNormal; le formulaire est alors ouvert comme si vous aviez double-cliqué dessus dans la fenêtre de base de données).
    • Nom du filtre : rarement utilisé (on préférera la condition Where, ci-après)
    • Condition Where : il s'agit d'une condition permettant de filtrer le formulaire (de n'avoir qu'une partie des enregistrements). Ceci équivaut à une clause Where en SQL (mais sans le mot Where).

    Conseil
    Tout ce qui suit s'inspire fortement de SQL. Consultez l'article La clause WHERE en SQL pour démarrer !

    Quelques exemples :

    Par exemple, pour ouvrir le formulaire Clients de façon classique, il suffit d'écrire l'une des 2 lignes : DoCmd.OpenForm "frmClients"
    DoCmd.OpenForm "frmClients", acNormal
    Plus intéressant, la possibilité de filtrer les clients : DoCmd.OpenForm "frmClients", acNormal, , "CA>100000"

    Ici, on ouvre le formulaire Clients en limitant l'affichage aux clients dont le CA est supérieur à 100000 € (ceci suppose qu'un champ CA de type Numérique ou Monétaire existe). Notez aussi que pour omettre le paramètre "Nom du filtre", on doit placer 2 virgules sur la ligne.
    Si le champ à filtrer est de type Texte, la syntaxe se corse : DoCmd.OpenForm "frmClients", acNormal, , "CodePostal='56000'"

    Comme le CodePostal est un champ de type Texte, il faut l'entourer en théorie de guillemets. Mais comme la condition Where est elle-même déjà entre guillemets, on transforme le "56000" en '56000' (avec des apostrophes).
    Si, en plus, le nom du champ comporte des signes cabalistiques (espace, aspotrophe...), il faut l'inclure entre crochets, comme ci-contre : DoCmd.OpenForm "frmClients", acNormal, , "[Code postal]='56000'"
    Il est possible de placer 2 conditions ou plus, comme par exemple : DoCmd.OpenForm "frmClients", acNormal, , "[Code postal]='56000' AND CA>100000"

    Le mot-clef AND (ET en français), permet de combiner les conditions. Le mot-clef OR (OU) permet de retenir les clients qui respecteraient la 1ère condition ou la 2ème.

    Un peu plus loin avec Visual Basic :

    Si les valeurs proviennent d'une variable Visual Basic, il faut respecter les même règles, mais en "collant" la variable hors de la condition Where.

    Les lignes ci-contre sont incorrectes : Dim sngCA As Single
    sngCA = 100000
    DoCmd.OpenForm "frmClients", acNormal, , "CA>sngCA"


    Ceci ne fonctionne pas, car la variable sngCA figure entre les guillemets. Access va donc chercher tous les CA supérieurs à la valeur sngCA, ce qui n'a pas de sens.

    Dans ce cas, Access se comportera comme dans le cas d'une requête paramétrée, et affichera une boîte pour demander la valeur du paramètre sngCA.
    Voici une version améliorée : Dim sngCA As Single
    sngCA = 100000
    DoCmd.OpenForm "frmClients", acNormal, , "CA>" & sngCA


    Cette fois, ça marche !
    L'opérateur & sert à coller la chaîne "CA>" à la valeur réelle désignée par sngCA, soit 100000. Comme si vous aviez écrit directement "CA>100000".
    Encore plus vicieux (si, si) : la condition est basée sur une chaîne de caractères. L'idée, comme plus haut, est d'obtenir :
    DoCmd.OpenForm "frmClients", acNormal, , "[Code postal]='56000'"

    ...sachant que le 56000 est contenu dans une variable.
    Si vous avez compris le principe, il suffit de remplacer le 56000 par une variable "hors des guillemets". Ce qui donne :

    Dim strCP As String
    strCP = "56000"
    DoCmd.OpenForm "frmClients", acNormal, ,
    "
    [Code postal]='" & strCP & "'
    "

    Faites attention aux guillemets et aux apostrophes : la condition finale doit être un collage entre [Code postal]=' (avec une apostrophe ouvrante) puis la valeur de strCP puis une apostrophe fermante.
    Tout ceci devient sérieusement pénible :o) quand vous devez établir une condition double : Dim strCP As String, sngCA as Single
    strCP = "56000"
    sngCA = 100000
    DoCmd.OpenForm "frmClients", acNormal, ,
    "
    [Code postal]='" & strCP & "'
    AND CA>" & sngCA
    Pour terminer en beauté, on peut imaginer que les variables elles-mêmes sont renseignées par des zones de texte d'un formulaire : Dim strCP As String, sngCA as Single
    strCP = Forms!frmSaisieValeurs![Code postal]
    sngCA = Forms!frmSaisieValeurs![CA minimum]
    DoCmd.OpenForm "frmClients", acNormal, , "
    [Code postal]='" & strCP & "'
    AND CA>" & sngCA

    On a supposé que le formulaire de saisie s'appelait frmSaisieValeurs, et que les 2 zones de saisies (zones de texte) s'appelaient Code postal et CA minimum.
    Vous croyiez que c'était fini ? Mais avez vous pensé aux dates ? Dim dtDebut As Date, dtFin As Date
    dtDebut = Forms!frmSaisieValeurs![Date Début]
    dtFin = Forms!frmSaisieValeurs![Date Fin]
    DoCmd.OpenForm "frmClients", acNormal, ,
    "
    [Dernier contact] BETWEEN " & DateUS(dtDebut) & "
    AND " & DateUS(dtFin)

    Lorsque vous travaillez en VBA ou SQL (en programmation en général), les dates Access sont au format #mm/jj/aaaa#. Pour éviter de faire cette conversion à chaque fois (ça va vous arriver souvent !), utilisez la fonction DateUS() proposée dans le "grenier" du site. La syntaxe devient - un peu - plus simple.

    Vers le haut

    L'instruction OpenReport

    Après ce qui précède, le OpenReport va vous paraître facile ! La syntaxe pour ouvrir un état est :

    DoCmd.OpenReport "Nom de l'état", type d'ouverture, "nom du filtre", "condition Where" 
    • Nom de l'état : le nom de l'état, tel qu'il apparaît dans la fenêtre de base de données.
    • Type d'ouverture : une constante Access qui indique comment ouvrir l'état (en général, cette valeur sera acViewPreview pour un aperçu, acViewNormal pour une impression directe).
    • Nom du filtre : rarement utilisé (on préférera la condition Where, ci-après)
    • Condition Where : il s'agit d'une condition permettant de filtrer l'état.

    Vous pouvez reprendre tous les exemples ci-dessus en remplaçant DoCmd.OpenForm par DoCmd.OpenReport et frmClients par rptClients (le nom de votre état).

    Vers le haut


    Mes livres sur Access...
    [cliquez pour plus d'infos]





    Hit-Parade 
     
    [ Copyright 1997-2017 hervé inisan, self-access.com Reproduction interdite ]