Copier contenu ListBox dans ListView ?

  • Initiateur de la discussion Initiateur de la discussion YANN-56
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

YANN-56

XLDnaute Barbatruc
Bonsoir à ceux qui passeront par ici,

Je ne maîtrise absolument pas les ListBoxes!
J'ai fouillé dans les aides, et je n'ai rien trouvé ou pas pigé...

Ce pourquoi je viens vers vous.
Voici le code où il ne me semble pas manquer grand-chose, et pourtant je patine!!!

Code:
Private Sub CommandButton1_Click()

For i = 0 To SAISIE.ListBox1.ListCount - 1
      
 SAISIE.ListView1.ListItems.Add , , SAISIE.ListBox1.List(i)
 
    'For j = 1 To SAISIE.ListBox1.ColumnCount - 1

     ' SAISIE.ListView1.ListItems(Me.ListView1.ListItems.Count).ListSubItems.Add , , SAISIE.ListBox1.List(i) + ??????????

   ' Next j
  
 Next i
        
End Sub

Les Items sont Ok, mais pour les SubItems: Plouf à chaque fois.

Merci d'avance.

Yann

P.S. Voir éventuellement le Classeur joint:
 

Pièces jointes

Re : Copier contenu ListBox dans ListView ?

Exact Habitude,

Cette suppression et remplacement me rappelle de vieux souvenirs.Comme ici la création d'un groupe avec les ListView:

https://www.excel-downloads.com/thr...vec-public-withevents-est-ce-possible.128345/

J'aurais du m'en rappeler, tant j'ai ramé après m'être contenté de la copie d'une ListView d'un autre classeur....
Il est indispensable d'en créer une nouvelle dans tous les cas!!!... A noter!

En l'occurrence, en construisant un autre Classeur vierge, ma fameuse référence est réapparue,
par suite que mon USF avait ce contrôle.

Qu'importe! Je suis le plus heureux du monde avec ce que nous as offert.

Voici l'évolution grâce à toi: (Classeur ci-joint)

1) le Click sur les entêtes de colonnes n'a qu'une utilité relative: Donc à abandonner.
2) La recherche d'une page l'est aussi, car je ne vois pas comment l'utilisateur pourrait soupçonner y trouver ce qu'il cherche.
3) Le SpinButton peut être conservé pour le cas où il cherche quelque chose autour des articles de la page visible
4) J'ai ajouté un moteur de recherche dans la liste, avec le Bouton5.
Celui-ci va lui permettre de rechercher un article dont il ne se souvient que d'une partie de son appellation
.

Je ne l'ai pas fait, mais cela sera désormais simple.
Comme en général, les Fournisseurs ont des codes Articles suivant leurs gammes de produits, il sera facile de se situer dans celles-ci en faisant une recherche par code. (Exp. les codes de 280.000 à 290.000 correspondent aux accessoires de fenêtres à soufflet)

Je ne suis pas très fier de mon code de recherche, mais il fonctionne bien.
Il y aurait certainement mieux à faire avec un "Loop Until", mais il faut que j'apprenne.
La manœuvre n'est pas très longue, mais elle est certainement ralentie par le rafraichissement d'écran
dont je n'arrive pas à me défaire! 🙁

Je te dois une fière chandelle pour une multitude de raisons dont il serait trop long d'en énumérer la liste ici.

Merci Habitude ... Que puis-je ajouter d'autre?

Si ce n'est que mes amitiés.

Yann
 
Re : Copier contenu ListBox dans ListView ?

Crotte de bique! J'ai oublié de joindre mon Classeur.

Aussi de dire que pour les tests:Le faire avec ces trois mots, par exemple:

kit qui va amener page 1
vantx, qui va amener vers la page 31 (J'ai oublié)
monin, qui va manemé à la dernière page.

En minuscules ou majuscules; pas d'importance!
 

Pièces jointes

Re : Copier contenu ListBox dans ListView ?

C'est effectivement un code assez rapide.
Surprenant même.

Seul problème à mon avis.
Tu affiche la première page où les occurences ont été trouvées.

Pourquoi ne pas faire une recherche sur la matrice ?

Dans le fichier joint. J'ai codé le tri colonne en triant le recordset.
En ajoutant un "ORDER BY" dans la requête SQL
Parcontre je n'aime pas le résultat.
 

Pièces jointes

Dernière édition:
Re : Copier contenu ListBox dans ListView ?

Re

Je viens de comprendre pourquoi le tri ne fonctionne pas
Le problème est que tout tes champs ont le même nom
Soit X

Alors Le RecordSet nomme ses champs
X1, X2, X3, X4 etc....

Ca prend environ 1.5 s par tri et ca marche très bien
 

Pièces jointes

Re : Copier contenu ListBox dans ListView ?

Ci-joint 2 type de recherche
une par matrice
L'autre par requete SQL

L'avantage par Matrice est qu'une recherche peut être effectué sur la liste de recherche.


L'avantage par SQL est que dans la requête de recherche, on peut codé le tri des colonnes.
 

Pièces jointes

Re : Copier contenu ListBox dans ListView ?

Bonjour Habitude,

Je suis un peu gêné de recevoir si belle aide,
sans avoir idée de ce que je pourrais t'offrir en retour.

J'entrevois une multitude de possibilités qui vont rendre plus confortable et efficace l'utilisation de mon appli initiale. (Lourde de ce que ne savais pas faire voici 4 ans)

Tu vas certainement comprendre l'avantage de ta méthode:

1) Tous les articles du Tarif ont en Colonne "Choix" un chiffre correspondant aux habitudes de commandes. (Celui-ci est écrit par l'utilisateur, lui-même, via un USF prévu à cet effet)

-> Il sera donc possible de ne charger que ce que l'utilisateur commande de préférence.
(Le chiffre 16 est nul. Il n'est là que pour éviter les vides, car étant le premier Item chargé)

2) Tous les codes article des Fournisseurs ont une structure liée à une gamme de produits.

-> Il sera donc possible de ne charger que ceux correspondant à la production en cours.

3) Tous les articles préférentiels du Tarif ont en Colonne "Couleur" un code permettant de modifier celle de la police des lignes; plus de lisibilité.

-> Je vais donc regarder à l'adapter.
(Ceci expliquant ma remarque intermédiaire relative au tri da la liste... Aujourd'hui résolue)

Ma passion pour VBA était sérieusement en train de s'éroder par suite de trop d'échecs,
Merci de l'avoir bigrement ravivée 🙂. Je vais donc bosser sur les points qui précèdent.

Amicalement

Yann

P.S. J'ai opté pour la Solution: "Recherche requête"
 
Re : Copier contenu ListBox dans ListView ?

Bonsoir pour moi, Bonjour pour toi,

Trop heureux de l'avancement: je te fais suivre un brin de mon évolution.

Je me régale au plus haut point !!!

Une façon de dire Merci est aussi de montrer que l'on s'est servi de l'aide que l'on a reçue!

N'est-il pas?

Au plaisir de te lire.

Amicalement

Yann
 

Pièces jointes

Re : Copier contenu ListBox dans ListView ?

Bonsoir,
au vu de cette performance ,je ne suis que spectateur mais il est vrai que j'apprend moi aussi beucoup de chose,
merci a vous deux.

Analyse de code en cours... pour comprendre le plus de chose possible,
Bon weekend
A+
Frédéric.(fhoest)🙂😉
 
Re : Copier contenu ListBox dans ListView ?

Re,

Je me suis permis de codé : La totalité
J'ai aussi modifié un peu ton code

J'ai mis ton Vecteur : BOUTONS_OPTION dynamique au lieu d'une dimension fixe de 10 éléments

Dans ton module variable publics
J'ai déclarer un type enum
J'ai associé ce type a CHOIX_COLONNE au lieu de string

dans ton module de classe j'ai mis un select case sur ce type enum

L'avantage du type enum:
quand tu tappe le "="
ca t'affiche une liste de choix, ni plus, ni moins.
ex :
Dans ton initialize du userform1
Ton choix forfaitaire
efface le = et tappe le a nouveau

J'ai aussi passsé NB_ITEM_VISIBLE = 23
a NB_ITEM_VISIBLE = 24

je libère aussi les mémoires des vecteurs lorsque tu quitte la userform
 

Pièces jointes

Dernière édition:
Re : Copier contenu ListBox dans ListView ?

Bonjour Habitude,

Tu as de belle façon ôté mes scrupules en faisant allusion à ma signature.
Outre ta compétence, tu prouves ici ta modestie... C'est l'art des grands.

J'ai tenté de manipuler ton code relatif au module de classe1.
Je n'ai rien compris à ce que les "RH" venaient faire là. 😕
Ma récupération du numéro d'ordre des boutons d'Options semble suffire.

Par contre la mise en place dynamique du nombre de contrôles
concernés par le module de Classe est vivement à retenir

Le type "enum", je n'ai pas encore compris pourquoi!!! 🙁

Pour ce qui est du vidage de la mémoire, je soupçonne que sans cela,
j'aurais peut-être eu des soucis quant à la suite.
(Mes tests ne sont pas assez avancés pour le dire)

Le petit travail auquel je me suis appliqué, ces dernières heures,
avait pour objectif de proposer d'emblé à l'ouverture de l'UF,
la possibilité de charger; soit:

1) Tous les Articles.
2) Que ceux dont le choix est préférentiel (C'est-à-dire < 16 dans la première colonne)
3) Que ceux ayant les caractères saisis via le TextBox2 dans la colonne "Code"
4) Que ceux ayant les caractères saisis via le TextBox2 dans la colonne "Article"

Pour l'instant
"1" Fonctionne, mais il me faut cliquer sur le SpinButton pour visualiser?
"2" Je n'ai pas encore regardé.
"3" N'est effectif qu'après avoir effectué "1" initialisant la recherche globale.
"4" Idem le précédent.

Le but définitif serait de supprimer le bouton "Solution Habitude"
et de se servir que des options du Frame.

Pardon si j'abuse, mais comme tu me sembles intéressé par le sujet...J'ose. 🙂

Amicalement, et encore Merci pour ton enseignement.

Yann

Voir ci-joint:
 

Pièces jointes

Re : Copier contenu ListBox dans ListView ?

Bonjour Habitude,

Ne t'embarrasse pas avec ce que j'ai rédigé dans mon Post précédent, sauf si cela te tente,
car j'ai réussi à incorporer dans mon appli l'essentiel de ce que m'as appris.

Sauf que j'ai un gros souci qui pourrait devenir très gênant dans l'avenir:

Dans la base de données "CHAT", j'ai voulu intervertir les colonnes "Commentaire" et "Couleur".

Dans un premier temps, j'ai ajouté sur la droite une nouvelle colonne avec en entête "X"
à la ligne 2 "Commentaire" (Par copie), puis supprimé la colonne Commentaire initiale.
(A noter que toutes les cellules sont au format texte)

Résultat: J'ai eu ce Bug ici:

Code:
Function RemplirListe()
……
    For j = 1 To nbCol - 1
       [COLOR="Red"] a.ListSubItems.Add , , v(I - 1, j)[/COLOR]    Next j
……
End Function

Dans un deuxième temps, j'ai inséré la colonne Couleur, après copie, avant la colonne Commentaire,
puis supprimé celle qui n'avait plus lieu d'être.

Là tout marche bien!!! Je ne parviens donc pas à trouver où est le piège!

Comme je vais avoir à remoudre tous les Tarifs Fournisseurs,
j'aimerais préalablement avoir ton avis sur ce problème, si tu le veux bien.

Merci par avance,

Amicalement.

Yann.
 
Re : Copier contenu ListBox dans ListView ?

Re bonjour

après avoir mis un espion sur la ligne, j'ai vue que notre ami le recordset peut retourner des valeur "Null"

Alors avant de les mettre dans la matrice il faut changer les "null" pour ""
Code:
    Do
        If rst(0) <> "" And Not IsNull(rst(0)) Then
            For i = 0 To nbCol - 1
                v(cpt, i) = IIf(IsNull(rst(i)), "", rst(i))
            Next i
        End If
        cpt = cpt + 1
        rst.MoveNext
    Loop While Not rst.EOF
 
Re : Copier contenu ListBox dans ListView ?

Explication des type enum

Le problème avec un string dans le cas d'un choix est que l'on peut y mettre n'importe quoi.

C'est pourquoi au niveau usager on met des comboBox "drop list"
Celle-ci permettent un choix a l'usager qui ne peut pas dépasser la limite des choix possible.

Au niveau programmation, l'équivalent est le type enum.
Si j'attribue un type a une variable.
Cette variable ne peut pas valoir autre chose que les choix dans la liste.
Ca améliore la compréhension du code et diminu les risques d'erreurs.

La plupart des objets VB on des type enum associé pour les choix.

Prenons juste comme exemple les msgbox
chaque choix correspond a une valeur
On peut donc mettre soit la valeur ou le choix.
vbOKOnly 0
vbOKCancel 1
vbAbortRetryIgnore 2
vbYesNoCancel 3
vbYesNo 4
vbRetryCancel 5
vbCritical 16
vbQuestion 32
vbExclamation 48
vbInformation 64
vbDefaultButton1 0
vbDefaultButton2 256
vbDefaultButton3 512
vbDefaultButton4 768
vbApplicationModal 0
vbSystemModal 4096
vbMsgBoxHelpButton 16384
etc.....
 
Re : Copier contenu ListBox dans ListView ?

Merci Habitude,

J'ai pris bonne note de ton explication relative au type "enum".
Je vais faire des tests de comparaison, car je ne doute pas de cette utilité.
(Avec mon petit niveau et mon grand âge; il ne faut pas que j'aille trop vite)

Concernant les manipulations des utilisateurs dans les Tarifs qui peuvent amener à des surprises,
je vais tenter de les simuler avec cet ajout" And Not IsNull" que je ne connaissais pas.

Normalement, seul le chef de production peut intervenir au niveau de la base de données Fournisseur,
et il est assez sérieux pour respecter mes consignes.
Mais il y en a qui connaissent Acyd ou autre pour sauter le mot de passe de protection, et fiche le désordre.

En cas de Bug, j'ai une appli qui sensée remettre de l'ordre dans la totalité de la cinquantaine de Tarifs utilisés.
C'est donc ce que j'avais fait en inversant les deux dernières colonnes....
Mais le "Plouf" dont je t'ai fait part.

Je n'ai plus rien à voir avec mon ancienne entreprise, mais c'est un challenge pour moi
de faire évoluer l'appli dont ils se servent depuis 4 ans (D'où le sujet initial: La rapidité)

Diantre! Si j'avais eu un prof comme toi à cette époque!!!

Amicalement.

Yann
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
661
R
Réponses
20
Affichages
4 K
RaVenSs
R
T
Réponses
2
Affichages
2 K
Tibooo
T
X
  • Question Question
Réponses
4
Affichages
2 K
Xplor
X
Retour