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 :

Gestion d'une ListBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut Gestion d'une ListBox
    Bonjour,

    Dans un excel (2002&2003), je souhaiterais pouvoir alimenter un USF

    1) que je charge depuis la feuiille "Formation"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
            If Target.Column = 7 Then 
                    F_RIF_1.Show 
            End If 
            Cancel = True 
    End Sub
    Et" F_RIF" (USF) s'ouvre en étant initialisé ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub UserForm_Initialize() 
        With ListBox1 
            .ColumnCount = 4 
            .ColumnWidths = "80;100;100;50" 
            .RowSource = "Transit_RdV_RIF!a2:d1000" 
            .MultiSelect = fmMultiSelectSingle 
        End With 
    End Sub
    en chargeant les valeurs contenues dans la feuille "Transit_RdV_RIF"

    Jusque là, tout se déroule comme prévu, sauf que, je n'ai besoin que
    ]d'une part, des lignes dont la valeur est nulle (= " ") de la colonne
    A (date)
    d'autre part, des valeurs des colonnes B (Noms), C (Prénoms) & D (N°
    de Tél).
    en vue d'une sélection pour alimenter la feuille "Formation" qui est
    ma cellule active du départ
    afin de récupérer le nom, Prénom et le N° de Tél.

    Là je sèche ..... comme une étoile à marée basse

    Merci de vos éclairages

    Cordialement

    JeanYves

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    JeanYvesGascon pourrai tu nous dire cela autrement ..:

    Jusque là, tout se déroule comme prévu, sauf que, je n'ai besoin que
    ]d'une part, des lignes dont la valeur est nulle (= " ") de la colonne
    A (date)
    d'autre part, des valeurs des colonnes B (Noms), C (Prénoms) & D (N°
    de Tél).
    en vue d'une sélection pour alimenter la feuille "Formation" qui est
    ma cellule active du départ
    afin de récupérer le nom, Prénom et le N° de Tél.
    je comprends pas ce que tu veux est-ce les noms et prénoms et n°Tel des lignes pour les-quelles la date n'est pas renseignée ?

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    re
    essaie ça:

    Edit: j'ai commenté 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
     
     
    sub truc_machin()
     
        ListBox1.Clear    'on vide la liste  au cas ou elle a été rempli anterieurement
    'on prend en compte la colonne A juste qu'a la derniere ligne utilisée
        With Worksheets("Transit_RdV_RIF").Range("a1:a" & Sheets("Transit_RdV_RIF").Range("a65530").End(xlUp).Row)
            'la variable c devient la premiere cellule qui est vide en colonne a
            Set c = .Find("", LookIn:=xlValues)
            ' si il y a une occurence
            If Not c Is Nothing Then
                'la variable firstadress devient l'adresse de l'ocurence
                firstAddress = c.Address
                'on commence une boucle do
                Do
                    ' avec la listbox 1
                    With Me.ListBox1
                        .ColumnCount = 4    'on i met 4 colonnes
                        'on ajoute un item
                        .AddItem
                        'la variable i prend la valeur de l'index de l'item-1
                        i = .ListCount - 1
                        ' maintenant on inscrit les valeur des cellules
                        'la colonne 0 ligne du nouveau item =la cellule 1 colonne a droite de la colonne A de la ligne de lacellule trouvée
                        .List(i, 0) = c.Offset(0, 1)
     
                        'la colonne 1 ligne du nouveau item =la cellule 2 colonne a droite de la colonne A de la ligne de lacellule trouvée
     
                        .List(i, 1) = c.Offset(0, 2)
                        'la colonne 2 ligne du nouveau item =la cellule 3 colonne a droite de la colonne A de la ligne de lacellule trouvée
     
                        .List(i, 2) = c.Offset(0, 3)
                        'la listbox ne sera pas multi select (on ne peut qu'en selectionner qu'un
                        .MultiSelect = fmMultiSelectSingle
                        'on applique les largeurs au colonnes de la listbox
                        .ColumnWidths = "80;100;100;20"
                    End With
                    ' on cherche l'ocurence suivante
                    Set c = .FindNext(c)
                    ' on continu tant que que c n'est pa rien et que la nouvelle adresse de cellule ne corespond pas a la precedente
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With
     
     
     
     
     
    End Sub
    je pense que ça correspond a ce que tu cherche


    au plaisir

    re

    j'ai oublié de préciser que les colonnes dans les listbox commence par zéro

    donc
    la première colonne c'est la colonne 0

    la deuxième colonne c'est la colonne 1
    et ainsi de suite
    ça t'aidera a comprendre les lignes de remplissage de ta listbox


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut Réponse
    Bonjour à tous les deux,

    Je ne sais comment vous remercier pour vos éclairages
    Ce qui m'a donné à réfléchir, ainsi

    voici ce que cela donne

    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
    Private Sub UserForm_Initialize() 
     
        Dim c As Range 
        Dim i As Long 
        Dim j As Integer
     
        With ListBox1 
            .ColumnCount = 4 
            .ColumnWidths = "80;100;100;50" 
            .MultiSelect = fmMultiSelectSingle 
        End With 
        For Each c In Range("Transit_RdV_RIF!A2:A[b65536].End(xlUp).Row).Cells 
            If IsEmpty(c) Then 
                    ListBox1.AddItem c 
                For j = 1 To 3 
                   ListBox1.List(i, j) = c.Offset(0, j) 
                Next j 
                i = i + 1 
            End If 
        Next c 
    End Sub
    Maintenant de souhaiterai pouvoir copier les valeurs selectionnées
    la première dans la cellule active (qui me sert à appeler le
    formulaire par un double click)
    la deuxième décalée à droite ( ActiveCell.Offset(,1), je pense)
    et la troisième décalée de deux crans à droite (ActiveCell.Offset(,2),
    je crois)

    Sans vouloir abuser ....

    Très cordialement


    Jean-Yves

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonsoir :

    Une question tu rajoute quoi la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If IsEmpty(c) Then 
                    ListBox1.AddItem c
    ? si tu n'as rien dans ta première colonne....




    Pour pouvoir agir sur la ligne "sélectionnée", rajoute une colonne (cachée?) dans ton listbox et stocke y le numéro de ligne de ta feuille excel..

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    De plus, je n'ai pas testé , mais tu voulais pas plutôt écrires quelque chose comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In Transit_RdV_RIF.Range("A2", Transit_RdV_RIF.Cells(Rows.Count, "B").End(xlUp).Offset(0, -1))
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    Cette place vide (date) me sert à
    d'une part, bien m'assurer que les personnes selectionnées (Noms, Prénoms, Tél) ne sont pas affectés pour une échéance à cette date
    et d'autre part, cette date sera affecté dans un temps futur pour un autre formulaire.

    Ai je bien répondu à ta question ?

    Cordialement

    JeanYves

  8. #8
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut
    Tu peux supprimer la variable i elle ne sert à rien.

    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
        Dim c As Range
        Dim j As Integer
     
        With ListBox1
            .ColumnCount = 4
            .ColumnWidths = "80;100;100;50"
            .MultiSelect = fmMultiSelectSingle
        End With
        For Each c In Transit_RdV_RIF.Range("A2", Transit_RdV_RIF.Cells(Rows.Count, "B").End(xlUp).Offset(0, -1))
            If IsEmpty(c) Then
                    ListBox1.AddItem c
                For j = 1 To 3
                   ListBox1.List(ListBox1.ListCount - 1, j) = c.Offset(0, j)
                Next j
            End If
        Next c
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut utilisez le bouton editer!!
    bonjour a tous

    la version que je t'ai donné fait le tout en une seul boucle "do loop"

    et utilise le "find" et find next" beaucoup plus rapide qu'une boucle for next surtout si tu a 1000 lignes ou plus
    maintenant si tu veut avoir la 1 ere colonne vide de ta listbox (je n'en vois pas l'interet )



    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
     
    sub truc_machin()
     
        ListBox1.Clear    'on vide la liste  au cas ou elle a été rempli anterieurement
    'on prend en compte la colonne A juste qu'a la derniere ligne utilisée
        With Worksheets("Transit_RdV_RIF").Range("a1:a" & Sheets("Transit_RdV_RIF").Range("a65530").End(xlUp).Row)
            'la variable c devient la premiere cellule qui est vide en colonne a
            Set c = .Find("", LookIn:=xlValues)
            ' si il y a une occurence
            If Not c Is Nothing Then
                'la variable firstadress devient l'adresse de l'ocurence
                firstAddress = c.Address
                'on commence une boucle do
                Do
                    ' avec la listbox 1
                    With Me.ListBox1
                        .ColumnCount = 5   'on i met 5 colonnes
                        'on ajoute un item
                        .AddItem
                        'la variable i prend la valeur de l'index de l'item-1
                        i = .ListCount - 1
                        ' maintenant on inscrit les valeur des cellules
                        'la colonne 0 ligne du nouveau item =la cellule 1 colonne a droite de la colonne A de la ligne de lacellule trouvée
                        .List(i, 0) = c 
                        'la colonne 1 ligne du nouveau item =la cellule 2 colonne a droite de la colonne A de la ligne de lacellule trouvée
     
                        .List(i, 1) = c.Offset(0, 1)
                        'la colonne 2 ligne du nouveau item =la cellule 3 colonne a droite de la colonne A de la ligne de lacellule trouvée
     
                        .List(i, 2) = c.Offset(0, 2)
                        'la listbox ne sera pas multi select (on ne peut qu'en selectionner qu'un
     
     .List(i, 2) = c.Offset(0, 3)
     
     
    'ainsi on se retrouve en colonne 1 la valeur vide trouvée en colonne a de ton sheets et ainsi de suite
     
    .MultiSelect = fmMultiSelectSingle
                        'on applique les largeurs au colonnes de la listbox
                        .ColumnWidths = "80;100;100;20"
                    End With
                    ' on cherche l'ocurence suivante
                    Set c = .FindNext(c)
                    ' on continu tant que que c n'est pa rien et que la nouvelle adresse de cellule ne corespond pas a la precedente
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With

    maintenant moi a ta place d'une colonne vide dans ma listbox j'y mettrais le numéro de ligne et je mettrais le width de la première colonne a 0(invisible)

    ainsi en cliquant sur ta listbox par la suite tu a la donnée et la ligne ou elle se trouve ça évite en cas de traitement sur le sheets de devoir réutiliser le find ou find next pour retrouver la ligne

    a méditer

    au plaisir

    sinon en reprenant le code de qwazerty tu y met dans la colonne 0 comme te l'a suggéré bill et moi meme le numero de ligne

    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
     
    Dim c As Range
        Dim j As Integer
     
        With ListBox1
            .ColumnCount = 4
            .ColumnWidths = "5;100;100;50"
            .MultiSelect = fmMultiSelectSingle
        End With
        For Each c In Transit_RdV_RIF.Range("A2", Transit_RdV_RIF.Cells(Rows.Count, "B").End(xlUp).Offset(0, -1))
            If IsEmpty(c) Then
                    ListBox1.AddItem c.row' dans la premiere colonne on y trouvera le numero de lignetu peut la masquer ta colonne 
                For j = 1 To 3
                   ListBox1.List(ListBox1.ListCount - 1, j) = c.Offset(0, j)
                Next j
            End If
        Next c

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. [Windows Phone 8] Gestion de la gestuelle sur les éléments d'une ListBox
    Par Eurkainis dans le forum Windows Phone
    Réponses: 2
    Dernier message: 19/06/2014, 09h51
  2. Gestion de l'affichage des éléments d'une ListBox
    Par Tod_sd dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 15/05/2009, 11h46
  3. Réponses: 3
    Dernier message: 25/03/2004, 11h35
  4. [debutant][servlet]erreur causée par une listBox
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/03/2004, 10h53
  5. Icône a coté du texte dans une ListBox
    Par joce3000 dans le forum C++Builder
    Réponses: 6
    Dernier message: 05/12/2003, 02h25

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