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

VBA Access Discussion :

[VBA] Sélection d'un élément d'une liste


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut [VBA] Attendre la fermeture de l'aperçu d'un état
    Bonjour

    A l'aide d'une requête j'ai créé une liste qui représentent les différents éléments constitutifs d'un objet. j'aimerai que lorsqu'on clique sur un bouton_commande cela affiche l'état relatif à chaque élément; pour cela j'avais imaginer une boucle qui s'exécute autant de fois qu'il y a d'éléments et qui ouvre à chaque fois l'état après avoir sélectionné dans la liste le cod de l'élément utilisé pour afficher l'état correspondant. Cependant je n'arrive pas à trouver comment on sélectionne le code. Est-ce possible et si oui comment ? Si non y a-t-il une autre solution pour faire ce que je veux ?

    une autre question (pour la culture) : peut-on facilement modifier la durée de vie d'une variable ? et pas la recréer à chaque procédure si on l'a créée dans form_load ?

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 86
    Points : 73
    Points
    73
    Par défaut
    pour ce qui est de la duree de vie dune variable si tu veut quelle soit declare dans tes autres modules il te suffit de la declarer comme global ou public a la racine meme d'un module

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    bonjour

    j'ai réussi à sélectionner le code de la liste grace à ItemData et à ouvrir l'état correspondant. Mais j'arrive pas à les ouvrir tous, j'ai l'ipmpression qu'access ne peut ouvrir qu'une seule fois un même état même si les données sont différentes. Vu que le but de cette opération n'est que de visualiser les fiches avant de les imprimer y a-t-il possibilité d'insére une instruction pause qui demanderait à l'utilisateur d'appuyer sur une touche avant de fermer l'état et d'ouvrir le suivant. Est-ce possible ou y a-t-il une meilleure solution ?

    merci

  4. #4
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    dans une vielle appli (Access 2), je faisais comme ceci:

    EDIT: j'ai transcris rapidement le code en VBA Access 97 ou ultérieur (non testé)

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Function ap_IsLoaded (byval vntObjectName as Variant, byval intObjectType as integer) As Integer
        On Error Resume Next
        ap_IsLoaded= (SysCmd(acSysCmdGetObjectState, intObjectType, vntObjectName) <> 0)
    End Function


    Et je l'utilise comme ceci:
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        DoCmd.OpenReport sReportName, acPreview
        DoCmd.Maximize
        Do
            DoEvents
        Loop While ap_IsLoaded(sReportName, acReport)
        DoCmd.Restore
     
        DoEvents

    Sinon, tu peux peut être revoir ton problème en revoyant ton état de sorte qu'il imprime autant de pages que d'éléments dans ta liste (en revoyant la source de ton état et en jouant sur les regroupement dans l'état).

    Bon courage

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    bonjour

    merci pour ton code qui marche bien puisqu'il ouvre et ferme les états les uns après les autres. ceci dit j'aimerai bien avoir la possibilité de lire les états avant qu'ils ne se ferment y aurait-il la possibilité de mettre le processus en pause le temps de visualiser.
    pour ce qui est de l'autre méthode je n'y tiens pas trop car j'ai besoin de mes états ailleurs et en un seul exemplaire.

    merci

  6. #6
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir,

    Normalement ça marche... J'utilise ce code dans une appli et la boucle tourne tant que l'aperçu est ouvert...
    Peut être non compatible avec une version d'Access plus récente...

    Si je trouve le temps je regarderai à nouveau ...

    EDIT: je viens de retester le code dans sous Access 2007... ça marche!

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut ouverture d'un même état par une boucle
    Bonjour

    afin de simplifier la chose et de permettre à l'utilisateur de réellement valider la fiche j'ai inséré un MsgBox avec VbOKCancel qui ramène aux formulaires de mise à jour en cas d'annulation et passe à l'autre fiche en cas de validation. cependant lorsque le msgbox s'affiche on a plus aucun contrôle sur l'état ce qui empêche de le lire en entier.

    merci

  8. #8
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    Je crois que tu ferais mieux d'oublier l'idée du msgbox car je ne vois pas comment tu pourrais permettre l'accés à l'état.

    J'insiste, la solution que je t'ai transmise fonctionne... tu l'as peut être mal implémentée...

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    je suis d'accord pour la msgbox et j'étais en train de m'orienter sur la création d'un boutton en barre de menus (même si c'est pas facile vu que j'ai l'impression que mon aide ne correspond pas à ma version : le programme ne reconnaît pas les syntaxe d'un exemple !!!);
    pour plus de clarté je te montre comment j'ai insére ton code :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
        i = 1
        Do While i < Nrow
        Dim selection As String
        stDocName = "staFiche"
        selection = Me.lstObjets2.ItemData(i)
        Me.Étiquette15.Caption = selection
     
        DoCmd.OpenReport stDocName, acPreview, , "[Cod] = '" & selection & "'"
        DoCmd.Maximize
        Do
            DoEvents
        Loop While ap_IsLoaded(sReportName, acReport)
        DoCmd.Restore
        DoEvents
     
        i = i + 1
        Loop
     
    End Sub
    _________________________________________________________________
    Function ap_IsLoaded(ByVal vntObjectName As Variant, ByVal intObjectType As Integer) As Integer
        On Error Resume Next
        fWzIsLoaded = (SysCmd(SYSCMD_GETOBJECTSTATE, intObjectType, vntObjectName) <> 0)
     
    End Function

    il est tout à fait possible que j'ai oublié ou mal fait qqch lorsque j'ai fait les copier-coller

  10. #10
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Je présume que tu n'as pas rendu la déclaration des variables obligatoires ce que je te conseille vivement.

    cela t'évitera de passer à côté de petites erreurs de nom de variable (à moins que tu ne les ai déclaré plus haut). Ici tu appelles sReportName dans la fonction ap_IsLoaded alors que ta variable s'appelle stDocName


    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
        Dim i As Integer
        Dim stDocName As String
        Dim selection As String
     
     
        i = 1
        stDocName = "staFiche"
     
        Do While i < Nrow
     
            selection = Me.lstObjets2.ItemData(i)
            Me.Étiquette15.Caption = selection
     
            DoCmd.OpenReport stDocName, acPreview, , "[Cod] = '" & selection & "'"
            DoCmd.Maximize
            Do
                DoEvents
            Loop While ap_IsLoaded(stDocName, acReport)
            DoCmd.Restore
            DoEvents
            i = i + 1
        Loop


    Concernant la fonction, je te propose de mettre plutot
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    ap_IsLoaded= (SysCmd(acSysCmdGetObjectState, intObjectType, vntObjectName) <> 0)

    Le précédent code était encore valable mais correspond à des constantes d'Access 2.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Je te remercie pour ton aide.

    Le code marche très bien... FAISONS ATTENTION AUX COPIER-COLLER SANS REFLECHIR.
    Il fallait aussi que je comprenne que c'était en cliquant sur x pour le fermer que ça ouvrait l'autre état mais maintenant tout est OK.

    encore merci

  12. #12
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par JulienTough
    Je te remercie pour ton aide.

    Le code marche très bien... FAISONS ATTENTION AUX COPIER-COLLER SANS REFLECHIR.
    Il fallait aussi que je comprenne que c'était en cliquant sur x pour le fermer que ça ouvrait l'autre état mais maintenant tout est OK.

    encore merci
    De rien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser les éléments d'une liste déroulante excel en VBA
    Par erlerwade dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/06/2012, 12h32
  2. [AC-2007] Sélection automatique du seul élément d'une liste déroulante
    Par Beavis Man dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/12/2009, 15h53
  3. [VBA] sélection d'un élément dans une liste
    Par menguygw dans le forum Access
    Réponses: 3
    Dernier message: 26/04/2006, 12h18
  4. [CSS]Changer l'interligne des éléments d'une liste à puces
    Par khany dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 21/03/2005, 13h57
  5. Réponses: 2
    Dernier message: 11/01/2005, 14h10

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