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 :

Disposition tabulaire des contrôles en passant par du code VBA


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 65
    Points : 35
    Points
    35
    Par défaut Disposition tabulaire des contrôles en passant par du code VBA
    Bonjour tout le monde,

    Encore bravo pour ce site/Forume/FAQ très intéressant sur le VBA et Access.

    Mais voici ma question :
    J'ai trouvé le moyen de créer des contrôles dans un formulaire directement en passant par du code VBA (pour info, il faut utiliser CreateControl).
    Malheureusement, je n'ai pas trouvé de moyen mettre mes contrôles (plusieurs labels et textbox reliés deux à deux) en format tabulaire. Je suis obligé de le faire manuellement.

    Quelqu'un aurait une idée à me proposer ?

    Un grand merci par avance...

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    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 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    Qui dit tabulaire dit coordonnées lignes et colonnes préfixées.

    Left pour les colonnes

    et Top+Height+ecart pour les lignes.

    Note que ces valeurs (comme width) doivent être fournie à CreateControl, donc gère-les avec des variables.

    Personnellement j'évite cette méthode, cela oblige à livrer une appli non compilée, donc ouverte aux quatre vents.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    Merci de m'avoir apporter une réponse... Malheureusement (et ce n'est pas faute de le vouloir !), je n'ai pas compris comment mettre ça en place ?

    Voici un exemple de programmation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim CtrlTxt As Control, CtrlLbl As Control
     
        'Création des textbox
        Set CtrlTxt = CreateControl("Mon_Formulaire", acTextBox, acDetail, , Champ1, 70, 950, 1670, 315)
        CtrlTxt.Name = "Champ1"
     
        'Création des labels
        Set CtrlLbl = CreateControl("Mon_Formulaire", acLabel, acHeader, "Champ1", , 70, 475, 1670, 315)
        CtrlLbl.Name = "Tri_Champ1"
        CtrlLbl.Caption = "Etiquette Champ1"
    Ce code fonctionne très bien. Malheureusement, pas moyen de mettre ces deux contrôles sous forme tabulaire.
    Saurais-tu m'indiquer comment tu procéderais avec ce code pour les mettre en tabulaire ?

    Un grand merci


    PS : Je comprends tout à fait qu'avec ce type de code, ce n'est pas compilé (mais est-ce si génant ?). Mais il s'avère que ce code, je l'intègre dans un fichier Excel qui me paramètre automatiquement ceci (et bien d'autres choses) selon des champs préremplis. En fait, j'ai fait un programme qui fait des programmes (chaque fois que je fais une BDD access, le formulaire de consultation a toujours la même forme, d'où le fait d'automatiser la création des contrôles...)

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    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 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Voici un exemple :

    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
    Dim CtrlTxt As Control, CtrlLbl As Control
     DoCmd.OpenForm "formulaire1", acDesign
        'Création des textbox
        Dim lLeft As Long
        Dim lTop As Long
        Dim lWidth As Long
        Dim lHeight As Long
        Dim lEcart As Long
     
        lLeft = 70
        lTop = 950
        lWidth = 1670
        lHeight = 315
        lEcart = 70
     
        Set CtrlTxt = CreateControl("formulaire1", acTextBox, acDetail, , "Nom", lLeft + lWidth + lEcart, lTop, lWidth, lHeight)
        CtrlTxt.Name = "Champ1"
     
        'Création des labels
        Set CtrlLbl = CreateControl("formulaire1", acLabel, acHeader, "Champ1", , lLeft, lTop, lWidth, lHeight)
        CtrlLbl.Name = "Tri_Champ1"
        CtrlLbl.Caption = "Etiquette Champ1"

    Je pense que tu auras mieux cerné la manière de faire évoluer ton code.

    Ce n'est pas dérangeant, il faut simplement savoir les inconvénients de ce type de commande.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    Merci pour ces infos.
    Malheureusement, les contrôles n'apparaissent pas en position tabulaire. Ils sont placés l'un à côté de l'autre, comme si je les avais créer manuellement dans l'interface graphique (ce qui est déjà pas mal, soit dit en passant...).

    Mais c'est quand même la position tabulaire qui m'intéresserait ? C'est-à-dire dans le cas où le label est positionné dans la partie Entête et la textbox qui y est liée dans la partie Détail, le tout lié par une "sorte" de tableau (l'augmentation de la largeur de l'un modifiant obligatoirement la largeur de l'autre).

    Une autre idée ?

    Merci

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Il suffit pourtant de définir vos propres coordonnées dans l'exemple de loufab.

    Logiquement, si vous avez bien mixé acHeader et acDetail, les deux contrôles ne peuvent pas être dans la même section.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    Dans la mesure où les contrôles sont liés, je n'arrive pas à en mettre un dans l'entête et l'autre dans le détail (j'ai bien fait attention de mettre les bonnes coordonnées en fonction de chaque partie du formulaire). Ils apparaissent tous les deux dans le détail (là où doit se trouver seulement la Textbox).

    Il semble que cela vienne du fait que les deux contrôles sont liés (lors de la création du label, je le lie à la textbox). Si je ne les lie pas, j'arrive à faire apparaître le label dans l'entête et la textbox dans le détail.

    Toutefois, même dans ce cas, ces deux contrôles ne sont pas sous forme tabulaire. Ils en ont juste l'apparence. Si je modifie la largeur de l'un, ça n'a aucun impact sur l'autre.

    Une meilleure idée ?

    Merci

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    En fait, j'ai fait un programme qui fait des programmes (chaque fois que je fais une BDD Access, le formulaire de consultation a toujours la même forme, d'où le fait d'automatiser la création des contrôles...)
    Si j’ai bien compris ta démarche, tu crées d’abord ton formulaire « brut » et ensuite tu déplaces les zones de texte et tu voudrais que leurs étiquettes s’ajustent suite à tes modifications.

    Si c’est ça, tu pourrais :

    1er temps : créer le formulaire seulement avec les zones de texte ;
    2e temps : tu retouches la position des zones de texte ;
    3e temps : tu exécutes un programme qui — pour chaque zone de texte — crée une étiquette ad hoc qui dépend des propriétés actuelles de la zone de texte (Nom, droite, longueur).
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    Effectivement, ça pourrait fonctionner. Toutefois, les contrôles ne seraient pas sous forme tabulaire. Ce qui fait qu'à chaque modification de la largeur d'un contrôle, il faudrait que je modifie celle de tous les autres contrôles...

    J'ai mis ci-dessous une image de ce que donne la position tabulaire et comment on l'obtient dans l'interface graphique.
    Nom : Disposition tabulaire des contrôles.JPG
