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 :

createcontrol ou comment creer dans un formulaire un nombre de controles dependant d'une requete


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 25
    Points
    25
    Par défaut createcontrol ou comment creer dans un formulaire un nombre de controles dependant d'une requete
    Boujour,

    comment faire pour creer des textbox contenant chacun une ligne qui satisfait ma requete ?

    j'ai un formulaire qui dispose d'une requete, ex tous les trucs de 2005, et

    si y 10 trucs j'aimerais qu'il affiche 10 txt box

    donc c'est bien de la creation dynamique,

    merci d'avance !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 179
    Points
    179
    Par défaut
    Je ne crois pas que ce soit possible la création dynamique, mais tu peux les mettre dans une liste avec
    Liste.AddItem("")

  3. #3
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 077
    Points : 24 713
    Points
    24 713
    Par défaut
    Bonjour,

    Evidement que c'est possible...

    Par contre je ne comprend pas pourquoi tu poses une question alors que tu donne la réponse dans le titre.

    Notez que la fonction CreateControl ne fonctionne pas en mode complié (mde, accde).

    Cordialement,

  4. #4
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut
    Bonjour loufab,

    Mes excuses, mais j'élargis un peu le débat en lisant ce que tu écris :
    la fonction CreateControl ne fonctionne pas en mode complié (mde, accde)
    N'est ce pas un peu inquiétant ? Je m'explique...
    Je viens de passer une appli en .mde ; apparemment, je n'ai pas vu de difficulté (sauf pour mes modules dont certains présents et non utilisés pouvaient présenter quelques erreurs de compil !) ce qui est logique.
    Existe-t'il plusieurs autres fonctions qui ne peuvent muter en .mde ? Sont-elles signalées à la migration ?

    Allez, je me pose sans doute des questions pour rien mais c'est tellement bête de chercher pour n'avoir pas été assez prudent !
    J'ai la chance de ne pas me poser la question pour accde... : je ne connais pas ... mais je vais essayer de regarder !
    Bon, c'est entrevu... Pas de problème pour moi en Access 2003 et si c'est intéressant de pouvoir mettre plusieurs valeurs par champ... j'ai pour ma part suffisamment de problème avec une seule sans avoir à pister celle qui me poserait problème

    Merci et @+ RJL9814

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    disons que je sais qu'il faut utiliser createcontrol mais je sais pas trop

    comment le manipuler, surtout avec une boucle avec genre for i = 1 to

    derniere ligne satisfaisant la requete etc...

    Je vois plus tres clair, mais c'est aussi peut etre parce que c'est vendredi ...

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonsoir,
    heu... les lignes ? Ou les colonnes ?
    Pour les lignes, il suffit de mettre la propriété Affichage par défaut : Mode continu
    Tu auras autant de lignes dans le formulaire qu'il y en a dans sa source de données.
    Pour les colonnes, il faudrait pluôt connaitre le nombre max de colonnes que la requête peut renvoyer; puis jouer avec la propriété value des textbox correspondants.

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 077
    Points : 24 713
    Points
    24 713
    Par défaut
    Bonjour,

    Par définition toutes les fonctions et commandes qui crée, supprime les objets Formulaires, Etats, Macros et Modules. Aucune restriction en ce qui concerne les objets Tables ou Requètes.

    De mémoire il n'y a pas de messages à la compilation lors de l'utilisation de ces commandes.

    Concernant la création à la volée :

    Je verrais bien ou boucle For Each

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim fld as field
    dim rst as recordset
    dim 
    set rst = currentdb.openrecordset("marequete ou ma chaine Sql",dbopendynaset)
     
    for each fld in rst.fields
         -- le traitement d'ajout des champs
    next
    En ce qui concerne l'utilisation de createcontrol :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' l'ouverture du formulaire en mode design et caché (caché à mettre en dernier ressort pour facilité le déboggage pendant la conception)
    docmd.OpenForm "monform",acDesign,,,,acHidden
    le commande/fonction createcontrol dispose d'options qui peuvent ou doivent varier, comme la position du controle.
    On peut imaginer dans la boucle le positionnement : leftpos position Left précédente + fldLen la longueur du controle + l'espace de séparation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    createcontrol  "monform",acTextBox,acDetail,,,Leftpos,TopPos,fldLen,fldHaut
    Et ce dans le cas d'une disposition tabulaire.
    Pour une disposition linéaire c'est évidemment le contraire :
    TopPos précédent + fldhaut hauteur fixe du controle + espace de séparatino.

    Voilà de quoi varier les plaisirs.

    Cordialement,

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    merci je vais essayer ça.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    Il manque un Dim ?

    quand tu parles de traitement d'ajout des champs comment ça se passe (un exemple stp )

    pour t'aider à m'aider disons que ma requete selectionne 4 lignes

    ayant chacune 3 champs

    donc creation de
    txtbox1a
    txtbox1b
    txtbox1c


    txtbox2a
    txtbox2b
    txtbox2c

    etc

    avec bien sur la valeur de la ligne1 champ1 dans le txtbox1a et ainsi de suite

    merci d'avance

    PS: Si tu m'aides promis je fais un tuto sur comment creer un formulaire

    dynamique en fonction d'une requete ^^

    Citation Envoyé par loufab Voir le message
    Bonjour,

    Par définition toutes les fonctions et commandes qui crée, supprime les objets Formulaires, Etats, Macros et Modules. Aucune restriction en ce qui concerne les objets Tables ou Requètes.

    De mémoire il n'y a pas de messages à la compilation lors de l'utilisation de ces commandes.

    Concernant la création à la volée :

    Je verrais bien ou boucle For Each

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim fld as field
    dim rst as recordset
    dim 
    set rst = currentdb.openrecordset("marequete ou ma chaine Sql",dbopendynaset)
     
    for each fld in rst.fields
         -- le traitement d'ajout des champs
    next
    En ce qui concerne l'utilisation de createcontrol :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' l'ouverture du formulaire en mode design et caché (caché à mettre en dernier ressort pour facilité le déboggage pendant la conception)
    docmd.OpenForm "monform",acDesign,,,,acHidden
    le commande/fonction createcontrol dispose d'options qui peuvent ou doivent varier, comme la position du controle.
    On peut imaginer dans la boucle le positionnement : leftpos position Left précédente + fldLen la longueur du controle + l'espace de séparation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    createcontrol  "monform",acTextBox,acDetail,,,Leftpos,TopPos,fldLen,fldHaut
    Et ce dans le cas d'une disposition tabulaire.
    Pour une disposition linéaire c'est évidemment le contraire :
    TopPos précédent + fldhaut hauteur fixe du controle + espace de séparatino.

    Voilà de quoi varier les plaisirs.

    Cordialement,

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 077
    Points : 24 713
    Points
    24 713
    Par défaut
    Oui un dim en trop.

    Voici un code simple pour créer des controles et étiquettes par rapport à la source d'un formulaire.

    Code : 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Function PeupleFormulaire()
    On Error GoTo Err_peuplefrm
    Dim rst As Recordset
    Dim fld As Field
    Dim ctl As Control
    Dim ctlETiq As Control
    Dim lft As Integer
    Dim tp As Integer
    Dim hgt As Integer
     
    lft = 3000
    tp = 100
    hgt = 300
     
    DoCmd.OpenForm "Test", acDesign, , , , acWindowNormal
    Set rst = CurrentDb.OpenRecordset(Forms.test.RecordSource, dbOpenSnapshot)
     
    For Each fld In rst.Fields
        Set ctl = CreateControl("Test", acTextBox, acDetail, , fld.Name, lft, tp, 2000, hgt)
        ctl.Name = fld.Name
        ' etiquette
        Set ctlETiq = CreateControl("Test", acLabel, acDetail, ctl.Name, , 270, tp, 2650, hgt)
     
        ctlETiq.Caption = fld.Name
     
        tp = tp + hgt + 100
    Next
    DoCmd.Save acForm, "Test"
     
    Exit Function
     
    Err_peuplefrm:
    MsgBox Err.Description
     
    End Function
    Vu la facilité du code et de la disponibilité de l'aide en ligne et autre tuto sur toutes les commandes (simples) utilisées, les commentaires sont superflus.

    De grâce ! Ne tentez pas d'utiliser ce code en mode compiler. CA NE MARCHE PAS ! NE MARCHE PAS !

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    Mais est ce que quand je fais ça je suis en mode design ?

    Je regarde ton code meme si j'ai trouvé un moyen pas tres beau ( definir un maximum de textbox et les cacher selon la requete).

    merci en tout cas

  12. #12
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 077
    Points : 24 713
    Points
    24 713
    Par défaut
    Bonjour,

    Oui obligatoirement en mode design d'ailleurs la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "Test", acDesign, , , , acWindowNormal
    est assez claire.

    En effet pas très beau mais fonctionnel, même en mode compilé.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/02/2013, 15h59
  2. Réponses: 2
    Dernier message: 06/12/2010, 17h23
  3. [AC-2003] Avoir un état par donnée creer dans un formulaire
    Par FRANZ38 dans le forum IHM
    Réponses: 4
    Dernier message: 06/10/2009, 00h08
  4. Comment afficher dans un formulaire des requetes?
    Par Camdel dans le forum Access
    Réponses: 5
    Dernier message: 28/06/2006, 12h28
  5. Réponses: 1
    Dernier message: 20/03/2006, 14h30

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