Bonjour,

je souhaiterai supprimer certaines "lignes" d'un tableau, puis décaler toutes les lignes suivantes à la ligne précédente qui vient d'être supprimée.
ce cas peut se présenter plusieurs fois dans mon tableau Tbl_P
Pour le moment je n'ai pas trouver plus simple pour assembler 2 tableaux ou fusionner (code ci-dessous).

Mon raisonnement:
-> je détecte la ligne qui me pose problème par le IF
-> je mets dans un 1er tableau tmp1 la partie de tbl_P jusqu'à la ligne qui me pose problème (càd de 0 to compteur-1)
-> je mets dans un 2nd tableau tmp2 l'autre partie de mon tbl_P jusqu'à son Ubound (càd de compteur + 1 à Ubound de tbl_P)
-> puis je fusionne tmp1 et tmp2 et c'est là que je rencontre une difficulté à fusionner voici mon code (je ne sais pas si je suis clair si il manque des éléments de compréhension je les apporte au fur et à mesure).

donc
1/ Est-ce qu'il faut se s'y prendre comme cela ?
2/ du coup cela m'amène un pb sous-jacent, càd je perds le traitement d'1 ligne de mon tableau tbl_P à chaque retour dans la boucle If => comment faire ?
Merci pour votre aide.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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