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 :

créer des cadres autour des controles dans un état


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut créer des cadres autour des controles dans un état
    bonjour

    j'ai obtenu le code suivant sur le forum afin de tracer des cadres autour des controles qui composent mon tableau dans un état

    tout fonctionne à merveille, sauf si le contrôle choisi pour définir la hauteur ne se trouve pas être toujours le plus grand !

    comme j'ai beaucoup de lignes à mettre dans ce tableau, je veux optimiser au maximum la hauteur afin de faire en sorte qu'il tienne sur une page lorsque cela est possible

    aussi je ne veux pas définir un hauteur fixe

    Il se trouve que j'ai deux champs susceptibles de s'agrandir Mais sur un ligne cela peut être l'un ou l'autre ou les deux

    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
    Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
        ' ======================================================================================
        ' Procedure     : Module :Report_rpt_ClasseNormal // Procédure : Détail_Print
        ' DateTime      : 06/11/2007 05:17
        ' Auteur        : Starec - Philippe JOCHMANS - http://starec.developpez.com
        ' Description   : Sur l'évènement Print de la zone détail, nous allons refaire le cadrage
        '                 des zones de texte
        '=======================================================================================
     
        ' ===== déclaration =====
        Dim oCtrl As Control
     
        ' ===== on enlève le cadre de tous les contrôles =====
        For Each oCtrl In Me.Section(acDetail).Controls  ' on parcours toutes les zones de texte de la section
     
            If oCtrl.Visible = True And TypeOf oCtrl Is TextBox Then              ' on teste si ce sont des textbox
                oCtrl.BorderStyle = 0                    ' on rend la bordure invisible
                oCtrl.BackStyle = 0                      ' on rend le fond transparent
                Me.DrawWidth = 10
                ' on dessine un cadre autour du contrôle
                Me.Line (oCtrl.Left, oCtrl.Top)- _
                        (oCtrl.Left + oCtrl.Width, Me.Soustraitant.Height), vbBlack, B
            End If
        Next oCtrl
    End Sub
    POur le moment c'est la hauteur de soustraitant qui maîtrise la hauteur, je voudrais lui dire que si Site est plus grand alors c'est Site qui doit définir la hauteur de vice versa

    Auriez vous une astuce ?

    Isabelle
    Isabelle
    Access version office 365
    windows 7 sous mac

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Dans le code que tu as, le cadre se crée en fonction du champ Remarque qui est le plus grand dans cet exemple.

    Il faudrait d'abord faire une boucle pour parcourir l'ensemble des zones de texte, et dans cette boucle tester la hauteur, tu stockes celle-ci dans une variable, tu test la suivante, si la hauteur est supérieur tu la stockes et tu passes au suivant, etc ....

    Je n'ai pas testé, mais cela devrait être cohérent.

    Philippe

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    Bonjour Philippe

    j'ai un peu modifié ton code et c'est maintenant le champ soustraitant qui défini la hauteur

    C'est bien cette méthode que je préconise mais je ne sais pas comment mettre en oeuvre la boucle dont tu me parles et encore moins stocker cette valeur.

    pourrais tu me donner un coup de main ?

    Merci

    Isabelle
    Isabelle
    Access version office 365
    windows 7 sous mac

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    bonjour,

    je n'arrive toujours pas à faire cette boucle, quelqu'un aurait il une petite idée ?

    merci
    Isabelle
    Access version office 365
    windows 7 sous mac

  5. #5
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut Hauteur des contrôles
    Bonjour.

    Je suis très mauvais en VBA, n'ayant suivi aucune formation, ayant appris sur le tas, et sans vraiment d'application à mon actif.

    Pour trouver la plus grande hauteur, j'envisagerais quelque chose comme ceci :




    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
    Dim oCtrl As Control
    dim hauteur1 ' hauteur d'un controle
     dim hauteur2 ' hauteur maximale
     
    hauteur1 = 0
    hauteur2 = 0
     
        For Each oCtrl In Me.Section(acDetail).Controls  ' on parcours toutes les zones de texte de la section
     
    hauteur1 = Me.oCtrl.Height 'on stocke la valeur de la hauteur du controle
     
    if hauteur1>hauteur2 then 'si la hauteur du controle en cour de vérification st plus grande que la hauteur maximale trouvée jusqu'à présent
     
           hauteur2=hauteur1 ' alors stocker la hauteur du controle en cours de vérification comme valeur maximale
     
     end if
       Next oCtrl
    End Sub
    Ensuite reprendre la première procédure, en indiquant comme hauteur, hauteur2.

    Pierre

  6. #6
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Je viens de tester. Ca ne marche pas. Je ne maîtrise pas assez VBA pour savoir comment mettre la valeur de la hauteur de chaque contrôle dans la variable hauteur1.

    J'ai un bug :


    Pour
    Me.oCtrl.Height

    j'ai comme message "Erreur de compilation. Membre de méthode ou de donnée introuvable

    Désolé c'est hors mes compétences.

    Pierre

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    Bonjour

    c'est très gentil de ta part,

    j'en suis au même point

    en fait j'ai deux hauteurs à tester celle du sous-traitant et celle du site

    je n'arrive pas non plus à le dire en vba

    isabelle
    Isabelle
    Access version office 365
    windows 7 sous mac

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    peut-être comme ceci :
    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
    Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
    ' ======================================================================================
    ' Procedure     : Module :Report_rpt_ClasseNormal // Procédure : Détail_Print
    ' DateTime      : 06/11/2007 05:17
    ' Auteur        : Starec - Philippe JOCHMANS - http://starec.developpez.com
    ' Description   : Sur l'évènement Print de la zone détail, nous allons refaire le cadrage
    '                 des zones de texte
    ' Modif. par philben
    '=======================================================================================
    
    ' ===== déclaration =====
       Dim oCtrl As Control
       Dim lMaxHauteur As Long
    
       ' ===== on cherche la plus grande hauteur =====
       For Each oCtrl In Me.Section(acDetail).Controls  ' on parcours toutes les zones de texte de la section
          If oCtrl.Visible = True And TypeOf oCtrl Is TextBox Then              ' on teste si ce sont des textbox
             If oCtrl.Height > lMaxHauteur Then lMaxHauteur = oCtrl.Height
          End If
       Next oCtrl
    
       ' ===== on enlève le cadre de tous les contrôles =====
       For Each oCtrl In Me.Section(acDetail).Controls  ' on parcours toutes les zones de texte de la section
    
          If oCtrl.Visible = True And TypeOf oCtrl Is TextBox Then              ' on teste si ce sont des textbox
             oCtrl.BorderStyle = 0                    ' on rend la bordure invisible
             oCtrl.BackStyle = 0                      ' on rend le fond transparent
             Me.DrawWidth = 10
             ' on dessine un cadre autour du contrôle
             Me.Line (oCtrl.Left, oCtrl.Top)-(oCtrl.Left + oCtrl.Width, lMaxHauteur), vbBlack, B
          End If
       Next oCtrl
    End Sub
    philippe

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    super ! c'est génial !


    peux tu m'expliquer ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If oCtrl.Height > lMaxHauteur Then lMaxHauteur = oCtrl.Height

    lMaxHauteur est un nom que tu as inventé ou est ce une fonction ?

    Merci beaucoup

    isabelle
    Isabelle
    Access version office 365
    windows 7 sous mac

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour Isabelle,

    lMaxHauteur est une variable de type entier long, déclarée en-tête de la fonction.

    Cette variable a par défaut la valeur 0 et elle est alimentée par la première boucle for each qui permet de déterminer la valeur maxi de hauteur des controles et de sauvegarder cette valeur dans cette variable.

    La deuxième boucle utilise entre autre cette variable pour dessiner les lignes.

    Tout le mérite revient phiphi 1er qui avait fait un premier code très limpide

    phiphi II

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    merci pour vos aides si précieuses à tous, si j'en suis arrivée à ce que j'ai réalsié aujourd'hui c'est bien en partie grâce à votre générosité

    joyeuses fêtes que ce forum continue d'exister pour longtemps encore

    isabelle
    Isabelle
    Access version office 365
    windows 7 sous mac

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

Discussions similaires

  1. Creer un cadre autour des pages
    Par vallwin dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 30/01/2011, 22h22
  2. Réponses: 0
    Dernier message: 12/10/2009, 22h56
  3. [AC-2003] Déplacer des controles dans un état: quand et comment?
    Par yupyupxav dans le forum IHM
    Réponses: 6
    Dernier message: 11/06/2009, 22h38
  4. Cadre autour des sous-états
    Par om-player dans le forum Access
    Réponses: 2
    Dernier message: 07/01/2008, 11h01
  5. Dessiner un cadre autour des composants
    Par Pill_S dans le forum Composants
    Réponses: 5
    Dernier message: 03/07/2004, 14h08

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