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 :

Listview et click sur un element d'une colonne [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Bonjour à tous,
    voici ma listview
    Nom : 2016-03-03_15-53-23.jpg
Affichages : 2513
Taille : 40,3 Ko
    J'aimerai pourvoir cliquer sur par ex "R2C2" ou "R4C6"
    et pouvoir affecter une macro à chaque sélection

    voici 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
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    Private Sub Create_ListView_Dynamic()
        'Declare Variable Names
        Dim oLv As ListView
        Dim Wsheet As Worksheet
     
        'Create ListView in WorkSheet
        Set Wsheet = ThisWorkbook.Sheets(2)
        Set oLv = Wsheet.OLEObjects.Add(ClassType:="MSComctlLib.ListViewCtrl.2", _
            Link:=False, DisplayAsIcon:=False, Left:=100, Top:=100, Width:=300, Height:=100).Object
     
        'Give ListView Control a Name
        oLv.Name = "ListCust"
     
        'Assign Value to Other Properties
        With oLv
            .Left = 20
            .Top = 20
            .Height = 100
            .Width = 492
            .Visible = True
            .View = lvwReport
        End With
     
    End Sub
     
     
     
    Private Sub Access_ListView_Add_Data()
        'Declare Variable Names
        Dim i As Integer
        Dim oLv As ListView
        Dim oLi As ListItem
        Dim Wsheet As Worksheet
     
        'Get ListView in WorkSheet to an Object
        Set Wsheet = ThisWorkbook.Sheets(2)
        Set oLv = Wsheet.OLEObjects("ListCust").Object
     
        'Clear Header & Add Column Headers
        oLv.ColumnHeaders.Clear
        With oLv
            .ColumnHeaders.Add 1, "Réunions", "Réunions"
            .ColumnHeaders.Add 2, , "1ère"
            .ColumnHeaders.Add 3, , "2ème"
            .ColumnHeaders.Add 4, , "3ème"
            .ColumnHeaders.Add 5, , "4ème"
            .ColumnHeaders.Add 6, , "5ème"
            .ColumnHeaders.Add 7, , "6ème"
            .ColumnHeaders.Add 8, , "7ème"
            .ColumnHeaders.Add 9, , "8ème"
            .ColumnHeaders.Add 10, , "9ème"
            .View = lvwReport
        End With
     
        'Add Data to ListView
        oLv.ListItems.Clear
     
        Set oLi = oLv.ListItems.Add(1, , "R1")
        For i = 1 To 9
            oLi.SubItems(i) = "R1C" & i
     
        Next i
     
        Set oLi = oLv.ListItems.Add(2, , "R2")
        For i = 1 To 9
            oLi.SubItems(i) = "R2C" & i
        Next i
        Set oLi = oLv.ListItems.Add(3, , "R2")
        For i = 1 To 9
            oLi.SubItems(i) = "R3C" & i
        Next i
        Set oLi = oLv.ListItems.Add(4, , "R2")
        For i = 1 To 9
            oLi.SubItems(i) = "R4C" & i
        Next i
        'In Some Systems, ListView Value will not be Visible when you just run above code.
        'Execute below code to get the values visible & align properly
        oLv.Visible = False
        oLv.Visible = True
        ActiveSheet.Shapes("ListCust").Select
        With Selection
            .Placement = xlFreeFloating
            .PrintObject = True
        End With
        ActiveWindow.SmallScroll Down:=-24
        ActiveWindow.SmallScroll Up:=24
     
    End Sub
    Existe-t-il une solution, car après mainte et mainte recherche je ne trouve pas..

    Seb

    Re,
    Laissez tomber, je vais faire autrement, car cela est visiblement impossible....

    Seb

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,
    sauf à contourner le probleme, mettre un(e) inputbox apres le click qui demande de choisir la colonne de la ligne du listview
    bon courage
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Salut casefayere,

    Oui j'y ai bien pensé....mais ça va devenir une usine à gaz....

    je vais voir pour mettre le tout dans un combo....
    j'ai également vu flexgrid/datagrid....mais avec Windows 8 visiblement il y a pas mal de problèmes...bref je crois que le combobox s'impose.


    Seb

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Oui j'y ai bien pensé....mais ça va devenir une usine à gaz....
    pas sur (une paire de ligne en plus) mais je t'avoue que je n'ai pas regardé ton problème plus que ça
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    je t'avoue que je n'ai pas regardé ton problème plus que ça
    c pas grave, mais t'inquiète j'ai refais ma trame....avec combo et d'un autre coté c pas plus mal...

    Maintenant s'il y a une solution pour d'autres utilisateurs qui chercheraient la même chose que moi, initialement, tu peux poster ton exemple
    Merci

    Seb

  6. #6
    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
    bonsoir
    puré et le x/y de la souris sur le listview vous l'oubliez !!!!!!
    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

  7. #7
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Re,
    Te voilà ici toi patrick...
    t'es partout....

    Oui, j'ai entrevue cette possibilité, "Mousedown"......
    Mais dans mon cas, il faut que je puisse sélectionner (voir image post#1), par ex: R1C3 ou R2C8, et affecté une macro pour chaque click....

    Le contrôle listbox et treeview m'ont l'air très bien....
    Je n'ai jamais testé treeview.....A voir

    Pour listbox, je me bats encore avec en ce moment....
    Bref, je cherche, mais ma solution des combo fonctionnent, mais pas très joli et je n'aime pas laisser tomber ...

    Seb

  8. #8
    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
    demo en image
    Nom : demoingto64 in-out.gif
Affichages : 2606
Taille : 338,9 Ko
    met ca dans un userform et teste
    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
    Private Sub ListView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
    col = IIf(x > 81, 2, 1)
     MsgBox " vous avez cliqué sur  " & ListView1.ListItems(ListView1.SelectedItem.Index).ListSubItems(col).Text
    'Set ListView1.SelectedItem = Nothing
    ListView1.ListItems(1).Selected = True
    End Sub
    Private Sub UserForm_Initialize()
     
        '----- remplissage ListView------------------------
        With ListView1
     
            With .ColumnHeaders
                'Supprime les anciens entêtes
                .Clear
     
                .Add , , "reunion", 30
                .Add , , "course1", 50
                .Add , , "course2", 50
            End With
     
            'Remplissage de la 1ere colonne (création de 3 lignes)
     
           For i = 1 To 10
     
              .ListItems.Add , "R" & i, "R" & i
     
           For c = 1 To 10
            .ListItems(i).ListSubItems.Add , , "R" & i & "C" & c
            Next
           Next
          End With
     
     
        '--------------------------------------------------
     
        'Spécifie l'affichage en mode "Détails"
        ListView1.View = lvwReport
    End Sub
    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

  9. #9
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    re,
    Encore un truc qui m'échappe....

    Impossible de déterminer la largeur de "ColumnHeaders"???
    J'ai ce message d'erreur
    Nom : 2016-03-03_15-53-23.jpg
Affichages : 2231
Taille : 19,0 Ko

    Et le code en partie:
    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 MisEnFormeEtRemplissageLV()
    Dim i As Integer, c As Integer
    Dim oLv As ListView
    Dim oLi As ListItem
    Dim Wsheet As Worksheet
    Dim ch As ColumnHeader, x
        Set Wsheet = ThisWorkbook.Sheets(2)
        Set oLv = Wsheet.OLEObjects("ListCust").Object
       With Wsheet
     
        With oLv
     
                .ColumnHeaders.Clear
                'Set ch = .ColumnHeaders.Add(, , "reunion", , lvwColumnLeft)
                'ch.Width = 40
                .ColumnHeaders.Add 1, "Réunions", "Réunions", 40, lvwColumnLeft
                '.ColumnHeaders(1).Width = 40
     
                '.ColumnHeaders.Add 1, "course1", "course1"', , lvwColumnCenter
                '.ColumnHeaders(2).Width = 40
    ........
    Existe-t-il un autosize ^pour les colonnes?
    Même pour "centrer le texte", je n'y arrive pas....
    j'ai essayer avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oLv.ColumnHeaders(1).Alignment = lvwColumnCenter
    Seb

  10. #10
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    re,
    Mise à part le problème du post #9, j'ai encore un problème....

    je n'arrive pas à jouer avec les coordonnées Y......

    Code création 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
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    Option Explicit
    Private Sub CreationListView()
    Dim oLv As ListView
    Dim Wsheet As Worksheet
     
        Set Wsheet = ThisWorkbook.Sheets(2)
        Wsheet.Activate
        Set oLv = Wsheet.OLEObjects.Add(ClassType:="MSComctlLib.ListViewCtrl.2", _
            Link:=False, DisplayAsIcon:=False, Left:=100, Top:=100, Width:=300, Height:=100).Object
     
        With oLv
            .Name = "ListCust"
            .Left = .Parent.Columns("A").Left
            .Top = .Parent.Rows(3).Top
            .Height = 78
            .Width = 724
            .Visible = True
            .Gridlines = True
            .View = lvwReport
            .MousePointer = ccArrowQuestion
            .BackColor = &H80000000
        End With
     
    End Sub
    Private Sub MisEnFormeEtRemplissageLV()
    Dim i As Integer, c As Integer
    Dim oLv As ListView
    Dim oLi As ListItem
    Dim Wsheet As Worksheet
    Dim ch As ColumnHeader
        Set Wsheet = ThisWorkbook.Sheets(2)
        Set oLv = Wsheet.OLEObjects("ListCust").Object
       With Wsheet
     
        With oLv
     
                .ColumnHeaders.Clear
     
                'Set ch = .ColumnHeaders.Add(1, "Réunions", "Réunions", , lvwColumnLeft)
                'ch.Width = 40
                .ColumnHeaders.Add 1, "Réunions", "Réunions" ', , 'lvwColumnRight
                '.ColumnHeader(1).Width = 58
                .ColumnHeaders.Add 2, "course1", "course1" ', ,
                '.ColumnHeaders(2).Width = 40
                .ColumnHeaders.Add 3, "course2", "course2" ', ,
                '.ColumnHeaders(3).Width = 40
                .ColumnHeaders.Add 4, "course3", "course3" ', ,
                '.ColumnHeaders(4).Width = 40
                .ColumnHeaders.Add 5, "course4", "course4" ', ,
                '.ColumnHeaders(5).Width = 40
                .ColumnHeaders.Add 6, "course5", "course5" ', ,
                '.ColumnHeaders(6).Width = 40
                .ColumnHeaders.Add 7, "course6", "course6" ', ,
                '.ColumnHeaders(7).Width = 40
                .ColumnHeaders.Add 8, "course7", "course7" ', ,
                '.ColumnHeaders(8).Width = 40
                .ColumnHeaders.Add 9, "course8", "course8" ', ,
                '.ColumnHeaders(9).Width = 40
                .ColumnHeaders.Add 10, "course9", "course9" ', ,
                '.ColumnHeaders(10).Width = 40
            .View = lvwReport
            .ListItems.Clear
     
            For i = 1 To 4
                .ListItems.Add , "R" & i, "R" & i
     
                For c = 1 To 9
                    .ListItems(i).ListSubItems.Add , , "R" & i & "C" & c
     
                Next c
            Next i
            'couleur text
            '.ListItems(1).ListSubItems(2).ForeColor = RGB(255, 255, 255)
     
            .Visible = False
            .Visible = True
        End With
     
        ActiveSheet.Shapes("ListCust").Select
     
        With Selection
            .Placement = xlFreeFloating
            .PrintObject = True
        End With
     
        ActiveWindow.SmallScroll Down:=-24
        ActiveWindow.SmallScroll Up:=24
    End With
    End Sub
    Code dans feuil:
    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
    Private Sub ListCust_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As stdole.OLE_XPOS_PIXELS, ByVal Y As stdole.OLE_YPOS_PIXELS)
    Dim col As Integer
        'Debug.Print x
        Debug.Print Y
        'col = IIf(x > 81, 3, 1)
     
       'If x < 96 Then Exit Sub
       If X > 96 And X < 190 Then col = 1
       If X > 192 And X < 287 Then col = 2
       If X > 288 And X < 383 Then col = 3
       If X > 384 And X < 478 Then col = 4
       If X > 479 And X < 573 Then col = 5
       If X > 574 And X < 668 Then col = 6
       If X > 669 And X < 763 Then col = 7
       If X > 764 And X < 860 Then col = 8
       If X > 861 And X < 960 Then col = 9
       'coordonnées y
       'R1y = 22-41, R2y = 42-60, R3y = 61-80, R4y = 81-97
        'Debug.Print col
        MsgBox " vous avez cliqué sur  " & ListCust.ListItems(ListCust.SelectedItem.Index).ListSubItems(col).Text
        ListCust.ListItems(1).Selected = True
     
       End Sub
    Avec ex de Patrick, dans un usf ça fonctionne... mais comment faire dans une feuil???

    seb

  11. #11
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il me semble que l'évènement Mouse_Down n'est pas possible sur l'environnement Excel (que ce soit sur l'évènement de la feuille ou sur celui d'une forme/Un contrôle qui est positionné dessus).

  12. #12
    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
    a oui c'est vrai sur une feuille il va te falloir utiliser une Api getcursorxy et la coupler avec l'évènement click
    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

  13. #13
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Merci à vous deux....
    Avez-vous essayer mes codes???

    car ça fonctionne sur toute la ligne R1, mais pas sur les autres???
    Nom : Capture.PNG
