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

Excel Discussion :

Selectionner l'adresse de plusieurs colonnes séparées [XL-2007]


Sujet :

Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 15
    Points
    15
    Par défaut Selectionner l'adresse de plusieurs colonnes séparées
    Bonjour, je souhaite afficher sous format de tableau plusieurs colonnes qui ne se trouve pas l'une à coté de l'autre, pour cela jai réalisé le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Initialize()
    Sheets("Liste des pièces").Select
    ListBox2.ColumnCount = 7
    ListBox2.ColumnHeads = True
    ListBox2.ColumnWidths = "100 pt;100 pt;100 pt;100 pt;100 pt"
    ListBox2.RowSource = Sheets("Liste des pièces").Range("A6:A25,C6:C25,J6:J25,K6:K25,AG6:AG26").Address
     
    End Sub

    Mais ça me donne pas le résultat souhaitable.


    Merci pour votre aide

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Il te faut dans un tel cas alimenter ta listbox non par utilisation de la propriété RowSource, mais par la méthode AddItem, en parcourant donc en boucle les colonnes concernées.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Effectivement c'est ce que j'ai fait, mais le code ne me génère pas le nom des colonnes
    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
    Private Sub UserForm_Initialize()
    With Sheets("Liste des pièces") 'ou Feuil1
    ListBox2.ColumnCount = 7
    ListBox2.ColumnHeads = True
    ListBox2.ColumnWidths = "100 pt;100 pt;100 pt;100 pt;100 pt"
    For k = 6 To 25
    ListBox2.AddItem Cells(k, 1)
    ListBox2.List(i, 1) = .Cells(k, 3)
    ListBox2.List(i, 2) = .Cells(k, 10)
    ListBox2.List(i, 3) = .Cells(k, 11)
    ListBox2.List(i, 4) = .Cells(k, 33)
    i = i + 1
    Next
    End With
    End Sub

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si la plage concernée est un tableau (par exemple de A1:G100) et que tu ne souhaites afficher que certaines colonnes, il faut placer une valeur nulle à la propiété ColumnWidths pour chaque colonne qui ne doit pas être visible

    Ainsi dans la ligne ci-dessous, seules les colonnes A, D, F et G seront visibles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox2.ColumnWidths = "50;0;0;50;0;60;60"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Effectivement c'est ce que j'ai fait, mais le code ne me génère pas le nom des colonnes
    La propriété ColumnHeads ne fonctionne que si l'on utilise la propriété RowSource
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Philippe
    L'utilisation de la propriété RowSource est dans ce cas à proscrire, car elle limite à 10 colonnes (de largeur nulle ou pas) de listbox.

    PS : une solution de contournement permettrait d'utiliser RowSource (et les entêtes). Elle consisterait en l'utilisation d'une feuille tremplin.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    La propriété ColumnHeads ne fonctionne que si l'on utilise la propriété RowSource
    Y a pas donc une solution pour les afficher?

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour Jacques,
    Voici un code avec 12 colonnes traitées et qui fonctionne parfaitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Activate()
       With UserForm1.ListBox1
       .RowSource = "A2:L6"
       .ColumnHeads = True
       .ColumnCount = 12
       .ColumnWidths = "0;50;60;0;50;50;0;0;50;50;50;20"
       End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre à l'essai
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Si la plage concernée est un tableau (par exemple de A1:G100) et que tu ne souhaites afficher que certaines colonnes, il faut placer une valeur nulle à la propiété ColumnWidths pour chaque colonne qui ne doit pas être visible

    Ainsi dans la ligne ci-dessous, seules les colonnes A, D, F et G seront visibles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox2.ColumnWidths = "50;0;0;50;0;60;60"
    ça va pas marcher vu le nombre de colonne comptant de A jusqu'a AG

  10. #10
    Membre à l'essai
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour Jacques,
    Voici un code avec 12 colonnes traitées et qui fonctionne parfaitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Activate()
       With UserForm1.ListBox1
       .RowSource = "A2:L6"
       .ColumnHeads = True
       .ColumnCount = 12
       .ColumnWidths = "0;50;60;0;50;50;0;0;50;50;50;20"
       End With
    End Sub
    Je viens d'essayer ça marche merci beaucoup

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un RowSource de 33 colonnes avec affichage des colonnes A, C, D, J, K, AG
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Activate()
       With UserForm1.ListBox1
       .RowSource = Feuil1.Range("T_Test").Address(external:=True)
       .ColumnHeads = True
       .ColumnCount = 33
       .ColumnWidths = "50;0;50;50;0;0;0;0;0;50;50;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;50"
       End With
    End Sub
    [EDIT]
    Je viens d'essayer ça marche merci beaucoup
    Comme disait Pierre Desproges "Ma seule certitude, c'est le doute"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  12. #12
    Membre chevronné
    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
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,


    ListBox avec colonnes discontinues (méthode 1)

    -Calcul des largeurs de colonnes
    -En-têtes de ListBox


    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
     
    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
    ListBox avec colonnes discontinues (méthode 2)

    -On charge la BD dans le ListBox
    -On met à 0 les colonnes qui ne doivent pas être affichées

    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
    Dim NomTableau, Nbcol, ColVisu
    Private Sub UserForm_Initialize()
       NomTableau = "Tableau1"
       ColVisu = Array(1, 2, 4, 7)    ' colonnes à visualiser
       TblBD = Range(NomTableau).Value
       Nbcol = UBound(TblBD, 2)
       Me.ListBox1.List = TblBD
       Me.ListBox1.ColumnCount = Nbcol
       EnTeteListBox
    End Sub
     
     Sub EnTeteListBox()
       x = Me.ListBox1.Left + 8
       Y = Me.ListBox1.Top - 20
       For c = 1 To Nbcol
         Pos = Application.Match(c, ColVisu, 0)
         If Not IsError(Pos) Then
           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# & ";"
         Else
           x = x + 0
           tempcol = tempcol & 0 & ";"
         End If
       Next c
       Me.ListBox1.ColumnWidths = tempcol
     End Sub

    Boisgontier
    Fichiers attachés Fichiers attachés

  13. #13
    Membre chevronné
    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
    Points : 2 156
    Points
    2 156
    Par défaut
    Une autre méthode simple.


    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
    Dim ColVisu(), LargeurCol(), Rng
    Private Sub UserForm_Initialize()
      Set f = Sheets("bd")                                                                   ' Adapter
      Set Rng = f.Range("A2:G" & f.[A65000].End(xlUp).Row)   ' Adapter
      ColVisu = Array(1, 2, 4, 7)                                                         ' Adapter
      LargeurCol = Array(60, 50, 50, 100)                                        ' Adapter
      Me.ListBox1.ColumnCount = UBound(ColVisu) + 1
      Me.ListBox1.ColumnWidths = Join(LargeurCol, ";")
      Me.ListBox1.List = Application.Index(Rng, Evaluate("Row(1:" & Rng.Rows.Count & ")"), ColVisu)
      EnteteListBox
    End Sub
     
    Sub EnteteListBox()
        i = 0
        x = Me.ListBox1.Left + 8
        Y = Me.ListBox1.Top - 12
        For Each c In ColVisu
          i = i + 1
          Me("label" & i).Caption = Rng.Offset(-1).Item(1, c)
          Me("label" & i).Top = Y
          Me("label" & i).Left = x
          Me("label" & i).Height = 24
          Me("label" & i).Width = LargeurCol(i - 1)
          x = x + LargeurCol(i - 1)
        Next
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/06/2014, 22h37
  2. Selectionner plusieurs colonnes
    Par Qamalito dans le forum Excel
    Réponses: 12
    Dernier message: 02/01/2008, 20h57
  3. Selectionner plusieurs colonnes avec distinct
    Par godjojo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/10/2007, 14h21
  4. Décomposer une colonne adresse en plusieures colonnes
    Par frechy dans le forum Requêtes
    Réponses: 5
    Dernier message: 03/10/2005, 20h12
  5. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35

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