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

Macros et VBA Excel Discussion :

Remplir des labels avec les données d'une feuille


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut Remplir des labels avec les données d'une feuille
    Bonjour à tous,
    Je stocke des données dans des cellules et j'ai fais une userForm qui s'affiche en cliquant sur un bouton.
    J'aimerais, pour une présentation plus sympathique, que les données de mes cellules s'affichent dans les labels de ma UserForm.

    J'ai 7 colonnes dans ma feuille.
    j'ai donc crée dans ma UserForm des lignes contenant 7 label (un par cellule)

    Pour l'instant, je rempli mes labels avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Liste.Label10 = Sheets("Feuil2").Range("A2")
    Liste.Label11 = Sheets("Feuil2").Range("B2")
    Liste.Label12 = Sheets("Feuil2").Range("C2")
    Liste.Label13 = Sheets("Feuil2").Range("D2")
    Liste.Label14 = Sheets("Feuil2").Range("E2")
    Liste.Label15 = Sheets("Feuil2").Range("F2")
    Liste.Label16 = Sheets("Feuil2").Range("G2")
    Liste.Label17 = Sheets("Feuil2").Range("A3")
    Liste.Label18 = Sheets("Feuil2").Range("B3")
    Liste.Label19 = Sheets("Feuil2").Range("C3")
    Liste.Label20 = Sheets("Feuil2").Range("D3")
    Liste.Label21 = Sheets("Feuil2").Range("E3")
    Liste.Label22 = Sheets("Feuil2").Range("F3")
    Liste.Label23 = Sheets("Feuil2").Range("G3")
    L'exemple ci-dessus incrémente deux lignes.
    Il faut donc que je répète ce code, soit 7 fois par ligne, pour chaque cellule qui ira alimenter chacune un label.

    J'aimerais trouver comment faire pour une macro lise chaque ligne de ma feuille puis aille incrémenter chaque ligne de label sans être obligé d'avoir à spécifier pour chaque cellule.

    Quelqu'un peut-il me dire vers quoi m'orienter comme fonction?

    Merci par avance

    Laurent

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 116
    Points : 9 937
    Points
    9 937
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Si les numéros de label se suivent comme ton exemple, tu peux tenter :

    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
     
     
    Option explicit
     
    Sub test()
    Dim i as  integer, j as integer, k as integer 
     
    Sheets("feuil2").activate
     
    k = 110
    For i  = 2 to 8     
            for j = 1 to 7
                 Me.controls("label" & k).caption = cells(i , j)
                 k = k + 1
            Next j
    Next i
    End sub
    A tester, codé à main levėe après 48h de veille

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut Marchand de sable
    Merci à toi, je vais essayer ça et surtout ensuite essayer de comprendre.

    Je te souhaite donc une bonne nuit -))

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut Ha ben flute
    Re bonjour Joe,

    Cela ne fonctionne pas. Ma userform s'ouvre bien mais les labels ne sont pas incrémentés avec les valeurs contenues dans les cellules.
    De plus, lorsque je ferme ma userform, j'ai une erreur en ligne 13.
    Une erreur de compilation et le message me dit qu'il y a une utilisation incorrect du mot cle ME.

    Aurais-tu une idée?

    Car de plus je ne comprend pas le fonctionnement. je crois que c'est très fort pour mes connaissances.

    Merci par avance

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une autre possibilité, ajouter les Labels dynamiquement. Tu crée une Form vierge et tu mets le code ci-dessous dans le module de la Form puis tu lance :
    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
     
    Private Sub UserForm_Initialize()
     
        Dim Fe As Worksheet
        Dim I As Long
        Dim J As Long
        Dim DerLg As Long
        Dim DerCol As Long
        Dim Haut As Long
        Dim Gauche As Long
        Dim Largeur As Integer
        Dim Hauteur As Integer
     
        Set Fe = Worksheets("Feuil1")
     
        Gauche = 10 'position par rapport au coté gauche de la Form
     
        'recherche le nombre de lignes sur la colonne "A"
        'la hauteur et largeur de chaque Label comme la cellule "A1"
        With Fe
     
            DerLg = .Cells(.Rows.Count, 1).End(xlUp).Row
            DerCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
            Hauteur = .Cells(1, 1).Height
            Largeur = .Cells(1, 1).Width
     
        End With
     
        'en colonnes, de A à la dernière non vide de la 1ère ligne
        For I = 1 To DerCol
     
            Haut = 10 'position depuis le bord haut de la Form
     
            'en lignes, de 1 à la dernière non vide de la colonne A
            For J = 1 To DerLg
     
                'ajoute les Labels et les positionnent
                With Me.Controls.Add("Forms.Label.1", "Label" & I, True)
     
                    .Left = Gauche
                    .Top = Haut
                    .Width = Largeur
                    .Height = Hauteur
                    .Caption = Fe.Cells(J, I).Value
                    .BorderStyle = 1 'avec contour
     
                End With
     
                Haut = Haut + Hauteur + 10 'incrémente
     
            Next J
     
            Gauche = Gauche + Largeur + 10 'incrémente
     
        Next I
     
        'défini les barres de défilement
        If Me.Height <= Haut + 30 Or Me.Width <= Largeur Then
     
            Me.ScrollBars = fmScrollBarsBoth
            Me.ScrollHeight = Haut
            Me.ScrollWidth = Gauche
     
        End If
     
    End Sub
    Hervé.

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut
    Bonjour Theze,
    Autant te dire que pour moi c'est presque du chinois. Avec tes explications j'ai compris pas mal de chose et je t'en remercie.
    J'ai néanmoins deux petites questions si cela ne t'ennuie pas.

    1 - Comment faire pour que le texte soit centré dans chaque Label?

    2- J'ai supprimé tous les labels qui reprenaient les textes d'entête puisqu'ils sont devenus obsolète mais j'avais également un bouton FERMER pour, comme son nom l'indique, servait à fermer la Userform. Il est devenu inutile puisqu'il se trouve maintenant sous les Labels qui se sont ajoutés dynamiquement. Est-il possible d'ajouter un bouton dynamiquement en bas de page stp?

    Sinon, ça fonctionne du toner de dieu.
    Merci à toi et bravo

    Laurent

    Pour ceux qui suivent la conv, ne cherchez plus, j'ai trouvé.

    Ajouter en ligne 46 le code suivant :

    Pour centrer le texte dans les labels.

    Pour refermer la userform j'ai rusé et appliqué la fermeture au double click dans la userform. Je continue de chercher

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Remplace le code précédent par celui-ci pour centrer le bouton. Ce dernier peut se trouver n'importe où sur la Form en mode création. J'ai aussi corrigé l'oubli sur le contrôle de la largeur pour les barres de défilement :
    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
    70
    71
    72
    73
    74
    75
    76
    77
     
    Private Sub UserForm_Initialize()
     
        Dim Fe As Worksheet
        Dim I As Long
        Dim J As Long
        Dim DerLg As Long
        Dim DerCol As Long
        Dim Haut As Long
        Dim Gauche As Long
        Dim Largeur As Integer
        Dim Hauteur As Integer
     
        Set Fe = Worksheets("Feuil1")
     
        Gauche = 10 'position par rapport au coté gauche de la Form
     
        'recherche le nombre de lignes sur la colonne "A"
        'la hauteur et largeur de chaque Label comme la cellule "A1"
        With Fe
     
            DerLg = .Cells(.Rows.Count, 1).End(xlUp).Row
            DerCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
            Hauteur = .Cells(1, 1).Height
            Largeur = .Cells(1, 1).Width
     
        End With
     
        'en colonnes, de A à la dernière non vide de la 1ère ligne
        For I = 1 To DerCol
     
            Haut = 10 'position depuis le bord haut de la Form
     
            'en lignes, de 1 à la dernière non vide de la colonne A
            For J = 1 To DerLg
     
                'ajoute les Labels et les positionnent
                With Me.Controls.Add("Forms.Label.1", "Label" & I, True)
     
                    .Left = Gauche
                    .Top = Haut
                    .Width = Largeur
                    .Height = Hauteur
                    .Caption = Fe.Cells(J, I).Value
                    .BorderStyle = 1 'avec contour
                    .TextAlign = 2 'centre le texte
     
                End With
     
                Haut = Haut + Hauteur + 10 'incrémente
     
            Next J
     
            Gauche = Gauche + Largeur + 10 'incrémente
     
        Next I
     
        'positionne le bouton centré sur les labels et juste au dessous
        With CommandButton1
     
            .Left = Gauche / 2 - .Width / 2
            '.Left = Me.Width / 2 - .Width / 2 '<-pour centré sur la Form
            .Top = Haut
            Haut = Haut + .Height + 10
     
        End With
     
        'défini les barres de défilement (correction de l'oubli sur la largeur :o(
        If Me.Height <= Haut + 30 Or Me.Width <= Gauche + Largeur Then
     
            Me.ScrollBars = fmScrollBarsBoth
            Me.ScrollHeight = Haut
            Me.ScrollWidth = Gauche
     
        End If
     
    End Sub
    Hervé.

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

Discussions similaires

  1. [XL-2010] Alimenter une listbox avec les données d'une feuille par ordre décroissant
    Par lavineur dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/03/2015, 13h56
  2. [XL-2010] Remplir un userform avec les donnés d'une feuille.
    Par celthi dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/12/2014, 19h11
  3. [XL-2003] incrémenter des textbox avec les données d'une ligne sélectionnée
    Par Liloo14 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/08/2013, 20h26
  4. remplir un tableau avec les données d'une BDD
    Par info3licen dans le forum Langage
    Réponses: 5
    Dernier message: 18/12/2012, 12h10
  5. Remplir Etat avec les données d'une requête
    Par emeraudes dans le forum IHM
    Réponses: 9
    Dernier message: 31/05/2006, 16h55

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