Affichages : 2167
Taille : 7,4 Ko
    Et pourquoi ça ne fonctionnerai pas sur les autres???

    Sinon tant pis je vais le faire avec des combo..simplement
    seb

  14. #14
    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 hophophop
    bon joe -1
    tu m'a induit en erreur le mouse down fonctionne meme sur un sheets
    demo en image
    Nom : demoingto64 in-out.gif
Affichages : 2448
Taille : 196,7 Ko

    code dans le sheets c'est le même que dans le userform
    attention a mettre le selectfullrow dans les propriété de la listview sinon ca ne marche que dans la colonne 1 ce qui nous donne rien dans mon exemple puisque la limite et la colonne 1

    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
    Private Sub ListView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
    col = IIf(x > 81, 2, 1)
     MsgBox " vous avez cliqué sur  " & ListView1.ListItems(ListView1.SelectedItem.Index).ListSubItems(col).Text
    'Set ListView1.SelectedItem = Nothing
    ListView1.ListItems(1).Selected = True
    End Sub
     
    Private Sub Worksheet_Activate()
     
        '----- remplissage ListView------------------------
        With ListView1
     
    listview1.listitems.clear
            With .ColumnHeaders
                'Supprime les anciens entêtes
                .Clear
     
                .Add , , "reunion", 30
                .Add , , "course1", 100
                .Add , , "course2", 100
            End With
     
            'Remplissage de la 1ere colonne (création de 3 lignes)
     
           For i = 1 To 10
     
              .ListItems.Add , , "R" & i
     
           For c = 1 To 10
            .ListItems(i).ListSubItems.Add , , "R" & i & "C" & c
            Next
           Next
          End With
     
     
        '--------------------------------------------------
     
        'Spécifie l'affichage en mode "Détails"
        ListView1.View = lvwReport
    End Sub
    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

  15. #15
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    re,
    bon ça fonctionne avec "fullselectRow" partout....mise à part une petite subtilité...
    avec mon code
    sur ligne R1, avec la souris niquel, parcontre pour les autres, il faut que je descende avec la flèche du bas, puis sélectionne avec souris et ça fonctionne....Une explication???
    en gros il fau que la ligne soit en surbrillance "bleu", pour sélectionner un subitem
    seb

  16. #16
    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
    oui l'explication est simple
    c'est un ocx relativement lourd
    et comme pour une listbox on met l'index a -1 pour pouvoir re sélectionner la listview on met 1 et visiblement ca prend beaucoup de temps je sais pas pourquoi mais le soucis est la
    en fait prends ton temps balade toi sur la listview et arrête toi sur une ligne et attends qu'elle devienne bleue ca te donne une idée du temps et de la mémoire que doit prendre cet ocx

    si ce n'est que a part les icones oserai je dire que tu peut faire la même chose avec une listbox qui est beaucoup moins lourd

    exactement pareil !!!!!!!!!!
    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

  17. #17
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    C bon ca fonctionne en partie...
    avec ce 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
    Private Sub ListCust_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As stdole.OLE_XPOS_PIXELS, ByVal Y As stdole.OLE_YPOS_PIXELS)
    Dim col As Integer
        'Debug.Print x
        Debug.Print Y
        'col = IIf(x > 81, 3, 1)
     
       If X < 95 Then Exit Sub
       If X > 96 And X < 190 Then col = 1
       If X > 192 And X < 287 Then col = 2
       If X > 288 And X < 383 Then col = 3
       If X > 384 And X < 478 Then col = 4
       If X > 479 And X < 573 Then col = 5
       If X > 574 And X < 668 Then col = 6
       If X > 669 And X < 763 Then col = 7
       If X > 764 And X < 860 Then col = 8
       If X > 861 And X < 960 Then col = 9
       'R1y = 22-41, R2y = 42-60, R3y = 61-80, R4y = 81-97
        'Debug.Print col
        MsgBox " vous avez cliqué sur  " & ListCust.ListItems(ListCust.SelectedItem.Index).ListSubItems(col).Text
        ListCust.ListItems(1).Selected = True
     
       End Sub
    La seule subtilité est qu'il faut sélectionné soit R1,R2,R3 ou r4 et sélectionner après ce que l'on veut sur la ligne...et il renvoit bien la sélection

    PATRICK, c quoi ton truc pour tes animations que tu postes???
    As-tu un ex avec listbox, sinon!

  18. #18
    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
    bon ben voila j'ai résolu le soucis de lenteur avec une astuce très simple
    reprends mon exemple et change la sub mousedown pour cell ci tu va comprendre tout seul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ListView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
    col = IIf(x > 81, 2, 1)
    ind = Val((y - 22) / 22) + 1
    ListView1.ListItems(ind).Selected = True
     MsgBox " vous avez cliqué sur  " & ListView1.ListItems(ListView1.SelectedItem.Index).ListSubItems(col).Text
    'Set ListView1.SelectedItem = Nothing
    ListView1.ListItems(1).Selected = True
    End Sub
    résultat instantané !!!

    c'est encore le toulonnais qui gagne LOL

    pour etre plus precis avec un font de 11
    c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ind = IIf(Val((y - 21) / 21) = 0, 1, Val((y - 20) / 21))
    vise la rapidité les ligne n'ont meme pas le temps de bleuir

    Nom : demoingto64 in-out.gif
