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 :

Ajuster toutes les lignes d'un tableau à la même hauteur [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre habitué Avatar de possible924
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2010
    Messages : 302
    Points : 159
    Points
    159
    Par défaut Ajuster toutes les lignes d'un tableau à la même hauteur
    Bonjour à tous,
    J'ai un état aux lignes dans lequel le contrôle de la colonne "Contenu" est auto extensible
    et je souhaiterait que contrôles du tableau prennent la même hauteur.
    Voici mon tableau
    Nom : DansQuelEtatJerre.JPG
Affichages : 634
Taille : 79,0 Ko
    J'ai essayé ce code, mais ça ne donne rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Compare Database
    Option Explicit
    Dim Hauteur As Integer
    Private Sub D?tail_Format(Cancel As Integer, FormatCount As Integer)
        Hauteur = Me.Cl?_Contenu.Height
    End Sub
    Private Sub D?tail_Retreat()
        Me.Cl?_Alpha.Height = Hauteur
    End Sub
    Merci par avance pour votre aide
    Pierre

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    A mon humble avis, ce code ne peut fonctionner qu'en mode création. Autrement dit, le code doit ouvrir le rapport en mode "AcDesign", appliquer les changements, enregistrer puis ouvrir le rapport en mode normal.

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,
    Pourquoi tu ne mets pas la propriété du contrôle "Auto-extensible" à NON ?
    cordialement.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  4. #4
    Membre habitué Avatar de possible924
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2010
    Messages : 302
    Points : 159
    Points
    159
    Par défaut
    Le contrôle "Clé_Contenu" est auto extensible, ça se voit nettement sur l'image
    J'ai mis les autres en non extensible, puis en extensible et ça ne change rien.
    Je pense que c'est par le code que je peux les mettre tous à la même hauteur.

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Si tu mets la propriété de ton contrôle à auto extensible, comment veux-tu qu'il garde une hauteur fixe ????
    Il faut enlever tes codes. Choisir l'hauteur voulue. Et mettre les propriétés auto extensible à NON pour tous tes contrôles.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  6. #6
    Membre habitué Avatar de possible924
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2010
    Messages : 302
    Points : 159
    Points
    159
    Par défaut
    En fait, je pense avoir mal posé la question.

    Dans mon état, les lignes sont de différentes hauteur, car comme le montre l'image jointe,
    le champ "Contenu" contient plus de caractères que les autres champs de la ligne,
    et grâce à sa propriété auto extensible, il s'ajuste en hauteur à son contenu, mais le tableau n'est pas présentable.

    Je souhaiterais, par VBA, ajuster la hauteur de chaque champ de la ligne à la hauteur du champ "Contenu"
    Je pense que ce doit être faisable, mais je ne sais pas comment.

    Merci par avance pour votre aide
    Pierre

  7. #7
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Un début de piste ici peut-être.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  8. #8
    Membre habitué Avatar de possible924
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2010
    Messages : 302
    Points : 159
    Points
    159
    Par défaut
    Chers contributeurs

    J'ai rendu mon tableau présentable
    Nom : DansQuelEtatJerre2.JPG
