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 :

Découper une liste sur les colonnes d'un listview


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de GeoTrouvePas
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Juin 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 185
    Par défaut Découper une liste sur les colonnes d'un listview
    Bonjour,

    Je dispose d'une variable tableau contenant une longue liste de "codes projet" (du numéro "A-000" au numéro "A-126"). La macro suivante me permet de charger cette liste dans un contrôle listview :
    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
    Sub Load_Listview()
        Dim CptrLig As Long
        'Vide le contrôle listview et rempli les en - têtes de colonnes
        With Me.ListView1
            .ListItems.Clear
            With .ColumnHeaders
                .Clear
                .Add
            End With
            .View = lvwReport
            .FullRowSelect = True
            .Gridlines = True
            .MultiSelect = True
            For CptrLig = LBound(Tbl_PROJET) To UBound(Tbl_PROJET)
                If Tbl_PROJET(CptrLig, DATA_PROJET.NUMAS400) <> vbNullString Then
                    Compteur = Compteur + 1
                    .ListItems.Add , "¤" & Tbl_PROJET(CptrLig, DATA_PROJET.NUMAS400), Tbl_PROJET(CptrLig, DATA_PROJET.NUM)
                End If
            Next
        End With
    End Sub
    Mon soucis est que je n'arrive pas à adapter ce code pour charger les projets A-000 à A-009 dans la 1ère colonne, les projets A-010 à A-019 dans la 2ème colonne etc.... (en sachant que certains projets n'existent pas, il y a donc des trous volontaires dans la liste.

    Auriez vous une petite idée pour faire cette répartition ?

    Je vous remercie par avance de votre aide.

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    En attendant mieux, tu peux déjà aller voir cette page.

    https://silkyroad.developpez.com/VBA/ListView/

  3. #3
    Membre éclairé Avatar de GeoTrouvePas
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Juin 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 185
    Par défaut
    Bonjour Jérôme et merci pour ta réponse.

    Mon soucis n'est pas dans l'utilisation du contrôle listview en lui même. Le code que j'ai fourni contient d'ailleurs ce qu'il faut pour alimenter le contrôle.
    Mon soucis est de trouver la logique qui me permettrait de charger les données selon la présentation souhaitée.

  4. #4
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    Voici une proposition de code.
    J'en au profité pour apprendre ... dans les fait, hier, je ne connaissais pas les listview. Mais il ne faut pas le dire !

    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
    Private Sub UserForm_Initialize()
     
        '----- remplissage ListView------------------------
        With ListView1
            'activation de la sélection de ligne entière
            .FullRowSelect = True
            'activation de l'affichage en colonne
            .View = lvwReport
            With .ColumnHeaders
                'Supprime les anciens entêtes
                .Clear
                'Ajoute 1 colonne compteur pour créer la structure avec les 10 lignes
                .Add , , "compteur", 10
                'et la 2ème colonne pour recevoir les premières valeurs
                .Add , , "0", 30
            End With
     
            'Remplissage de la 1ere colonne (création des 10 lignes de 0 à 9)
            For cpt = 0 To 9
                With .ListItems
                   .Add , , cpt
                 End With
            Next
            'détermination du nombre de ligne à traiter. Pour faire cet exemple, j'utilise des donnée
            'du type A-001 et suivant dans la colonne A
            derligne = Range("A65536").End(xlUp).Row
            'Remplissage des colonnes
            dizaineprécédente = 0
            For ligne = 1 To derligne
                'on détermine les unité de la lign à créer
                unite = Int(Right(Cells(ligne, 1).Value, 1)) + 1
                'on détermine les dixaine à traiter
                dizaine = Int(Mid(Cells(ligne, 1).Value, 4, 1))
                'si on change de dixaine, il fau ajouter une colonne dans le listView et le nommer
                If dizaine <> dizaineprécédente Then
                    .ColumnHeaders.Add , , dixaine, 30
                    dizaineprécédente = dizaine
                End If
                'ajout de la ligne en cour de traitement
                .ListItems(unite).ListSubItems.Add , , Cells(ligne, 1).Value
            Next
        End With
    End Sub
    Il y a bien ventilation. Après, il faut voir pour les dizaines à trous. je ne sais pas si tu veux avoir ds "trous" ou pas ...

    Mais c'est un début de piste. Non ?

  5. #5
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Re,

    Et voici une v2.

    Elle permet une ventilation en colonne et respectant les dizaines.

    Elle génère des "cellules" vide dans le listview :
    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
    Private Sub UserForm_Initialize()
        Dim derligne As Integer
        On Error Resume Next
        '----- remplissage ListView------------------------
        With ListView1
            'activation de la sélection de ligne entière
            .FullRowSelect = True
            'activation de l'affichage en colonne
            .View = lvwReport
            With .ColumnHeaders
                'Supprime les anciens entêtes
                .Clear
                'Ajoute 1 colonne compteur pour créer la structure avec les 10 lignes
                .Add , , "compteur", 10
            End With
     
            'Remplissage de la 1ere colonne (création des 10 lignes de 0 à 9)
            For cpt = 0 To 9
                With .ListItems
                   .Add , , cpt
                 End With
            Next
            'détermination du nombre de dizaines à traiter. Pour faire cet exemple, j'utilise des données
            'du type A-001 et suivant dans la colonne A
            derligne = Application.WorksheetFunction.RoundUp(Range("A65536").End(xlUp).Row / 10, 0)
            ligne = 1
            'boucle pour traiter les X dizaines
            For dixaine = 0 To derligne
                'pour chaque dizaine, on ajoute une colonnne
                .ColumnHeaders.Add , , dixaine, 30
                dizaineprécédente = dizaine
                'boucle pour les unités
                For unite = 0 To 9
                    contenu = Int(Right(Cells(ligne, 1).Value, 1))
                    'si le contenu correspond à l'unité traité on l'intégre
                    If contenu = unite Then
                        .ListItems(unite + 1).ListSubItems.Add , , Cells(ligne, 1).Value
                        ligne = ligne + 1
                    Else 'sinon, on ajoute une valeur vide
                        .ListItems(unite + 1).ListSubItems.Add , , ""
                    End If
                Next
            Next
        End With
    End Sub
    Bonne utilisation. En espérant qu'au moins une des versions correspond à ce que tu veux ... ?!?!

Discussions similaires

  1. [AC-2007] Afficher une liste sur plusieurs colonnes
    Par Nephyline dans le forum IHM
    Réponses: 5
    Dernier message: 08/02/2012, 15h03
  2. existe t'il une liste sur les clauses uses?
    Par patchi225 dans le forum Débuter
    Réponses: 3
    Dernier message: 05/08/2010, 11h10
  3. [XSL-FO] creer une liste sur 2 colonnes
    Par kiki5151 dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 24/04/2009, 17h09
  4. Filtrer une liste sur les valeurs d'une colonne
    Par julien.63 dans le forum SharePoint
    Réponses: 3
    Dernier message: 13/02/2009, 08h43
  5. [ul/li] Séparer une liste sur plusieurs colonnes
    Par Wookai dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 22/06/2007, 14h01

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