Juste au cas où quelqu'un regarderait encore ceci ... J'ai créé cette fonction pour travailler sur un 1-D gamme, mais il va aussi écrire un plage de dimension supérieure à un tableau 1D; il ne devrait pas être trop difficile à modifier pour écrire une gamme de dimensions multiples dans un tableau de "même forme". Vous devez avoir une référence à scrrun.dll pour créer l'objet dictionnaire. Mise à l'échelle peut être un problème car un « pour chaque » boucle est utilisée, mais si vous utilisez ce EXCEL est rien probable que vous êtes sur le point inquiet:
Function RangeToArrUnique(rng As Range)
Dim d As Object, cl As Range
Set d = CreateObject("Scripting.Dictionary")
For Each cl In rng
d(cl.Value) = 1
Next cl
RangeToArrUnique = d.keys
End Function
Je l'ai testé ce de cette façon:
Dim dat as worksheet
set dat = sheets("Data")
roomArr = Array("OR01","OR02","OR03")
dat.UsedRange.AutoFilter field:=2, criteria1:=roomArr, operator:=xlFilterValues
fltArr = RangeToArrUnique(dat.UsedRange.SpecialCells(CellTypeVisible))
J'espère que ça aide quelqu'un!
Il n'existe pas de méthode intégrée pour cela. Vous pouvez copier vers un emplacement temporaire (tel qu'une feuille masquée) et de là transférer vers un tableau. –
Ah ok. Est-il possible d'obtenir le même résultat en utilisant uniquement du code et non des cellules sur une feuille de calcul masquée? C'est-à-dire, le résultat étant de trouver tous les enregistrements uniques dans la plage A1: A100 (éviter les valeurs en double) et les mettre dans un tableau. – phan