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
|
Dim tmp1(), tmp2() As Variant
For compteur = LBound(Tbl_P, 2) To UBound(Tbl_P, 2)
'je détecte la ligne qui me pose problème
If (Tbl_P(2, compteur) = "Nom" Or Tbl_P(2, compteur) = "") then
'1ere partie du tableau tbl_P à extraire ligne "précédente"
ReDim tmp1(0 To 11, 0 To compteur - 1)
For i = 0 To 11
For k = 0 To compteur - 1
tmp1(i, k) = Tbl_P(i, k)
Next k
Next i
'2nd partie du tableau tbl_P à extraire ligne "suivante"
ReDim tmp2(0 To 11, compteur + 1 To UBound(Tbl_P, 2))
For i = 0 To 11
For k = compteur + 1 To UBound(Tbl_P, 2)
tmp2(i, k) = Tbl_P(i, k)
Next k
Next i
'efface le contenu de tbl_p pour être propre
Erase Tbl_P
'fusionne tmp1 et tmp2 pour obtenir tbl_P complet
ReDim Tbl_P(0 To 11, LBound(tmp1, 2) To UBound(tmp2, 2))
For i = 0 To 11
For k = LBound(tmp1, 2) To UBound(tmp2, 2)
If k <= UBound(tmp1, 2) Then Tbl_P(i, k) = tmp1(i, k) Else Tbl_P(i, k) = tmp2(i, k + 1) 'attention au k+1 je risque de lire quelque chose qui n'existe pas au dela de la dimension Ubound(tmp2,2)
Next k
Next i
'perte de mémoire: maintenant lors du retour dans la boucle if, le compteur+1 de mon tableau tbl_P devient compteur
et je ne pourrai plus tester cette valeur car compteur passera à compteur +1
exemple:
la ligne n°90 du tableau doit être supprimée donc compteur = 90
je récupère les valeurs de Tbl_P dans tmp1 de 0 à 89 les, idem pour tmp2 mais de 91 à ubound de tbl_P,
j'assemble tmp1 et tmp2 pour reformer tbl_P càd que la ligne 91 de tmp2 devient 90 pour tbl_P, la ligne 92 de tmp2 devient 91 pour tbl_P, etc.
dans ce cas 91 devient 90 et ne sera du coup pas traitée par la suite car compteur était à 90 dans la boucle if
end if |
Partager