tri automatique en vba

patouman

XLDnaute Occasionnel
Bonjour a tous,

je souhaiterais créer un tri automatique en vba basé sur le résultat en colonne c dans un ordre décroissant
mais aussi en fonction de ce tri un classement numérique en col a

je vous joins mon fichier pour mieux comprendre

d'autre part étant nullissime en vba, si vous pouvez m'expliquer comment mettre en place le code
ce serait le top


Merci par avance

j'espère que vous pourrez m'aider


Patouman
 

Pièces jointes

  • VISITES.xls
    18 KB · Affichages: 79
  • VISITES.xls
    18 KB · Affichages: 85
  • VISITES.xls
    18 KB · Affichages: 88

JBARBE

XLDnaute Barbatruc
Re : tri automatique en vba

Bonsoir à tous,

Explication des macros :

cette macro est faite avec l'enregistreur de macro !!!! le plus simplement possible !


Code:
Option Explicit

Sub Macro1()
Dim i As Long
    Range("A1:G1").Select
    Selection.AutoFilter
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Add Key:=Range _
        ("C1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
   Selection.AutoFilter

Cette macro est une boucle i étant les lignes et 1 étant la colonne A

Code:
  For i = 2 To 65536
 If Cells(i, 1) = "" Then Exit For  'si la cellule est vide alors fin de la boucle
   Cells(i, 1).ClearContents        ' effacement du contenu présent dans la cellule
   If Cells(2, 1) = "" Then          ' si la cellule A2 est vide alors 1
   Cells(2, 1) = 1
   Else
   Cells(i, 1) = Cells(i - 1, 1) + 1 ' sinon ajout de 1 à la cellule compte tenu de la valeur de la cellule supérieur !
   End If                                 ' exemple 3 >>> 2 +1
  Next i                                  ' fin de la boucle
End Sub
 

Pièces jointes

  • VISITES.xls
    56.5 KB · Affichages: 49
  • VISITES.xls
    56.5 KB · Affichages: 56
  • VISITES.xls
    56.5 KB · Affichages: 55

JBARBE

XLDnaute Barbatruc
Re : tri automatique en vba

La variable i a été définie dans la même macro 1 suivante :

Code:
Option Explicit

Sub Macro1()
Dim i As Long    ' variable i définie
    Range("A1:G1").Select
    Selection.AutoFilter
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Add Key:=Range _
        ("C1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
   Selection.AutoFilter
    
  For i = 2 To 65536
 If Cells(i, 1) = "" Then Exit For
   Cells(i, 1).ClearContents
   If Cells(2, 1) = "" Then
   Cells(2, 1) = 1
   Else
   Cells(i, 1) = Cells(i - 1, 1) + 1
   End If
  Next i
End Sub

bonne soirée
 

Dranreb

XLDnaute Barbatruc
Re : tri automatique en vba

Bonsoir.
Essayez comme ça :
VB:
Sub Macro1()
With ActiveSheet.Range(ActiveSheet.[A2:G2], ActiveSheet.[A1].End(xlDown))
    .Sort Key1:=Range("C2"), Order1:=xlDescending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    With .Columns(1): .FormulaR1C1 = "=ROW()-1": .Value = .Value: End With: End With
End Sub
 

JBARBE

XLDnaute Barbatruc
Re : tri automatique en vba

Merci Dranreb
ça fonctionne très bien
et merci aux autres internautes pour votre aide

Ainsi tu comprends mieux la macro de Dranreb que la mienne ( certes moins élaborée) !

Quant aux autres internautes il n'y avait que JBARBE !

Mais passons, je souhaite que tu en sache plus sur Excel avec les liens que je t'ai fourni et, peut-être qu'un jour tu feras parti de ces internautes comme tu dit qui rendent service sur ce forum malgré de faible notion de macros ou de formules !
 

patouman

XLDnaute Occasionnel
Re : tri automatique en vba

JBARBE
Je suis désolé si je t'ai quelque peu offensé, mais ce n'était pas du tout mon but.

Oui c'est vrai la solution de Dranreb a fonctionné tout de suite, mais malheureusement le temps
m'est compté car ma demande est faite dans le cadre de ma profession et je ne dispose donc
pas assez de temps pour me consacrer à l'apprentissage d'Excel (à mon grand regret d'ailleurs).
Toutefois je conserve précieusement tes liens d'apprentissage que j'utiliserai chez moi, à mon rythme

Et j'ai bien noté JBARBE, ta promptitude à vouloir m'aider et t'en remercie encore


D'autre part, j'ai modifié légèrement le code de Dranreb pour l'utiliser sur un autre type de tableau
sensiblement identique, voici ci dessous le code comme je l'ai modifié :

Sub Macro1()
With ActiveSheet.Range(ActiveSheet.[A8:q8], ActiveSheet.[d8:d65])
.Sort Key1:=Range("d8"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
With .Columns(1): .FormulaR1C1 = "=ROW()-1": .Value = .Value: End With: End With
End Sub


Mon soucis est que j'aimerais que la zone de tri augmente ou diminue si j'ajoute ou supprime une ligne

est ce possible ?



merci
 

Dranreb

XLDnaute Barbatruc
Re : tri automatique en vba

Utilisez End(xlDown) dans une colonne à partir de la 1ère cellule suivie à coup sûr d'une cellule non vide s'il risque d'y avoir une autre ligne plus bas après une ligne vide, ou End(xlUp) en partant de la dernière ligne possible de la feuille.
 
Dernière édition:

patouman

XLDnaute Occasionnel
Re : tri automatique en vba

Il n'y auara pas de ligne vide,
le nombre de lignes peut varier de -10 a + 20 % en gros
et sous le tableau j'ai une ligne de calcul que je ne veux pas toucher

cela vous parait il explicite ou voulez vous que je vous joigne un fichier ?
 

Dranreb

XLDnaute Barbatruc
Re : tri automatique en vba

Si elle est collée au tableau utilisez Range(TouteLesColonnesDeLaLigneDeDépart, UneCelluleDeLaLigneDeTitres.End(xlDown).Offset(-1))
Ou bien, x étant la 1ère colonne de votre ligne de formules : Range(TouteLesColonnesDeLaLigneDeDépart, activesheet.[x65536].End(xlUp).Offset(-1))
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 361
Messages
2 087 626
Membres
103 609
dernier inscrit
AmineAB33