Suppression d une ligne dans un array

  • Initiateur de la discussion Initiateur de la discussion badbad
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

badbad

XLDnaute Junior
Bonjour a tous,
Je cherche à apprendre comment fonctionne les array, pour ce faire je tente de modifier un bout de code dont je me serre très souvent qui me permet de supprimer des lignes en doublons:

'Détermination du nombre de lignes a traiter
B1 = 0
For I = 2 To Range("A1").End(xlDown).Row + 1
B1 = B1 + 1
Next I
'------------------------------------------

'Lancement de la suppression des lignes
ligne_Fin = B1
I = 1
While I < ligne_Fin - 1 ' I représente la ligne de référence
J = I + 1
While J < ligne_Fin + 1 'J reprensete la ligne que j etudis en comparaison de I
If Cells(I, 1).Value = Cells(J, 1).Value Then 'En cas d égalité je supprime la ligne J
Rows(J).Select
Selection.Delete
J = J - 1 'la suppression de la ligne J m obliger a décrémenter la valeur J de 1 (fonction while)
ligne_Fin = ligne_Fin - 1 'la colonne a traiter a une ligne de moins en fin de traitement cela _
' Améliore les perfos pour les grands fichiers
End If
J = J + 1
Wend
I = I + 1
Wend

Donc si je cherche à mettre en place des array cela pourrait devenir :
B1 = 0
For I = 2 To Range("A1").End(xlDown).Row + 1
B1 = B1 + 1
Next I
'------------------------------------------

' Creation de mon vecteur avec mise en valeure
ReDim ArrayTest(B1)
For I = 1 To B1
ArrayTest(I) = Cells(I, 1).Value
Next I
'-----------------------------------------

'lancement de la supression des lignes
ligne_Fin = B1
I = 1
While I < ligne_Fin - 1 'I represente la ligne de reference
J = I + 1
While J < ligne_Fin + 1 'J reprensete la ligne que j etudis en comparaison de I
If ArrayTest(I) = ArrayTest(J) Then 'En cas d egalite je supprime la ligne J
Rows(J).Select
Selection.Delete
'C est ici que je dois supprimer une ligne de mon vecteru mais je ne sais pas commant faire?
ligne_Fin = ligne_Fin - 1 ' je dois ici redimensionner mon vecteur
End If
J = J + 1
Wend
I = I + 1

Mon problème se situ au milieu du code ou je cherche a supprimer une ligne dans mon array et à le redimensionner.
Comment est ce que je peux faire cela ?

Cordialement
Alexandre BESSY

PS : en pièce jointe un exemple tout bête avec trois boutons (un pour créer une liste à nettoyer, un pour la nettoyer avec mon ancienne méthode et un dernier qui ne marche pas avec mon array).
 

Pièces jointes

Re : Suppression d une ligne dans un array

Bonsoir,

Cette question me turlupinait depuis un moment et j'étais tenté de te répondre que ce n'était pas possible... Mais si en fait voici un exemple à placer dans un module standard (Placer des éléments dans les cellules A1:A10 d'une feuille et lancer la macro) :
Code:
Sub SupprEltTab()
[COLOR=Green] '***D'après une idée de Simboy sur http://www.vbfrance.com
'***Tabl représente un tableau de 10 éléments
'***Isupp représente l'index de l'élément à supprimer dans le tableau de variables Tabl
[/COLOR]
Dim Tabl() As Variant
Dim i As Integer, Isupp As Integer

[COLOR=DarkGreen] '***Chargement du tableau[/COLOR]
For i = 1 To 10
    ReDim Preserve Tabl(i)
    Tabl(i) = Cells(i, 1).Value
Next
[COLOR=DarkGreen]
'***Suppression de l'élément 5 du tableau[/COLOR]
Isupp = 5
For i = Isupp + 1 To UBound(Tabl)
    Tabl(i - 1) = Tabl(i)
Next

ReDim Preserve Tabl(UBound(Tabl) - 1)  [COLOR=Green] '***Cette instruction n'est pas indispensable mais plus propre[/COLOR]

[COLOR=DarkGreen] '***Inscription des éléments du tableau dans la feuille[/COLOR]
For i = 1 To 9
    Cells(i, 2).Value = Tabl(i)
Next

End Sub
Elle supprime le 5ème élément et renvoie un tableau de dimension 9 au lieu de 10.

Cordialement

Edit : Merci Pierrot. Salut Hervé. On peut bien sûr attribuer des bornes supérieures de toutes les boucles variables en fonction de la dimension du tableau comme le fait Hervé avec sa collection. C'est vrai que la collection est plus maniable mais le Monsieur demandait Tableau
😉
 
Dernière édition:
Re : Suppression d une ligne dans un array

Bonjour Badbad, Sptitnolan

bravo Spitnolan, belle trouvaille, effectivement ca peut servir, par contre attention le tableau commence par défaut avec le numéro 0, préciser "Option Base 1" en début de module pour commencer par le 1.

bonne journée
@+
 
Re : Suppression d une ligne dans un array

bonjour

une autre solution consiste à passer par une collection, bien plus maniable :

Code:
Dim data As New Collection
Dim i As Byte

'creation d'une collection contenant les chiffres 1 à 10
For i = 1 To 10
    data.Add i
Next i

'suppression de la "ligne" 5
data.Remove (5)

'renvoi des données
For i = 1 To data.Count
    Cells(i, 1) = data(i)
Next i

salut
 
Re : Suppression d une ligne dans un array

Merci a tous pour vos reponses, je vais tester tout cela de ce pas.
Au premier coup d oeil il semble effectivement que les collections soient tres efficaces, j ai peur que le fait de devoir re-loader l'array apres chaques suppression de lignes soit penalisant.

Je vais tester les deux methodes et comparer.

Encore merci pour votre aide.

Cordialement
Alexandre Bessy
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
270
Réponses
5
Affichages
703
Réponses
4
Affichages
580
Réponses
8
Affichages
647
Réponses
7
Affichages
360
Retour