Affichages : 2418
Taille : 230,3 Ko
    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

  19. #19
    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 exemple qui fonctionne nickel
    Bonjour seb

    apres un bonne nuit de someil les neurones ont répondus a l'appel
    voici une démo qui fonctionne parfaitement bien
    toute les colonnes sont a la même taille
    pour l'index de colonne on fait au plus simple on divise X par 80 (80 etant la largeur d'une colonne
    on récupère le val du nombre obtenu qui nous donne l'arrondi entier ce qui nous donne l'index de colonne

    wagadougou!!! ya plus qu'a
    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
    Private Sub ListView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
         col = Val(x / 80)
        ind = IIf(Val((y - 21) / 21) = 0, 1, Val((y - 20) / 21))
        ind = IIf(ind > 4, 4, ind)
        ListView1.ListItems(ind).Selected = True
        MsgBox " vous avez cliqué sur  " & ListView1.ListItems(ListView1.SelectedItem.Index).ListSubItems(col).Text
            ListView1.ListItems(1).Selected = True
    End Sub
    Private Sub ListView1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
    col = Val(x / 80)
        ind = IIf(Val((y - 21) / 21) = 0, 1, Val((y - 20) / 21))
        ind = IIf(ind > 4, 4, ind)
        ListView1.ListItems(ind).Selected = True
    End Sub
    Private Sub Worksheet_Activate()
    nbcourses = 16
    '----- remplissage ListView------------------------
        With ListView1
            ListView1.ListItems.Clear
            With .ColumnHeaders
                            .Clear
                .Add , , "reunion", 80
                For i = 1 To nbcourses
                    .Add , , "course" & i, 80
     
                Next
            Debug.Print ligne
            End With
            For i = 1 To 4
                .ListItems.Add , , "R" & i
                For c = 1 To nbcourses
                    .ListItems(i).ListSubItems.Add , , "R" & i & "C" & c
                Next
            Next
        End With
        '--------------------------------------------------
        'Spécifie l'affichage en mode "Détails"
        ListView1.View = lvwReport
        ListView1.ListItems(1).Selected = True
     
    End Sub
    Nom : demoingto64 in-out.gif
