tri automatique...

pnlop

XLDnaute Occasionnel
Bonjour le forum,
J'ai une fois de plus besoins de vos lumières pour savoir si quelque chose est possible ou pas..
Dans mon classeur, j'ai un UserForm avec une Listview à plusieurs colonnes. L'utilisateur peut trier cette Listview directement dans l'UserForm en cliquant sur les entêtes. En suite, un bouton permet de valider, ce qui envoie les données de la ListView dans une des feuilles du classeur, dans des colonnes spécifiques (A,B,C,D et E) à partir de la ligne 32 (et suivante en fonction du nombre d'Items à coller...)
Mon souhait: Dans le cas où l'utilisateur n'a pas trier la ListView d'après le bon critère (colonne), serait-il possible que le tri se fasse automatiquement et directement sur la feuille? ou faudrait-il ajouter du code pour qu'avant de transférer les données de la ListView vers la feuille, cela trie les données selon un critère précis? (qui est par ailleurs la 2 ème colonne - ordre croissant)
J'ai essayer avec la boîte de dialogue "trier", mais ce n'est pas concluant, car il ne le fait que quand on lui demande, ce n'est pas systématique....
Je chipotte un peu pour terminer mon programme, mais j'essaie d'anticiper au max les pertes de temps à venir lorsque ce sera opérationnel...!
Je met un petit fichier pour plus de clarté...
Merci
A plus
pnlop
 

Pièces jointes

  • tri auto.xlsx
    13.5 KB · Affichages: 65

pnlop

XLDnaute Occasionnel
Re : tri automatique...

Mouais....
Merci JCGL. Juste en passant, ce qui te semble évident l'est beaucoup moins pour moi!!!:p
En effet, j'ai quelque question sur ta ligne de code...
1) euh, tu écris
(celui des Bordures par exemple...)
, ben comme j'ai fais comme tu avais dit, j'en ai un morceau dans un module et l'autre dans la feuille en question...? Alors comme je savais pas, j'ai mis dans un nouveau module...
2) j'essaie de décortiquer ton code pour voir si j'ai bien appris mes leçons:
Feuil1.Range("A32:E65536").Sort
= "trier la plage A32:E65536"
Key1:=Range("B32"),
= "à partir de la deuxième colonne, cellule B32
Order1:=xlAscending
= "ordre de tri: croissant"
Header:=xlGuess
= "détermine tout seul qu'il y a une en-tête..."

Bref, j'ai mis le code suivant dans mon nouveau module mais ça bug... "la méthode sort de la classe Range a échoué" ...
Sub Tri()

With Sheets("visualisation")
.Range("A32:E65536").Sort Key1:=Range("B32"), Order1:=xlAscending, Header:=xlGuess
End With
End Sub
:confused:
 

JCGL

XLDnaute Barbatruc
Re : tri automatique...

Bonjour à tous,

Mise en place du code proposé sur ton fichier déposé en #1.
Entre ou modifie une donnée en A32 à E65536 et tu constatera que le tri se fait sur la colonne B en croissant sans les entêtes...

Pour TON message d'erreur : vérifie l'orthographe du nom de l'onglet et du nom porté dans le code.

A+ à tous
 

Pièces jointes

  • JC Tri Auto sur Change.xls
    41 KB · Affichages: 68

pnlop

XLDnaute Occasionnel
Re : tri automatique...

Re JCGL,
il y a un gros problème chez moi et j'espère que ce ne soit pas trop grave.......................
ton fichier: ça ne fonctionne pas, directement à l'ouverture, j'ai le msg Erreur Automation, L'objet invoqué s'est déconnecté de ces clients puis je met en route le débogeur et il part sur une autre erreur La méthode Sort de la classe Range a échoué...
J'ai essayé dans mon classeur... en plus des mêmes erreurs que dans ton fichier, il me trouve en plus des erreurs qu'il n'y avait pas avant, du style avec les Borders (alors que ça fonctionnait!)
HELP j'ai la trouille de tout perdre.....
C'est grave doc?


PS en plus: maintenant, il met une heure à fermer excel, suis obligée d'aller dans le gestionnaire des tâches...???
 

JCGL

XLDnaute Barbatruc
Re : tri automatique...

Bonjour à tous,

Désolé pour les désagréments...
Tu es sous XL 2010, peux-tu essayer le fichier joint qui comprend ces codes :

Dans le module de la feuille
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Call Tri_et_Bordures
End Sub

Dans un module standard
VB:
Option Explicit
Sub Tri_et_Bordures()
    Dim i As Long, Fin As Long    'Déclaration des variables
    Fin = ActiveWorkbook.Worksheets("Visualisation").Range("B" & Rows.Count).End(xlUp).Row    'Détermination de la dernière ligne


    With Application
        .ScreenUpdating = False    'Annule le rafraichissement
        .Calculation = xlCalculationManual    'Passe en calcul manuel
    End With


    With ActiveWorkbook.Worksheets("Visualisation")
        .Range("A32:E" & Fin + 100).Borders.LineStyle = xlNone    'Effacement des bordures
        For i = 32 To Fin    'De la ligne 32 à la fin de la plage
            .Range("A" & i & ":E" & i).Borders.LineStyle = xlContinuous    'Ajout des bordures
        Next i    'Cellule suivante
        With .Sort    'Tri
            .SortFields.Clear    ' Effacement des tris antérieurs
            .SortFields.Add Key:=Range("B31:B" & Fin), SortOn:=xlSortOnValues, Order:=xlAscending    ' Ajout du tri sur B en ordre croissant
            .SetRange Range("A31:E" & Fin)    'Déterminaton de la plage de tri
            .Header = xlYes    'Avec entêtes
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With


    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
End Sub

A + à tous
 

Pièces jointes

  • JC Tri Auto sur Change.xlsm
    26.7 KB · Affichages: 58

pnlop

XLDnaute Occasionnel
Re : tri automatique...

Bonjour le forum et JCGL,
J'ai testé ta nouvelle proposition: ça fonctionne et ça ne met plus de message d'erreur à tout bout de champs et excel semble refonctionner normalement.
MAIS: (comme d'hab!): cela fait tout de même bugger quelque part (j'arrive pas à savoir où car pas de message d'erreur et le code est rester partout le même sinon) car dans ma feuille récap oû viennent se coller ces fameuses lignes à quadriller et trier, tout d'un coup, ça lui prend de pas tout coller! c'est à dire qu'il ne va pas mettre les quantités pour les 3 premières lignes par exemple!
Pour tester, j'ai supprimer ton code que j'avais ajouter (dans le module et dans la feuille) et ça refonctionne comme il faut! Dona le problème vient bien de ce code..
Et peut-être aussi de ma version Excel 2010... qui semble très capricieuse..
Une autre idée??
A plus
 

JCGL

XLDnaute Barbatruc
Re : tri automatique...

Bonjour à tous,

Non le problème ne vient pas de mon code...
Le problème est du au mélange de nos deux codes qui doivent utiliser la même évènementielle.

Tu peux laisser le code du module. Il faut modifier le code de la feuille pour le mixer avec ton code.
Mais nous n'avons pas ton code...

A+ à tous
 

Discussions similaires

Statistiques des forums

Discussions
312 023
Messages
2 084 715
Membres
102 637
dernier inscrit
TOTO33000