XL 2010 Supprimer ligne tableau 1 dimension

cp4

XLDnaute Barbatruc
Bonjour,

Je sèche sur un problème. Je me suis inspiré d'un exemple de Boisgontier pour supprimer d'un tableau 2 dimensions des lignes suivants une clé.
J'ai rectifié le code pour l'utiliser avec un tableau à une dimension. Cependant, le code plante si c'est le premier item qu'on souhaite supprimer.
Pour les autres le code fonctionne correctement. Auriez-vous une explication, une solution?
VB:
Option Explicit

Sub supLigne()
   Dim choix(), i As Integer, j As Integer, n As Integer, clé
   choix = [a1].CurrentRegion.Value
   clé = [e1]
   n = 0
   For i = LBound(choix) To UBound(choix)
      If choix(i, 1) <> clé Then n = n + 1
   Next i
   j = 0
   Dim T(): ReDim T(1 To n, 1 To 1)
   For i = LBound(choix) To UBound(choix)
      If choix(i, 1) <> clé Then j = j + 1
      T(j, 1) = choix(i, 1)
   Next i
   [c1].Resize(UBound(T)) = T
End Sub
1587813264669.png

En vous remerciant par avance.
 

Pièces jointes

  • Supprimer Ligne clé.xlsm
    16.1 KB · Affichages: 28

patricktoulon

XLDnaute Barbatruc
re
une dernière chose
quand on fait
choix = [a1].CurrentRegion.Value
et que l'on dimensionne d'autre tableaux avec les données de choix
pour les transférer sur B:B,C:C
on evite tout simplement l'utilisation de .currentregion
[B:B].ClearContents
[c3:c25].ClearContents
[B1].Resize(UBound(T) + 1) = Application.Transpose(T)
[C1].Resize(LBound(T) + 1, UBound(T) + 1) = T

d'autant plus que vous examinez que la colonne1 de choix

Apprenez a travailler proprement ;)

ps: il faudra aussi m'expliquer pourquoi on supprime le dernier item ici
ReDim Preserve T(UBound(T) - 1)
??????????
pour 10 lignes de code c'est une hécatombe ;)
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
@laurent950
il y a encore beaucoup de maladresse
je vois pas l’intérêt de dimensionner T(0) tu me comprends de travers d'autant plus que si tu decide de travailler en base 1 ben t'es chocolat :oops: ;)

la base est un range la A:A si j'ai bien compris
donc choix est en base 1
il n'est pas forcé d'utiliser "option base 1 pour avoir le Lbound(T) à 1
puisque vous utilisez redim preserve utilisez le preverve de tout a chaque tours ( 1 to x)

ET SURTOUT!!! par pitié précisez le parent du range

votre code revu

VB:
Option Explicit
Sub SupLigneBis()
    Dim choix As Variant, i%, j%, clé As Variant, x&, T() As Variant

    With ActiveSheet
        choix = .Range("A1", .Cells(Rows.Count, "A").End(xlUp)).Value

        clé = [e2].Value

        For i = LBound(choix) To UBound(choix)
            If choix(i, 1) <> clé Then
                x = x + 1: ReDim Preserve T(1 To x): T(x) = choix(i, 1)
            End If
        Next i

        .[B:B,c3:c25].ClearContents
        .[B1].Resize(UBound(T)) = Application.Transpose(T)
        .[C1].Resize(, UBound(T) ) = T
    End With
End Sub
 

cp4

XLDnaute Barbatruc
Messieurs, je vous assure que je ne m'attendais pas à autant d'engouements à mon fil.
Je vous suis à tous très reconnaissant. J'ai eu aussi de amples explications en message privé.

un grand merci à tous.
bonne soirée.
 

Discussions similaires

Réponses
11
Affichages
280
Réponses
7
Affichages
320

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi