Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres Doublon dans ComboBox et Trie

  • Initiateur de la discussion Initiateur de la discussion EricD59
  • 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 !

EricD59

XLDnaute Nouveau
Bonjour le Forum, bonjour à toutes et à tous.

Je me présente, je me prénomme Eric et j'ai 61 ans.
Je suis dessinateur sur solidworks en tôlerie industrielle et actuellement sans emploi.

Pour ma première discussion voici le sujet :

J'ai une Listview alimenté par plusieurs tableaux issu de plusieurs feuilles.
J'ai créé 4 filtres, Dates, Mois, Catégories et Opérations. Jusque-là pas de problème.
Mais lorsque je filtre par dates mes autres filtres se mettes à jour suivant le nouveau
résultat dans la listview, mais je n'arrive pas à supprimer les doublons des nouveaux filtres
et à les trier dans l'ordre croissant.
Les filtres sont des ComboBox.

Merci à toutes et à tous pour votre aide.

Ps je joint un fichier test.
 

Pièces jointes

Bonsoir.
Vues les explications, utilisez mon objet ComboBoxLiées. Mais ce ne serait vraiment pratique que si tout était dans un seul tableau.
Bonsoir Dranreb
Merci pour votre réponse.
Je ne connais pas objet ComboBoxliée . Mes connaissance en vba sont limitée.
je ne peux pas faire un seule tableau car les client sont différent , donc je doit utiliser plusieurs feuilles.
 
Hello

Juste pour savoir si je peux continuer ce que je fais, est ce que ce fichier fonctionne toujours chez vous?
j'ai juste transformé les tableaux des comptes en Tables Structurées (plus besoin des nombreux rows.count.end(xlup). ou xldown..)

sinon, une règle générale à suivre pour mieux gerer le code
Donner des noms explicits aux différentes controls de formulaires
exemples :
==> combobox1 (on ne sait pas de quoi il s'agit) devient Cbx_Compte (rien que le nom indique qu'il s'agit d'un combo qui contient les comptes
textbox1 ==>tbx_XXXX
commandbutton1 ==>Cbn_Quitter
 

Pièces jointes

Dans la PJ, j'ai renommé les controls (à part les textbox)
et j'ai repris le code pour le remplissage des combos pour ne plus avoir les doublons

note: j'ai l'impression que le remplissage de la listview est relativement long.. je vois un clignotement...
 

Pièces jointes

une remarque sur la macro pour trier la listview...
c'est un code qui réinvente la roue..

un intéret de la listview versus une listbox.. ce sont les méthodes intégrées.. notamment le tri...

remplace ton code par celui-ci

VB:
Private Sub Cbx_OptTri_Change() 'Trie Colonnes ListView ( Module 1 )
Dim selectedColumn As Integer
Dim i As Long

    TextBox1.Value = ""
    TextBox2.Value = ""
    TextBox3.Value = ""
    TextBox4.Value = ""
    TextBox10.Value = ""
    TextBox11.Value = ""
    TextBox13.Value = ""
    TextBox14.Value = ""

    selectedColumn = val(Cbx_OptTri.ListIndex + 1) 'numéro de la colonne à trier dans la listview

    If selectedColumn >= 1 And selectedColumn <= ListView1.ColumnHeaders.Count And ListView1.ListItems.Count > 1 Then
        ListView1.Sorted = False
        ListView1.SortKey = selectedColumn - 1
        
        If UCase(Me.ListView1.ColumnHeaders(selectedColumn).Text) = "DATES" Then 's'il s'agit de la colonnne Dates, on passe les dates au format décimal pour pouvoir etre trié
            For i = 1 To ListView1.ListItems.Count 'Boucle sur toutes les lignes
                ListView1.ListItems(i).ListSubItems(selectedColumn - 1).Text = CDec(CDate(ListView1.ListItems(i).ListSubItems(selectedColumn - 1).Text))
            Next i
        End If
        
        ' ------ Application du tri -----------
        ListView1.SortOrder = lvwAscending
        ListView1.Sorted = True
        '--------------------------------------
        
        If UCase(Me.ListView1.ColumnHeaders(selectedColumn).Text) = "DATES" Then 's'il s'agit de la colonnne Dates, on repasse les dates au format date
            For i = 1 To ListView1.ListItems.Count 'Boucle sur toutes les lignes
                ListView1.ListItems(i).ListSubItems(selectedColumn - 1).Text = Format(CDate(ListView1.ListItems(i).ListSubItems(selectedColumn - 1).Text), "DD/MM/YYYY")
            Next i
        End If
    End If
End Sub
 
Bonjour vgendron

Merci pour t'on aide.

J'ai une erreur au niveau de cette ligne :
erreur d'exécution 438
Propriété ou méthode non gérée par cette objet
T = .ListColumns("Opérations").DataBodyRange.Value

Ci ça peut être utile Ma version excel 2003​

J'ai fait quelque essais avec l'ancienne ligne de code T= ca fonctionne plutôt bien pour le remplissage des Combos.
Plus de doublons.
Si ce n'est pas trop demandé pourrais tu me dire comment trier les combos dans l'ordre alpha.
Merci pour tes conseils pour les noms des différents contrôles je ferais plus attention à l'avenir.

Merci pour ton travail @+
 
Peux tu essayer ce fichier
et si tu as toujours un bug, dire quelle ligne et dans quelle sub
En fait, la question que je me pose c'est.. est ce que ta version d'excel connait et accepte les tables structurées (ListObjects en VBA)
 

Pièces jointes

Dernière édition:
Bonsoir
juste en passant
le demandeur vous dit en post #4 qu'il travaille sur 2003 donc les tableaux structurés a mon avis c'est mal barré
je dis ça je dis rien moi 😉

pour info aussi le listview était un peu différent à l'époque
donc (pas sur à 100% )mais tout les fichiers produits sur version ultérieure risque de déclencher l'erreur "deconnecté du client" a l'ouverture du module userform en lecture dans le vbe
 
- 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
69
Affichages
6 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…