XL 2013 VBA Scroll en ListBox (dans un UserForm)

Dudu2

XLDnaute Barbatruc
Bonjour,

Je chercher un code qui marche pour scroller une ListBox dans un UserForm avec la molette de la souris.
Sur Internet il y a plein d'exemples inspirés du code de Peter Thornton mais il y a toujours un truc qui coince à l'exécution.

Quelqu'un aurait-il une version opérationnelle en 32 bits ? en 64 bits ?

Cordialement,
D.
 

patricktoulon

XLDnaute Barbatruc
j'ai découvert très récemment (quelques jours ) que tout les offices installait le MSCOMCTL.OX
mais pour le version 2013 et plus ne l'enregistrait pas

il suffit juste de copier cet ocx dans le comonfile et de enregistrer dans le registre
contrairement!!! a tout ce que l'on peu trouver sur le sujet (sur le net)proposant un ersatz de ce composant sous le nom de MSCOMM32.OCX ,il n'en ai nul besoins puisque l'installation d'office te le donne il est tout simplement pas enregistré dans le registre

et si l’installation avec ton disque office ne te la pas mis dans le system32/64 tu peux toujours aller le

chercher dans dans un "cab" dans ton disque d’installation
il sera de source fiable et valide

cet ocx te donnera le listview dans tes controls supplémentaires

le listview gère la mollette souris nativement ;)

edit :bonsoir jmfmarques

sur mon disque par exemple il se trouve dans l'archive cab proplusWW2\propsww2.cab
Capture.JPG
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
J'ai pu ajouter le ListView dans les Contrôles de la Boîte à Outils du Userform.
Et fait quelques essais de manipulation de cette chose et peux dire que c'est vraiment un truc imbitable. Quand on charge/décharge une ListBox direct avec un Range ou un tableau, il faut faire des contorsions pour charger une ListView. OK, c'est juste de la codification à avaler, comme le sanscrit, mais j'ai ramé.

Maintenant s'il faut absolument éviter les Hooks et si c'est une meilleur option d'utiliser une ListView, je vais dans un premier temps renoncer à mon Scroll de ListBox car trop de programmation derrière pour convertir en ListView. D'ailleurs si Excel sait gérer le Scroll en ListView, que ne l'ont-ils fait pour ListBox ?! Parce qu'il faut bien dire que si tant de gens cherchent des solutions quitte à John Lee Hooker, c'est que c'est un besoin évident.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re je n'ai pas dis qu'il fallait pas le faire mais le faire bien c'est pas la même chose
le fichier que je t'ai donné c'est pas moi l'auteur c'est d'un gars qui me marche sur la tète coté api quand il me parle j'ai envie de le frapper tellement je pige rien c'est pour te dire :D:D pourtant je maîtrise un peu quand même

mais bon est ce que ça vaut le coup pour trois coup de mollette ;)
 

Dudu2

XLDnaute Barbatruc
C'est sûr que ces fonctions qui vont chercher des settings introuvables on ne peut que les récupérer sans trop chercher à comprendre, en tous cas pour moi.

Oui ça vaut le coup pour 3 coups de molettes, car la 1ère chose qu'on tente dans une ListBox ou ComboBox à rallonge c'est la molette. Puis on se dit "M...ince ! C'est vrai que ça ne fonctionne pas !".

Il faudrait sans doute se fabriquer une petite API sur les ListView avec quelques fonctions pour simplifier les chargements / déchargements avec Ranges et Variables Tableaux, références et valorisation par indices Ligne / Colonnne, dimensionnement des colonnes, etc... Un jour si j'ai le temps je ferai ça. Ou un Barbaduc ? ;)
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour Dudu2une api pourquoi faire ?remplir une listview? :rolleyes:

ben si pour toi coder une dizaine de lignes est une gageure
ben tu te fait ton code dans une fonction avec pour argument la range tu te la met dans un coin dans tes archives

et tu t'en ressert a volonté ;)
VB:
Private Sub CommandButton1_Click()
    remplissage ListView1, [A1:C26]    'sans entete
    
    'remplissage ListView1, [A1:C26], True    'avec  entete

End Sub


Function remplissage(lstVW, plage, Optional header As Boolean = False)
    Dim i&, c&, x&
    With lstVW
        .SetFocus
        .ListItems.Clear
        With .ColumnHeaders
            .Clear
            For i = 1 To plage.Columns.Count: .Add , , plage.Cells(i), plage.Cells(i).Width: Next
        End With
        .View = lvwReport                   ' type Report
        .FullRowSelect = True       ' sélection complète de la ligne
        .HideColumnHeaders = Not header  ' Masque les en-têtes de colonnes
        '.CheckBoxes = False
        '.Gridlines = True
    End With
    If header Then x = 1
    For i = 1 + x To plage.Rows.Count
        lstVW.ListItems.Add i - x, , plage.Cells(i, 1)  '<--- modifier l'instruction pour ajouter
        For c = 2 To plage.Columns.Count
            lstVW.ListItems(lstVW.ListItems.Count).ListSubItems.Add c - 1, , plage.Cells(i, c)
        Next
    Next
End Function

pas besoins d'api ;)
 

jmfmarques

XLDnaute Accro
Bonjour à tous
Pour l'amour de dieu : cessez d'appeler "APIs" des fonctions (qu'elles soient celles de l'Api de Windows, celles d'une autre librairie ou enfin des fonctions indépendantes écrites en C).
chacun (dont vous-même) y verra ainsi plus clair et mes yeux me piqueront moins.
 

jmfmarques

XLDnaute Accro
Bonjour patricktoulon
Il arrive un moment où l'on voit bien (trop bien) à quel "degré" on arrive (et là, le "collyre" de la meilleure qualité ne suffit plus).
Voilà ce qui m'a fait bondir :
Il faudrait sans doute se fabriquer une petite API sur les ListView avec quelques fonctions pour simplifier les chargements / déchargements avec Ranges et Variables Tableaux, références et valorisation par indices Ligne / Colonnne, dimensionnement des colonnes, etc... Un jour si j'ai le temps je ferai ça. Ou un Barbaduc ?
Traduction : un jour, si j'ai le temps, j'écrirai (en quel langage autre que VBA, donc ? ) une librairie contenant des fonctions permettant d'établir des connexions entre entre autres VBA et le logiciel gérant entre autres les listview...
Voilà voilà ...
 

Dudu2

XLDnaute Barbatruc
:) Ce niveau de pseudo-purisme de pseudo-expert du vocabulaire amène à considérer les choses par le petit bout de la lorgnette.
Wikipédia:
En informatique, une interface de programmation d’application1 ou interface de programmation applicative2,3,4 (souvent désignée par le terme API pour Application Programming Interface) est un ensemble normalisé de classes, de méthodes, de fonctions et de constantes qui sert de façade par laquelle un logiciel offre des services à d'autres logiciels.

Il s'agit donc de faire des fonctions qui vont servir de façade aux services fournis par les méthodes des ListView. Quand ce sera fait je serai happy car ça me facilitera la tâche.
:p :p :cool::)
 

jmfmarques

XLDnaute Accro
Le "petit bout de la lorgnette" !!!!!!????!!!, Dudu2 ???

Attends, toi, je vais l'utiliser alors, ton "gros bout de la lorgnette" --->> et revoilà une autre traduction ("par le gros bout") :
"Il faudrait sans doute se fabriquer un truc, un machin ou un bidule (quelque-chose, quoi) ..... "
 

Dudu2

XLDnaute Barbatruc
Je vais, peut-être si j'ai le temps, fabriquer mes fonctions d'interface, d'API au sens large, pas au sens étriqué du petit bout de la lorgnette, en profitant des retours plein d'empathie et d'esprit de coopération dont j'ai le plaisir de bénéficier :):p:D:cool::p:p:p.
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 296
Membres
103 171
dernier inscrit
clemm