Rapport de message :*
 

Re: Classe Listview absente des bibliothèques

Titre du sujet : Re: Classe Listview absente des bibliothèques
par Guy le 09/04/2011 16:24:27

Bonjour Daniel,

J'ai suivi le chargement de la liste pas à pas en scrutant les étapes une à une. Il apparaissait qu'à l'enregistrement d'un nouvel élément, plus précisément à l'exécution de la seconde ligne du bloc suivant :

       With LvwClients.ListItems(vNbLignes)
            .ListSubItems.Add 1, , vCellule.Offset(0, 3)   'Client
            .ListSubItems.Add 2, , vCellule.Offset(0, 5)  'prénom
            .ListSubItems.Add 3, , vCellule.Offset(0, 6)  'Nom
            .ListSubItems.Add 4, , vCellule.Offset(0, 15) 'tél
            .ListSubItems.Add 5, , vCellule.Offset(0, 16) 'mobile
            .ListSubItems.Add 6, , vCellule.Offset(0, 18) 'mail
            Set vCellule = vCellule.Offset(1, 0)
            vNbLignes = vNbLignes + 1
        End With


l'élément 1 prenait la valeur 2, l'élément 2 prenait la valeur 4, l'élément 3 la valeur 6 etc.

À la passe suivante tout recommence mais à l'envers. L'élément 1 passe à 7, le 2 à 6, le 3 à 5, etc. et ça tourne les enfants ça tourne.

Comportement absolument déroutant. Inextricable.
Au bout du compte seuls les éléments impairs possédaient des ListSubItems non vides d'ou une ligne sur deux vide.
Tu pourras noter que ce ne sont que les lignes impaires qui portent des ListSubItems non vides.

Je t'invite à zieuter la chose par toi-même. Tu verras que le comportement du ListView est tout à fait ésotérique.
Pour ce faire ajoute un espion LvwClients.ListItems et un point d'arrêt au début du bloc. Des heures de plaisir.

Bien, mais encore me suis-je dit. Quel que soit le comportement de cet objet, puisque j'avais renoncé à pousser davantage dans cette direction, où peut bien être la différence entre le chargement du ListView à l'affichage (UserForm_Initialize()) et celui à la mise à jour (nouvel élément)? Compte tenu du comportement de cette bibite il semble que le chargement suive un ordre sur lequel le codeur n'a aucune prise. Hmmm... réchiflissons... Euréka!

Au démarrage le ListView n'est pas trié! La propriété Sorted est à False, alors qu'à l'ajout celle-ci est à True!

J'ai donc ajouté une instruction

' 2pme : instruction ajoutée
LvwClients.Sorted = False

juste avant le bloc cité dans MajListingClients() et le tout semble fonctionner correctement.

Alors pour ce qui est d'empêcher de dormir ton truc est champion.

Aussi il se peut fort bien que tu reviennes ici pour d'autres petits problèmes causés par ton application. J'en ai aperçu quelques bribes ici et là.

Je crois la problématique 1 résolue. Si tel est le cas prière de le noter ici.

Cordialement,

Guy