Affichages : 348
Taille : 34,1 Ko

    Je voudrais réussir à réaliser exactement ça mais en passant par le VBA au lieu de faire un clic droit sur les contrôles, de sélectionner dans le menu contextuel 'Disposition' puis 'Tabulaire'.

    Est-ce impossible à réaliser en VBA ?

    Merci

  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 006
    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 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    Tu devrais indiquer que tu travailles en version 2007 (au moins) car cette fonctionnalité n'est dispo qu'à partir de cette version.

    Pour appliquer le mode Tabulaire voici comment procéder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        CtrlTxt.InSelection = True
        CtrlLbl.InSelection = True
        ...
        DoCmd.RunCommand acCmdTabularLayout
    InSelection est une méthode/propriété qui permet de sélectionner des contrôles en mode Création.
    Puis tu appliques le mode tabulaire avec le runcommand.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    C’est exactement ce dont j'avais besoin pour que cela fonctionne !
    C'est parfait.

    Un grand merci d'avoir pris le temps de m'aider. C'est très sympa. J'indique que mon problème est résolu.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Septembre 2016
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Complément
    Bonjour
    je reprends le fil de la discussion car je cherche à en savoir un peu plus sur les options de disposition tabulaire et empilée.
    Est-il de possible de savoir à quelle disposition est associé un Control et d'agir en vba sur la position du controle dans cette disposition
    Exemple trois champs en disposition tabulaire:
    en tete dans le header, valeur dans le détail
    je cherche à agir sur l'ordre dans la disposition
    as t on une position ligne colonne pour chaque ctrl?
    je ne trouve pas de propriété ni sur le control, ni d'objet tableau (qui comme une section regrouperait des controls)
    et cela me semble compromis à cette heure ;-)
    Est-ce que les tableaux sont "transparents" au niveau objet et sont simplement des "tableaux" à un sens proche d'un tableau HTML ?

    merci d'avance pour vos lumières

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

Discussions similaires

  1. [débutant] ajouter des contrôles à une feuille par code
    Par Claude_Azoulai dans le forum VB.NET
    Réponses: 3
    Dernier message: 03/04/2010, 18h51
  2. LSP & WinSock2 -> Contrôle bande passante par PID
    Par jnico21200 dans le forum Visual C++
    Réponses: 0
    Dernier message: 21/07/2009, 11h56
  3. Réponses: 1
    Dernier message: 31/03/2009, 11h23
  4. Réponses: 2
    Dernier message: 17/12/2008, 17h33
  5. [MySQL] Mise en bdd d'un fichier csv en passant par un code php
    Par Cereales dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/03/2008, 15h45

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