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 59 60 61 62 63 64 65 66 67
| Public Sub NettoyageLigneNegativesWithID1Neg()
Dim DonneesIn As Range 'Plage de recherche
Dim ID1NegCell As Range 'Plage appelante
Dim FiltreID1Neg As Range 'Filtre du tableau d'entrée avec l'ID1
Dim NumLigneNeg As Collection
Dim firstRow As Long
Dim TabTemporaire() As Variant
Dim TabTemporairePos() As Variant
Dim TabTemporaireNeg() As Variant
Dim NumLigneTemp As Variant
Dim LigneTemp As Range
Dim i As Long
Dim j As Long
Dim n As Long
i = 1
Set DonneesIn = DatasIn.Range("A1", Range("AN1").End(xlDown))
Set ID1NegCell = ID1Neg.Range("A" & i)
Set NumLigneNeg = New Collection
Do While Not (IsEmpty(ID1NegCell))
Set ID1NegCell = ID1Neg.Range("A" & i)
Set FiltreID1Neg = DonneesIn.Find(ID1NegCell.Value, DatasIn.Range("AN1"), xlValues, xlWhole, xlByRows, xlNext)
If Not FiltreID1Neg Is Nothing Then
firstRow = FiltreID1Neg.Row
Do
NumLigneNeg.Add (FiltreID1Neg.Row)
Set FiltreID1Neg = DonneesIn.FindNext(FiltreID1Neg)
Loop While Not FiltreID1Neg Is Nothing And FiltreID1Neg.Row <> firstRow
End If
j = 0
For Each NumLigneTemp In NumLigneNeg
'remplir un tableau temporaire contenant les lignes trouvées
'comparer les données du tableau comme un tri http://silkyroad.developpez.com/vba/tableaux/#LXIV-D
' - pour trouver lignes positive et negative
' - si ligne positive et négative s'annule on supprime les deux et on met en rouge ID1NegCell sinon on met en bleu
Set LigneTemp = DatasIn.Range("A" & NumLigneTemp & ":AM" & NumLigneTemp)
ReDim Preserve TabTemporaire(j)
TabTemporaire(j) = LigneTemp.Value
ReDim Preserve TabTemporaire(0 To 40, 0 To j) 'ca bug ici : l'indice n'appartient pas à la sélection
TabTemporaire(j, 40) = NumLigneTemp
j = j + 1
Next
Do While Not (IsEmpty(TabTemporaire))
If UBound(TabTemporaire) = 1 Then 'une seule ligne dans tableau on laisse la ligne dans DatasIn et on supprime dans TabTemporaire
ReDim TabTemporaire(1)
Else
For n = 0 To UBound(TabTemporaire)
If TabTemporaire(n)(1, 21) + TabTemporaire(n + 1)(1, 21) = 0 And TabTemporaire(n)(1, 26) + TabTemporaire(n + 1)(1, 28) = 0 And TabTemporaire(n)(1, 28) + TabTemporaire(n + 1)(1, 28) = 0 Then
'on supprime les éléments n et n+1 du tableau
End If
Next n
End If
Loop
Set FiltreID1Neg = DonneesIn.FindNext(FiltreID1Neg)
i = i + 1
Loop
Debug.Print "fin traitement lignes negatives"
End Sub |
Partager