Affichages : 555
Taille : 65,6 Ko

    Voici le code

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Option Compare Database
    Option Explicit
     
    Dim Offset As Single
    Dim X01 As Single
    Dim X02 As Single
    Dim X03 As Single
    Dim X04 As Single
    Dim X05 As Single
    Dim X06 As Single
    Dim X07 As Single
    Dim X08 As Single
    Dim X09 As Single
    Dim X10 As Single
    Dim X11 As Single
    Dim X12 As Single
    Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
    'Offset = 600 / Me.GridX ' Convertit Grille X en twips
    Offset = 0 / Me.GridX ' Convertit Grille X en twips
     
    X01 = [Clé_Alpha].Left - Offset ' Calcule X01 en twips
    Me.Line (X01, 0)-(X01, 10000)   ' Dessine la ligne verticale
     
    X02 = [Clé_Désignation].Left - Offset
    Me.Line (X02, 0)-(X02, 10000)
     
    X03 = [Clé_Contenu].Left - Offset
    Me.Line (X03, 0)-(X03, 10000)
     
    X04 = [Clé_Administration].Left - Offset
    Me.Line (X04, 0)-(X04, 10000)
     
    X05 = [Clé_BS].Left - Offset
    Me.Line (X05, 0)-(X05, 10000)
     
    X06 = [Clé_Restaurant].Left - Offset
    Me.Line (X06, 0)-(X06, 10000)
     
    X07 = [Clé_RSA].Left - Offset
    Me.Line (X07, 0)-(X07, 10000)
     
    X08 = [Clé_Jardin].Left - Offset
    Me.Line (X08, 0)-(X08, 10000)
     
    X09 = [Clé_Sport].Left - Offset
    Me.Line (X09, 0)-(X09, 10000)
     
    X10 = [Clé_Bus de nuit].Left - Offset
    Me.Line (X10, 0)-(X10, 10000)
     
    X11 = [Clé_Logements Soleil].Left - Offset
    Me.Line (X11, 0)-(X11, 10000)
     
    X12 = [Clé_Logements Soleil].Left + [Clé_Logements Soleil].Width - Offset
    Me.Line (X12, 0)-(X12, 10000)
     
    End Sub
    Merci à tous pour votre aide

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    pour ceux qui seraient intéressés, le code ci-dessous permet de résoudre le problème énoncé par possible924 mais de manière dynamique.
    Il se compose de 2 parties, le code qui dessine les lignes verticales et le code qui trie le tableau des contrôles de la section détail, les 2 sont à placer dans un module standard:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Sub sDessineLigne(pRpt As Report)
    ' ------------------------------------------------
    ' Déclaration des variables
    Dim oCtl As Control                 ' variable objet contrôle section Détail
    Dim oSect As Section                ' variable objet section détail
    Dim sPosX1 As Single                ' position départ de la ligne
    Dim stCtrlName As String            ' contient le nom du dernier contrôle
    ' Tableaux
    Dim tbTmp() As String               ' tableau temporaire pour chargement des colonnes du détail
    Dim tbCols() As String              ' tableau des colonnes pour trier par la position de gauche
     
    Set oSect = pRpt.Section("Détail")
    ReDim tbTmp(0)
    ' ------------------------------------------------
    ' récupération des colonnes visibles
    ' Le contrôle doit être visible et de type acTextBox ou ComboBox
     
    For Each oCtl In oSect.Controls
        If oCtl.IsVisible And (oCtl.ControlType = acTextBox Or oCtl.ControlType = acComboBox) Then
            ReDim Preserve tbTmp(i)
            ' mémorisation de la position gauche et du nom de chaque colonne
            tbTmp(i) = Format(oCtl.Left, "00000") & "|" & oCtl.Name
            i = i + 1
       End If
    Next
    ' ------------------------------------------------
    ' Chargement du tableau des colonnes avant le tri
    For i = 0 To UBound(tbTmp)
        If Not IsEmpty(tbTmp(i)) Then
            ReDim Preserve tbCols(i)
            tbCols(i) = tbTmp(i)
        End If
    Next i
    ' ------------------------------------------------
    ' appel du sub pour le tri du tableau des colonnes
    QuickSort tbCols(), LBound(tbCols), UBound(tbCols)
     
    ' ------------------------------------------------
    ' Dessin des lignes verticales
    For i = 0 To UBound(tbCols)
        sPosX1 = Mid(tbCols(i), 1, InStr(1, tbCols(i), "|") - 1)    ' Récupération de la position gauche
        pRpt.Line (sPosX1, 0)-(sPosX1, 10000)                       ' Dessine la ligne verticale à gauche du contrôle
        If i = UBound(tbCols) Then _
        stCtrlName = Mid(tbCols(i), InStr(1, tbCols(i), "|") + 1)   ' pour mémoriser le nom du dernier contrôle
    Next i
     
    ' ------------------------------------------------
    ' Récupération de la position gauche + largeur
    ' de la dernière colonne pour la dernière ligne
    sPosX1 = oSect.Controls(stCtrlName).Left + oSect.Controls(stCtrlName).Width
    pRpt.Line (sPosX1, 0)-(sPosX1, 10000)
     
    End Sub
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    ' ---
    ' TRI ALPHABETIQUE D'UNE LISTE DE CHAINES
    ' DE CARACTERES A L'AIDE DE L'ALGORITHME
    ' QUICKSORT
    ' ---
    ' Code adapté du livre "Ready-to-Run
    ' Visual Basic Algorithms" de Rod Stephens :
    ' http://www.vb-helper.com/vba.htm
    '
    ' Algorithme général :
    ' http://fr.wikipedia.org/wiki/Tri_rapide
    '
    Sub QuickSort( _
        list() As String, _
        ByVal lngMin As Long, _
        ByVal lngMax As Long)
     
        Dim strMidValue As String
        Dim lngHi As Long
        Dim lngLo As Long
        Dim lngIndex As Long
     
        ' S'il y a 0 ou 1 élément dans la liste,
        ' la sous-liste est déjà triée
        If lngMin >= lngMax Then Exit Sub
     
        ' Valeur de partionnement
        lngIndex = Int((lngMax - lngMin + 1) * Rnd + lngMin)
        strMidValue = list(lngIndex)
     
        ' Echanger les valeurs
        list(lngIndex) = list(lngMin)
     
        lngLo = lngMin
        lngHi = lngMax
        Do
            ' Chercher, à partir de lngHi, une valeur < strMidValue
            Do While list(lngHi) >= strMidValue
                lngHi = lngHi - 1
                If lngHi <= lngLo Then Exit Do
            Loop
            If lngHi <= lngLo Then
                list(lngLo) = strMidValue
                Exit Do
            End If
     
            ' Echanger les valeurs lngLo et lngHi
            list(lngLo) = list(lngHi)
     
            ' Chercher à partir de lngLo une valeur >= strMidValue
            lngLo = lngLo + 1
            Do While list(lngLo) < strMidValue
                lngLo = lngLo + 1
                If lngLo >= lngHi Then Exit Do
            Loop
            If lngLo >= lngHi Then
                lngLo = lngHi
                list(lngHi) = strMidValue
                Exit Do
            End If
     
            ' Echanger les valeurs lngLo et lngHi
            list(lngHi) = list(lngLo)
        Loop
     
        ' Trier les 2 sous-listes
        QuickSort list, lngMin, lngLo - 1
        QuickSort list, lngLo + 1, lngMax
    End Sub
    Car, en règle générale quand on crée un état, on y ajoute les colonnes dans l'ordre où elles vont se trouver dans la section, mais si jamais ce n'est pas le cas (on peut ajouter une colonne oubliée, ou bien supprimer ou déplacer une colonne) les contrôles ne seront plus dans l'ordre dans la collection Controls de la section Détail, d'où la nécessité de trier les colonnes d'après leur position dans la section.
    le code sDessineLigne est exécuté dans l'évènement Format (ou Print) de l'état:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
    Call sDessineLigne(Me)
    End Sub
    Pour tracer une ligne horizontale de séparation entre chaque ligne détail,le plus simple est de créer un groupe sur l'identifiant unique et d'ajouter la ligne sur la section pied de groupe (appelée à tort "Avec une section pied de page" dans Access 2013)
    En prime, je mets une base exemple en pièce jointe: DessinerLignes.zip
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  10. #10
    Membre habitué Avatar de possible924
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2010
    Messages : 302
    Points : 159
    Points
    159
    Par défaut
    Merci tee_grandbois pour cette précision

    A vrai dire, je n'avais pas véritablement réglé le problème comme je l'aurais souhaité (mes connaissances en VBA sont plus que limitées)

    Ce que j'aurais souhaité, n'est pas de dessiner des traits verticaux,
    mais plutôt de donner à tous les contrôles de chaque ligne du tableau la hauteur du contrôle de la ligne ayant la plus grande hauteur,
    ceci afin de pouvoir, grâce à la mise en forme conditionnelle, appliquer aux contrôles des couleurs en fonction de la valeur du contenu
    et qui aurait aussi réglé le problème des traits verticaux en appliquant une bordure aux contrôles

    Merci

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Ce que j'aurais souhaité, n'est pas de dessiner des traits verticaux,
    mais plutôt de donner à tous les contrôles de chaque ligne du tableau la hauteur du contrôle de la ligne ayant la plus grande hauteur,
    ceci afin de pouvoir, grâce à la mise en forme conditionnelle, appliquer aux contrôles des couleurs en fonction de la valeur du contenu
    Oui, mais c'est impossible d'ajuster la hauteur de tous les contrôles au plus grand car cette propriété n'est pas modifiable au moment de l'impression ou de l'aperçu et, en mode création on ne connait pas encore la taille définitive donc, problème insoluble ..;

    A moins de savoir dessiner chaque contour des contrôles et simuler la mise en forme conditionnelle et tout çà en VBA, cela n'en vaut pas la peine ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  12. #12
    Membre habitué Avatar de possible924
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2010
    Messages : 302
    Points : 159
    Points
    159
    Par défaut
    Merci pour la réponse
    Pierre

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

Discussions similaires

  1. [XL-2010] Comparer toutes les lignes d'un tableau
    Par bilbilou08 dans le forum Excel
    Réponses: 7
    Dernier message: 14/12/2018, 13h50
  2. [WD-2010] Boucle qui ne supprime pas toutes les lignes d'un tableau
    Par Amos81 dans le forum VBA Word
    Réponses: 2
    Dernier message: 01/08/2018, 21h03
  3. [XL-2010] Info applicables à toutes les lignes d'un tableau
    Par BensiBen dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/01/2015, 20h47
  4. Réponses: 0
    Dernier message: 26/05/2010, 15h38
  5. Supprimer toutes les lignes et colonnes d'un tableau
    Par pekka77 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/12/2005, 11h26

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