Vérification_tri de liste VBA

Résolu/Fermé
dubol - 2 nov. 2011 à 10:08
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 3 nov. 2011 à 13:52
Bonjour,

Ma plage de données s'étend de A6 à S20
Les 3 colonnes A,B,C sont normalement triées par d'ordre croissant.


En VBA, j'aimerai avec une condition (if), vérifier si le tri à bien été fait.

si ce n'est pas le cas : afficher un message qui invite à faire le tri.

Voila mon début:
        If "colonnes triées" ordre croissant = A,B,C Then
            'Si oui, afficher le message suivant à l'écran
            MsgBox ("Trier la liste")
            'Si oui, fin de la macro
            GoTo FIN
        End If




Je ne sais pas du tout comment commencer :S

Merci de votre aide

3 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
Modifié par Patrice33740 le 2/11/2011 à 10:39
Ne serait-il pas plus simple de faire le tri directement avec la macro ?
0
C'est impossible ?
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
Modifié par eriiic le 3/11/2011 à 08:44
Bonjour,

Patrice t'a répondu ici.
eric
0
Vraiment je vois pas ! je dois être bigleux !

Ce sont les Suggestions ?
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
3 nov. 2011 à 10:20
Déjà le 'ici' est en bleu, c'est donc un lien cliquable...
Patrice a répondu en commentaire de ton post, sa réponse est donc juste en dessous de ton post.
C'est vrai que les choix faits par les administrateur du site ont plutôt tendance à perdre tout le monde...

Et oui, ça ne sert à rien de perdre du temps à contrôler si le tri est fait pour demander à le faire faire par l'utilisateur.
Tu le fais d'office, au pire avec une demande de confirmation avant.

eric
0
Oui j'avais vu pour le lien cliquable, sauf qu'il m'ouvre la même page que celle-ci sans la réponse de Patrice, Bref.

Je ne veux pas que le tri soit fait par macro, mais justement qu'il soit vérifier et avertir de son inexistence
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
Modifié par eriiic le 3/11/2011 à 10:34
Avant de passer du temps là dessus tu pourrais justifier de l'interet de procéder ainsi plutôt que de demander à l'utilisateur s'il veut que la macro fasse le tri ?
Et tu dois être convaincant... ;-)

eric
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
3 nov. 2011 à 13:42
Bonjour tout le monde,

Je rejoinds, bien évidemment, les collègues, bénévoles acharnés de ce site, qui te suggèrent, à juste titre, de trier et point barre. En effet, ton code VBA se résume alors à une seule ligne.
Pour l'exemple :
Sub Tri()
Range("A1:S20").Sort Key1:=Range("A1" ), Order1:=xlAscending, Key2:=Range("B1" ), Order2:=xlAscending, Key3:=Range("C1" ), Order3:=xlAscending
End Sub

Tu peux tout à fait demander à l'utilisateur si c'est nécessaire de trier.
Pour l'exemple :
Sub DemandeSiTri()
Dim Reponse As Integer
Reponse = MsgBox("Voulez-vous trier ?", vbYesNo + vbQuestion, "Pijaku")
If Reponse = vbYes Then
    Range("A1:S20").Sort Key1:=Range("A1" ), Order1:=xlAscending, Key2:=Range("B1" ), Order2:=xlAscending, Key3:=Range("C1" ), Order3:=xlAscending
End If
End Sub

Sinon, tu peux aussi boucler sur chaque donnée contenue dans tes trois premières colonnes et tester si elle est "supérieure" à celle contenue dans la cellule située en dessous...
Pour l'exemple :
Sub TestSitri()
Dim Tablo() As String
Dim Lig As Long, DrLig As Long
Dim j As Byte
Dim Reponse As Integer

With Sheets(1) 'A ADPATER!!!
    For j = 1 To 3
        DrLig = .Columns(j).Find("*", , , , xlByColumns, xlPrevious).Row
        ReDim Tablo(DrLig - 1)
        For Lig = 1 To DrLig
            Tablo(Lig - 1) = Cells(Lig, j)
        Next Lig

        For Lig = 0 To UBound(Tablo) - 1
            If Tablo(Lig) > Tablo(Lig + 1) Then
                Reponse = MsgBox("Voulez-vous trier ?", vbYesNo + vbQuestion, "Pijaku")
                If Reponse = vbYes Then
                    .Range("A1:S20").Sort Key1:=.Range("A1" ), Order1:=xlAscending, Key2:=.Range("B1" ), Order2:=xlAscending, Key3:=.Range("C1" ), Order3:=xlAscending
                End If
                Exit For
            End If
        Next Lig
    Next j
End With
End Sub

Tu vois, tout est possible, mais les demandes d'explications de mes collègues bénévoles sont ici fort bien justifiées.
N'est-il pas?

PS : il s'avère que par pure fainéantise de ma part, je n'ai pas testé ces codes... Je pense que cela doit fonctionner mais j'émets toutefois des réserves sur la partie "tri" de ces différents codes VBA.
De toutes façons : à adapter...
-1
Merci !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
3 nov. 2011 à 13:52
Mais de rien!
Je penses qu'aujourd'hui tu as eu ... dubol!
Bonne journée à toutes et à tous.
0