Bonjour,
N'étant pas un doué du code VBA, j'ai fais réaliser un code pour trier des commandes.
Le principe c'est qu'à partir d'un fichier de commandes, le code applique plusieurs filtres et tris pour arriver au résultat voulu.
Le problème auquel je me heurte est le suivant : j'ai deux lignes de code qui ne donnent pas le même résultat en fonction de certains paramètres (normal, me direz-vous
). Et bien, la question que je me pose c'est quelle est la différence entre ces deux codes pour que je comprenne l'erreur dans le résultat attendu. Voici les deux lignes de codes avec pour chaque ligne les deux versions : si quelqu'un pouvait m'expliquer la différence qu'il y a entre les deux versions de chaque ligne, ce serait très sympa.
VERSION 1
Ligne1
feuille_2.Range(Cells(ligne_deb_tri, 1), Cells(ligne_fin_tri, 14)).Select
Ligne2
feuille_2.Sort.SortFields.Add Key:=Range(Cells(ligne_deb_tri, 4), Cells(ligne_fin_tri, 4)), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
VERSION 2
Ligne1
feuille_2.Range(Cells(2, 1), Cells(ligne_fin_tri, 30)).Select
Ligne2
feuille_2.Sort.SortFields.Add Key:=Range(Cells(2, 4), Cells(ligne_fin_tri, 4)), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
Petite explication quand même :
avec la version2, le tri des lignes s'effectue au bon endroit (à la suite de lignes déjà triées) mais une colonne (ajoutée à l'aide d'un autre code n'est pas triée)
avec la version 1, le tri des lignes n'est pas effectué mais la colonne qui est ajoutée à l'aide d'un autre code est bien triée
Je mets le code VERSION2 pour visualiser la place des lignes dans ce dernier :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| 'calcul de la première ligne à trier
dern_ligne_2 = feuille_2.Range("A" & Rows.Count).End(xlUp).Row
ligne_deb_tri = dern_ligne_2 + 1
'copie des lignes restantes vers nouvelle feuille
For i = 2 To dern_ligne_1
If feuille_1.Cells(i, 15) = "" Then
feuille_1.Select
Rows(i).Select
Selection.Copy
dern_ligne_2 = feuille_2.Range("A" & Rows.Count).End(xlUp).Row
feuille_2.Select
Cells(dern_ligne_2 + 1, 1).Select
ActiveSheet.Paste
End If
Next i
'calcul de la dernière ligne à trier
dern_ligne_2 = feuille_2.Range("A" & Rows.Count).End(xlUp).Row
ligne_fin_tri = dern_ligne_2
'tri des lignes restantes selon la "référence vendeur" = colonne "D" par ordre décroissant :
'msgbox "Tri de l" & ligne_deb_tri & " à l" & ligne_fin_tri 'dev
feuille_2.Range(Cells(2, 1), Cells(ligne_fin_tri, 30)).Select
Application.CutCopyMode = False
feuille_2.Sort.SortFields.Clear
feuille_2.Sort.SortFields.Add Key:=Range(Cells(2, 4), Cells(ligne_fin_tri, 4)), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With feuille_2.Sort
.SetRange Range(Cells(2, 1), Cells(2, 14))
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With |
Il doit y avoir un truc, mais je ne vois pas car je ne connais pas les fonctions.
PS : je n'arrive plus à joindre la personne qui m'a réalisé le travail.
Merci d'avance pour votre aide.
Partager