(Problème) Classement par ordre croissant

koikili

XLDnaute Junior
Bonjour à tous,

sur l'exemple ci joint j'ai deux onglet Janvier-2016 et février-2016 qui contiennent des tableaux avec les codes de certaines personnes et leur noms.
ce que je souhaite avoir c'est un code VBA qui me permettra à chaque fois je clique sur l'onglet Data sans cliquer sur aucun bouton, tous les onglets nommés avec des Mois (CAD janvier-2016, Février-2016 et ceux que j'incrémenterai par la suite) se classent par ordre croissant en fonction de la colonne A qui contient les codes (à partir de A10).
(les autres onglets feuil1, feuil2, Data ne changent pas et restent comme ils sont)

Merci d'avance
 

Pièces jointes

  • Classement.xlsx
    10 KB · Affichages: 50
  • Classement.xlsx
    10 KB · Affichages: 35
Dernière modification par un modérateur:

jp14

XLDnaute Barbatruc
Re : Classement par ordre croissant

Bonjour

Correction du code

Si j'ai bien compris le problème, ci joint un code qui devrait répondre.

Code:
Option Explicit
Sub travde()
Dim Data1 As String, Ok As Boolean, i As Integer, Dl1 As Long
Dim Sh As Worksheet
    For Each Sh In Worksheets
        Ok = False
        For i = 1 To 12
            If InStr(UCase(Sh.Name), UCase(MonthName(i))) > 0 Then
                Ok = True
                Exit For
            End If
         Next i
         If Ok = True Then
             Dl1 = Worksheets((Sh.Name)).Range("a:c").SpecialCells(xlCellTypeLastCell).Row
            With ActiveWorkbook.Worksheets(Sh.Name).Sort
             .SortFields.Clear
            .SortFields.Add Key:=Range("A10:A" & Dl1), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange Range("A10:c" & Dl1)
            .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
            End If

    Next Sh
 End Sub
Attention à l'écriture des mois

Bonne soirée

JP
 
Dernière édition:

koikili

XLDnaute Junior
Re : Classement par ordre croissant

Bonjour JP,
je ne sais pas si vous avez bien compris ma demande je ne veux pas le faire avec un bouton mais juste en cliquant sur l'onglet DATA le clasement se fait automatiquement sur les onglets Janvier-2016 et Février-2016
le code n'a pas marché !!
 

jp14

XLDnaute Barbatruc
Re : Classement par ordre croissant

Bonsoir

Code à rajouter dans la feuille data
Effectivement le tri ne fonctionnait pas.

Code:
Private Sub Worksheet_Activate()
travde
End Sub

ou remplacer "travde" par son code.
Code:
Option Explicit
Private Sub Worksheet_Activate()
Dim Data1 As String, Ok As Boolean, i As Integer, Dl1 As Long
Dim Sh As Worksheet
    For Each Sh In Worksheets ' recherche des feuilles dont le nom est formé à partir des mois de l'année
        Ok = False
        For i = 1 To 12
            If InStr(UCase(Sh.Name), UCase(MonthName(i))) > 0 Then
                Ok = True
                Exit For
            End If
         Next i
         If Ok = True Then
                Dl1 = Worksheets((Sh.Name)).Range("a:c").SpecialCells(xlCellTypeLastCell).Row
        With ActiveWorkbook.Worksheets(Sh.Name).Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("A9:A" & Dl1), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("A9:c" & Dl1)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
            End If

    Next Sh
 

End Sub

Bonne soirée

JP
 
Dernière édition:

Chris401

XLDnaute Accro
Re : Classement par ordre croissant

Bonsoir

Essaye en plaçant ce code dans la feuille Data

Code:
Private Sub Worksheet_Activate()
For i = 4 To Sheets.Count
    Sheets(i).Range("A10:C1000").Sort Key1:=Sheets(i).Range("A10")
Next i
End Sub
Cordialement
Chris
 

JCGL

XLDnaute Barbatruc
Re : Classement par ordre croissant

Bonjour à tous,

Puis-je me permettre ?

Dans le ThisWorkBook
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim i&
    For i = 4 To Sheets.Count
        Sheets(i).Range("A10:C1000").Sort Key1:=Sheets(i).Range("A10")
    Next i
End Sub

A+ à tous
 

JCGL

XLDnaute Barbatruc
Re : (Résolu) Classement par ordre croissant

Bonjour à tous,

Il ne tient pas compte de la feuille Data.
Il s'active sur toutes les feuilles du classeur situées en position 4 et suivantes dans la limite du nombre de feuilles du classeur.
Si tu rajoutes des feuilles Mois, il faut les placer en dernier.

A+ à tous
 

koikili

XLDnaute Junior
Re : (Résolu) Classement par ordre croissant

re,
en mettant le code chris dans le fichier ci-joint ça me supprime des lignes de l'onglet donnée dont la ligne 54 je ne sais pas pourquoi ??
 

Pièces jointes

  • Facture 2.xlsm
    222.8 KB · Affichages: 32
  • Facture 2.xlsm
    222.8 KB · Affichages: 23

Chris401

XLDnaute Accro
Re : (Problème) Classement par ordre croissant

Bonjour

Tu as une feuille de plus avant celle des mois par rapport à ton 1er fichier.
La feuille Données est triée également.

Modifie :
For i = 4 To Sheets.Count
par
For i = 5 To Sheets.Count

Cordialement
Chris
 

Discussions similaires

Réponses
2
Affichages
121

Statistiques des forums

Discussions
312 333
Messages
2 087 371
Membres
103 528
dernier inscrit
maro