IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

MarcelG

Suppression des doublons d'un tableau structuré, gestion d'un array

Noter ce billet
par , 09/11/2020 à 23h32 (1926 Affichages)
Bonsoir à tous,

La méthode RemoveDuplicates peut très bien s'affecter à un tableau structuré.

Nom : billet_remove_1_20201109.JPG
Affichages : 1435
Taille : 15,8 Ko

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Sub billet_remove()
Worksheets("mafeuille").ListObjects("T_monbotablo").Range.RemoveDuplicates Columns:=Array(1,4), Header:=xlYes
End Sub
Rien d'original si ce n'est que
- le paramètre Header doit être affecté de la valeur xlYes
- pour rappel, la méthode n'est pas sensible à la casse (majuscules = minuscules)

Mais, comme je l'ai reporté dans mon précédent billet (sur les filtres de tableau structuré), je n'aime paaaaaaaaaas le type de notation 1,4
1ère et 4ème colonnes, pour ce qui me concerne, ne veut pas dire grand chose.
Je préfère retourner la place du nom de champ (colonne) par sa propriété Index

A priori, je voulais créer un array à partir des champs souhaités, non de leur place.
Et intégrer cet array à une procédure générique.

De plus, l'array pourrait être de dimension variable.
On peut vouloir, en effet, supprimer les doublons sur un nombre de colonnes variable.
Or, le paramètre Columns de la méthode RemoveDuplicates accepte un array.
En résumé, on passe l'array, de dimension variable donc ParamArray, en paramètre de la procédure et elle est affectée au paramètre Columns.

Or:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Worksheets("mafeuille").ListObjects("T_monbotablo").Range.RemoveDuplicates Columns:=tabarray, Header:=xlYes
Je m'y suis pris à plusieurs fois mais, ainsi codée, cette méthode retourne une erreur

Nom : billet_remove_2_20201109.JPG
Affichages : 507
Taille : 21,2 Ko

En fait, VBA ne considère pas l'Array défini comme un Array
L'on doit donc évaluer cet Array soit en écrivant le nom de la méthode soit, en plus concis, (je ne suis pas fan)
Ce qui donne

Procédure d'appel

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Sub épure_doublons()

Call billet_remove("parent", "ville")

End Sub
Procédure paramétrée

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
Sub billet_remove(ParamArray listechamps() As Variant)

ReDim tabarray(0 To UBound(listechamps)) As Variant

Dim i As Long

With Worksheets("mafeuille").ListObjects("T_monbotablo")
      
        For i = 0 To UBound(tabarray)
               tabarray(i) = .ListColumns(listechamps(i)).Index
        Next i
         
        .Range.RemoveDuplicates Columns:=Evaluate(tabarray), Header:=xlYes

End With

End Sub
Par avance, je vous remercie pour vos précieuses remarques.

Bonne fin de soirée à tous.

Envoyer le billet « Suppression des doublons d'un tableau structuré, gestion d'un array » dans le blog Viadeo Envoyer le billet « Suppression des doublons d'un tableau structuré, gestion d'un array » dans le blog Twitter Envoyer le billet « Suppression des doublons d'un tableau structuré, gestion d'un array » dans le blog Google Envoyer le billet « Suppression des doublons d'un tableau structuré, gestion d'un array » dans le blog Facebook Envoyer le billet « Suppression des doublons d'un tableau structuré, gestion d'un array » dans le blog Digg Envoyer le billet « Suppression des doublons d'un tableau structuré, gestion d'un array » dans le blog Delicious Envoyer le billet « Suppression des doublons d'un tableau structuré, gestion d'un array » dans le blog MySpace Envoyer le billet « Suppression des doublons d'un tableau structuré, gestion d'un array » dans le blog Yahoo

Mis à jour 10/11/2020 à 19h20 par MarcelG

Catégories
Sans catégorie

Commentaires