Affichages : 2430
Taille : 716,0 Ko
    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

  20. #20
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Salut Patrick,

    Bon ok pour le fonctionnement et la compréhension, mais chez moi les colonnes ne sont pas de la même dimension??? donc à chaque clique c'est tout faux.....
    Pour la largeur des colonnes, as-tu un truc???? car chez moi impossible de leur attribuer une valeur avec .Width...
    Chez moi si je clique sur R3C3 il me renvoit R2C3
    sur R4C9 ---> bug --->erreur "hors limite" idem si je clique seulement sur R1 ou R2 ou R3 ou R4....

    edit:
    si j'applique 80 de largeur, en fonction de la grille de feuil, c bon pour les x, mais pas pour le y, ii faut que je clique à la ligne du dessous pour qu'il me renvoit la ligne souhaitée, décalage de ligne...
    je regarde dans ton code pour voir ce que je peux faire.

    Correction, c avec mon code que ça fait ça, e n'avais pas vu le tiens...sub Windows activate
    seb

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Changement sur click dans un element d'une liste
    Par titeZ dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/10/2007, 11h20
  2. Changement sur click dans un element d'une liste
    Par titeZ dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/10/2007, 08h13
  3. Réponses: 12
    Dernier message: 11/10/2006, 22h43
  4. plantage après click sur le OK d'une messageBox
    Par cenedra dans le forum MFC
    Réponses: 7
    Dernier message: 31/07/2006, 08h43
  5. Recherche sur 2 elements dans une liste box.
    Par molarisapa dans le forum Access
    Réponses: 2
    Dernier message: 29/05/2006, 18h43

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