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 :

Listbox / incrémentation / filtre / masque [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Par défaut Listbox / incrémentation / filtre / masque
    Bonjour,


    J'ai un useforme ou l'on retrouve un listbox je l'incrémente suivent les ligne d'un tableau se trouvant dans la feuille base de données.
    Cependant quand je filtre le tableau, la liste prend quand même en compte les cellules masquées.
    Comment faire en sorte que le code suivant ne prenne pas en compte les lignes masquées de mon tableau suite à un filtre appliqué à une colonne ?


    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
    Private Sub UserForm_Initialize()
     
    With Sheets("Base de données") 'dans la feuille Base de données
    ListBox1.ColumnCount = 10 'nombre de colonnes la colonne 9 contient le numéro de ligne
    ListBox1.ColumnWidths = "0;65;35;45;45;35;210;95;55;55" 'largeur des colonnes
    Derlig = .Range("A" & .Rows.Count).End(xlUp).Row
     
     Me.ListBox1.MultiSelect = fmMultiSelectSingle
     
    Dim I As Byte
    For I = 1 To Derlig
      'ajoute les données dans la listBox1
            ListBox1.AddItem .Range("A" & I).Value
            ListBox1.List(ListBox1.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
            ListBox1.List(ListBox1.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
            ListBox1.List(ListBox1.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
            ListBox1.List(ListBox1.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
            ListBox1.List(ListBox1.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
            ListBox1.List(ListBox1.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
            ListBox1.List(ListBox1.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
            ListBox1.List(ListBox1.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
            ListBox1.List(ListBox1.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
     
    Next I
    End With
     
    End Sub
    Cordialement,
    Passepartout007

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize()
      Set f = Sheets("bd")
      Tbl1 = f.Range("A2:G" & f.[A65000].End(xlUp).Row).Value
      Dim Tbl2: ReDim Tbl2(1 To UBound(Tbl1), 1 To 5)
      col = 0
      For Each k In Array(1, 2, 4, 7)
        col = col + 1
        For i = 1 To UBound(Tbl1): Tbl2(i, col) = Tbl1(i, k): Next i
      Next k
      Me.ListBox1.List = Tbl2
    End Sub


    Remarque:Additem est lent

    Boisgontier

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Par défaut Re
    Bonjour,

    Merci de ta réponse super efficace, je comprend mieux le fonctionnement les listboxs cependant j'éprouve quelque problème à comprendre l'intégralité du code.J 'ai repris le code du fichier que tu as fournis et ai essayé de l'adapter cependant je ne comprend pas toutes les lignes et par conséquent la tache semble très difficile. Pourrait tu me commenter chaque ligne ? si tu n'as pas le temps je comprendrais.

    dans 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
    Dim NomTableau, ColVisu()
    Private Sub UserForm_Initialize()
        NomTableau = "Tableau1"
        ColVisu = Array(1, 2, 4, 7)          ' colonnes à visualiser
        TblBD = Range(NomTableau).Value
        '-- en têtes de colonne ListBox
        Me.ListBox1.ColumnCount = UBound(ColVisu) + 1
        EnteteListBox
        Dim Tbl: ReDim Tbl(1 To UBound(TblBD), 1 To UBound(ColVisu) + 1)
        j = 0
        For Each k In ColVisu
            j = j + 1
            For I = 1 To UBound(TblBD)
               Tbl(I, j) = TblBD(I, k)
            Next I
        Next k
        ListBox1.List = Tbl
    End Sub
     
    Sub EnteteListBox()
     
     
        X = Me.ListBox1.Left + 8
        Y = Me.ListBox1.Top - 12
        For Each c In ColVisu
          Set Lab = Me.Controls.Add("Forms.Label.1")
          Lab.Caption = Range(NomTableau).Offset(-1).Item(1, c)
          Lab.Top = Y
          Lab.Left = X
          Lab.Height = 24
          Lab.Width = Range(NomTableau).Columns(c).Width * 1#
          X = X + Range(NomTableau).Columns(c).Width * 1
          tempCol = tempCol & Range(NomTableau).Columns(c).Width * 1# & ";"
        Next
        tempCol = Left(tempCol, Len(tempCol) - 1)
        Me.ListBox1.ColumnWidths = tempCol
    End Sub
    à quoi correspond ("Forms.label.1") ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Lab = Me.Controls.Add("Forms.Label.1")
    Mon tableau n'est pas de la même taille et il y a surment des paramétrages dans le code que je doit changer cependant je ne m'y connais pas assez pour le faire. Je souhaite comprendre ce code et ainsi pouvoir par la suite me débrouiller seul;

    Cordialement,
    Passepartout007

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Par défaut Re
    Bonjour,

    Je n'ais toujours pas réussi a adapter le code, quelqu'un aurais d'autre proposition ? ou la possibilité de me l'expliquer ?

    Cordialement,
    Passepartout007

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Par défaut Re : Solution trouvée
    Bonjour à tous,

    J'ai trouver une solution qui n'est sans doute pas la meilleur, mais celle-ci marche.
    Je vous poste l'intégralité du 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
    Private Sub UserForm_Initialize()
     
     
     
    With Sheets("Base de données") 'dans la feuille Base de données
    ListBox1.ColumnCount = 10 'nombre de colonnes la colonne 9 contient le numéro de ligne
    ListBox1.ColumnWidths = "0;65;40;45;45;35;225;95;55;55" 'largeur des colonnes
    Derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'Défini la place de celulle et la derniere ligne d'une colonne
     
     Me.ListBox1.MultiSelect = fmMultiSelectSingle
     
    Dim I As Byte
    For I = 1 To Derlig 'pour I de 1 à la dernière ligne
      'ajoute les données dans la listBox1
            If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
                ListBox1.AddItem .Range("A" & I).Value
                ListBox1.List(ListBox1.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
                ListBox1.List(ListBox1.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
                ListBox1.List(ListBox1.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
                ListBox1.List(ListBox1.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
                ListBox1.List(ListBox1.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
                ListBox1.List(ListBox1.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
                ListBox1.List(ListBox1.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
                ListBox1.List(ListBox1.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
                ListBox1.List(ListBox1.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
           End If
     
    Next I 'passer au next I
    .ShowAllData 'Montrer toutes les données masquées
    End With 'fin du with
     
    'trie par ordre alphabétique
     ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Add _
            Key:=Range("A1:A1048576"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
    End Sub
    J'ai donc changer un peux le code et ajouter une condisition d'ajout à la listbox avec la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
    Si vous avez des proposition d'amélioration et penser que ce code peux provoquer des erreur n'hésité pas à me faire des retours.
    Cordialement,
    Passepartout007

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

Discussions similaires

  1. [XL-2010] Listbox Combobox Filtre
    Par laulau14 dans le forum Excel
    Réponses: 1
    Dernier message: 02/04/2014, 15h08
  2. [XL-2003] ListBox incrémentée en fonction d'une variable i
    Par maud.33500 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/07/2011, 07h45
  3. [java2D] filtres et masques
    Par lebesnec dans le forum 2D
    Réponses: 2
    Dernier message: 06/12/2006, 23h14
  4. [C#] DataSet ListBox filtre
    Par rellik dans le forum Windows Forms
    Réponses: 5
    Dernier message: 09/11/2004, 19h20
  5. [File et Directory ListBox] Soucis de filtre
    Par Mercilius dans le forum Composants VCL
    Réponses: 8
    Dernier message: 04/04/2003, 16h17

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