Range.sort ne fonctionne par sur un fichier
Bonjour.
voici mon code.
Code:
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
Dim Lig1 As Integer
Dim Lig2 As Integer
Dim NbLig1 As Integer
Dim NbLig2 As Integer
Dim NbRef2 As Integer
Dim Trouve As Boolean
Dim Ref1 As String
Dim Ref2 As String
Dim WkBk As Workbook
Dim WkSh1 As Worksheet
Dim WkSh2 As Worksheet
Set WkBk = Workbooks(NomFic)
Set WkSh1 = WkBk.Sheets(1)
Set WkSh2 = WkBk.Sheets(2)
Lig1 = 2
Lig2 = 2
NbLig1 = WkSh1.Cells(Rows.Count, 1).End(xlUp).Row
WkSh2.Sort.SortFields.Clear
If WkSh2.FilterMode Then WkSh2.ShowAllData
NbLig2 = WkSh2.Cells(Rows.Count, 1).End(xlUp).Row
WkSh2.Sort.SortFields.Clear
WkSh2.Range("A1:F" & NbLig2).Sort WkSh2.Range("D1"), xlAscending, , , , , , xlYes
WkSh2.Activate
While Lig2 <= NbLig2
Lig1 = 2
Trouve = False
Ref2 = WkSh2.Range("d" & Lig2)
While Lig1 <= NbLig1 And Not Trouve
Application.StatusBar = Ref2 & " (" & Lig2 & ")"
Trouve = WkSh1.Range("a" & Lig1).Value = Ref2
Lig1 = Lig1 + 1
Wend
If not Trouve Then
MainWkSh.Range("b" & MainNbLig) = """" & Ref2 & """ n'est pas dans la feuille 1"
MainNbLig = MainNbLig + 1
End If
Lig2 = Lig2 + 1
While WkSh2.Range("d" & Lig2) = Ref2 And WkSh2.Range("d" & Lig2) <> ""
Lig2 = Lig2 + 1
Wend
Wend
Application.StatusBar = Null
Set WkSh1 = Nothing
Set WkSh2 = Nothing
Set WkBk = Nothing |
l'objectif est de parcourir la colonne D de la feuille 2 et de vérifier si je retrouve la valeur dans la colonne a de la feuille1
Comme j'ai beaucoup de doublons dans la feuille 2, j'ai mis une petite "optimisation" qui ne fonctionne que pour autant que j'ai appliqué mon tri.
Certaines variables sont globales, ce qui explique qu'on ne trouve pas leur déclaration dans le code.
Il fonctionne correctement sur tous mes fichiers sauf un sur lequel il n'enlève pas les filtres et n'effectue pas le tri.
Les fichiers sont tous de la même la même forme et un autre fichier du même auteur que celui qui me pose problème fonctionne très bien.
J'ai cherché partout et testé différentes choses, en vain.
Le seul moment où je parviens à faire fonctionner le code avec ce fichier, c'est lorsque j'introduis une pause et que je clique sur la feuille du fichier incriminé avant de relancer le traitement.
Quelqu'un aurait-il une idée du pourquoi du comment de la chose ?
Merci de votre aide