[résolu]Script pour trier mon tableau

Al capone

XLDnaute Junior
Bonsoir à tous,

Je recherche un script VBA pour trier mon tableau. J'ai fouiné à droite et à gauche mais peu de gens mettent des commentaires dans leurs scripts pour expliquer. Et moi avec mon niveau de VBA, je suis largué....

Je souhaite trier mon tableau à partir de la 4ième ligne jusqu'à la dernière ligne qui est remplie. Ce tableau a 17 colonnes et je souhaite faire un tri sur deux critères :

En premier classer le tableau par rapport à la date en ordre croissant (la date se trouve dans la colonne 9)
Puis qu'il classe par rapport à l'heure en ordre croissant (l'heure se trouve dans la colonne 10.

De telle manière que je puisse avoir une chronologie. Ma feuille excell s'appelle "Convois".

Ce serait aussi sympas d'avoir quelques petits commentaires pour que je puisse capter la chose.

Merci beaucoup à ceux qui voudront m'aider. ce script doit être compatible avec un excell 2002 au minimum.
 
Dernière édition:

Al capone

XLDnaute Junior
Re : Script pour trier mon tableau

Salut,

Le problème est que lorsque je trie déjà en manuel par date puis par heure, il ne garde pas le premier classement fait par date...... et mon tableau devient du n'importe quoi ....

Et déjà en triant manuellement il me sort n'importe quoi pour la colonne date :

01/01/2009
01/01/2013
01/01/2025
11/11/1111
21/06/2011
29/06/2011
29/06/2012
 
Dernière édition:

Victor21

XLDnaute Barbatruc
Re : Script pour trier mon tableau

Bonsoir, Al capone, Kiseki, lézotres.

....Et déjà en triant manuellement il me sort n'importe quoi pour la colonne date :
Tes dates ne seraient-elles pas au format texte, par hasard ?
...lorsque je trie déjà en manuel par date puis par heure
Il faut faire un seul tri, avec 2 critères, et non pas deux tris (Le deuxième annihile le premier).
 

Al capone

XLDnaute Junior
Re : Script pour trier mon tableau

ReBonjour,

En fait, Ligne 1 à 3 j'ai mes intitulés de colonnes. Mes données commencent à la ligne 4. Les colonnes de A à Q.
Colonne date est I
Colonne heure est J
Même en ne sélectionnant manuellement que mes cellules de ma colonne date et en leur imposant un format date. Je lance un tri de A à Z et il me les classent comme mis + haut......

J'aimerais qu'il trie par date et heure croissant à partir de la 4ième ligne sachant comme dit juste au début la date et l'heure se trouve dans 2 cellules différentes. J'ai essayé le code :

Code:
ActiveCell.Select
            Range("I4", ActiveCell).Sort Key1:=Range("I4"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
            :=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
            DataOption2:=xlSortNormal
et il me classe comme mis dans mon message précédent...... Bon de + ce bout de code ne prend pas en compte les deux cellules ....

Merci pour votre aide
 

Al capone

XLDnaute Junior
Re : Script pour trier mon tableau

Voici le modèle de tableau que je teste. Y a pas grand chose mais celà me permet de mieux comprendre, c'est pour celà que certaines colonnes d'une même ligne sont vides
Le nombre de lignes à trier est aléatoire en fonction des saisies.
Mais il doit me classer toute une ligne par rapport à la date et l'heure.

Le script VBA doit pouvoir fonctionner sous excell 2002.

Merci.
 

Pièces jointes

  • testtri.xls
    29 KB · Affichages: 98
  • testtri.xls
    29 KB · Affichages: 101
  • testtri.xls
    29 KB · Affichages: 106

Victor21

XLDnaute Barbatruc
Re : Script pour trier mon tableau

Re,

J'ai supposé qu'au moins une ligne et une colonne était remplie.
Sub Tri()
Range("A5").CurrentRegion.Sort Key1:=Range("I5"), Key2:=Range("J5")
Range("A5").Select
End Sub
devrait suffire.
 

Pièces jointes

  • testtri.xls
    49 KB · Affichages: 97
  • testtri.xls
    49 KB · Affichages: 98
  • testtri.xls
    49 KB · Affichages: 100

Al capone

XLDnaute Junior
Re : Script pour trier mon tableau

Re,

Merci . Tu veux dire que tu suppose qu'une ligne est entièrement remplie et qu'il n'y a pas de cellule vide dans une ligne ?
Si c'est celà, malheureusement certaines cellules peuvent être vides. Par contre la date et l'heure et l'indice de la colonne G est obligatoire....

Heu la ligne 4 vide est obligatoire ?
 

Victor21

XLDnaute Barbatruc
Re : Script pour trier mon tableau

Re,

CurrentRegion prend toules les lignes et colonnes remplies adjacentes.
Si une colonne complète est vide, currentRegion s'arrêtera avant celle-ci, de même pour les lignes.
Heu la ligne 4 vide est obligatoire ?
A cause de ta cellule fusionnée (Pas bien...), oui dans ce cas, (Même explication que ci-dessus) mais tu peux la masquer totalement.
 

Al capone

XLDnaute Junior
Re : Script pour trier mon tableau

J'ai rajouté la ligne et j'ai fait + 1 pour chercher la première ligne de mon tableau.

Seulement je rencontre un autre petit soucis, comment intégrer ton code dans un userform ? Car là tu m'as fait un bouton mais j'aimerais que lorsque l'utilisateur a fini de remplir un userform et qu'il valide par le bouton, le tri se fasse automatiquement
 

Al capone

XLDnaute Junior
Re : Script pour trier mon tableau

C'est vrai j'en ai pas parlé car , pour moi, ce serait la suite logique.

Entre temps j'ai crée un petit userform qui permet d'alimenter mon tableau.
Désolé de pas l'avoir dit dès le départ, je te prie d'accepter mes excuses.

Je pensais intégrer ton code dans le bouton qui permet de valider et comme tu dois le deviner celà ne marche pas directement dans l'userform. Je pense qu'avant le end sub de mon bouton, on doit pouvoir appeler le module ....
 

Al capone

XLDnaute Junior
Re : Script pour trier mon tableau

Bonjour Victor21,

On peut appeler un module dans un userform ? juste avant la fin, une fois les données insérés dans le tableau ?:

Code:
Private Sub cmdAjouter_Click()

Dim numLigneVide As Integer
    Dim numLigneVideATE As Integer
    'On active la feuille "Gestion Missions"
    Worksheets("Gestion Missions").Activate
    'On trouve la dernière ligne vide du tableau et on enregistre le numéro de la ligne    dans la variable numLigneVide
    numLigneVide = ActiveSheet.Columns(7).Find("").Row
    'On vérifie que les champs obligatoires sont correctement remplis
    If txtada.Text = "" Then
        MsgBox "Veuillez donner un Indice Train Arrivée", vbCritical, "Saisie obligatoire"
        txtada.SetFocus
        Exit Sub
        ElseIf txtdar.Text = "" Then
        MsgBox "Veuillez saisir une date", vbCritical, "Saisie obligatoire"
        txtdar.SetFocus
        Exit Sub
    Else
        'On remplit les données dans notre tableau
        For y = 1 To 17
        ActiveSheet.Cells(numLigneVide, y).Borders.Weight = xlThin
        Next y
        'ActiveSheet.Cells(numLigneVide, 1).RowHeight = 24
                
        ActiveSheet.Cells(numLigneVide, 1) = txtdc.Text
        ActiveSheet.Cells(numLigneVide, 2) = txtori.Text
        ActiveSheet.Cells(numLigneVide, 3) = txtdes.Text
        ActiveSheet.Cells(numLigneVide, 4) = txtnw.Text
        ActiveSheet.Cells(numLigneVide, 5) = txtlg.Text
        ActiveSheet.Cells(numLigneVide, 6) = txtpd.Text
        ActiveSheet.Cells(numLigneVide, 7) = txtada.Text
        ActiveSheet.Cells(numLigneVide, 8) = txtvoie.Text
        ActiveSheet.Cells(numLigneVide, 9) = txtdar.Text
        ActiveSheet.Cells(numLigneVide, 10) = txthar.Text
        ActiveSheet.Cells(numLigneVide, 11) = txtmar.Text
        ActiveSheet.Cells(numLigneVide, 12) = txtdde.Text
        ActiveSheet.Cells(numLigneVide, 13) = txthde.Text
        ActiveSheet.Cells(numLigneVide, 14) = txtmd.Text
        ActiveSheet.Cells(numLigneVide, 15) = txtdda.Text
        If ouivt.Value = True Then
        ActiveSheet.Cells(numLigneVide, 16) = "VT"
        ActiveSheet.Cells(numLigneVide, 17) = txtobs.Text
        End If
        frmNouveau.Hide
 End if
End Sub

Merci pour ce que tu as déjà fait pour moi et encore désolé pour hier..... J'espère que tu voudras bien encore m'aider
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal