Recherche & référence UniqueSOLO

patricktoulon

XLDnaute Barbatruc
re
me revoilà avec la petite UniqueSOLO
dans la ligné de mes deux précédentes c'est une fonction de tri de doublons
mais cette fois ci elle ne récupère que les one shot c'est à dire uniquement ceux qui apparaissent qu'une seule fois
et pareil que pour la UNIQUEx on tri par la colonne 1 ou 2
en matricielle toujours et pareil vous avez la macroOptions descriptions
1644511394492.png


VB:
'***************************************************************************
'                 Collection fonction doublons                             *
' Fonction "UniqueSOLO"                                                    *
' filter les doublons d'une plage de deux colonnes par la colonne (1 ou 2) *
' récupere uniquement les valeurs qui n'existent q'une seule fois!!        *
' dans la plage et colonne désignée                                        *
' auteur :patricktoulon                                                    *
' date 09/02/2022                                                          *
' version 1.0                                                              *
'***************************************************************************

Option Explicit
Function UniqueSOLO(RNG As Range, Optional col& = 0)
    Dim T, dic1 As Object, dic2 As Object, I&, a&, t2, K, It, kx, itX, itx2, Col2: T = RNG.Value
    Set dic1 = CreateObject("Scripting.Dictionary"):    Set dic2 = CreateObject("Scripting.Dictionary")
    If col = 0 Then col = 1
    If col = 1 Then Col2 = 2 Else Col2 = 1
    T = RNG.Resize(RNG.Rows.Count, 2)
    For I = 1 To UBound(T): dic1(T(I, col)) = T(I, Col2): dic2(T(I, col)) = Val(dic2(T(I, col))) + 1: Next
    K = dic1.keys: It = dic1.items: kx = K: itX = It: itx2 = dic2.items
    If col = 2 Then kx = It: itX = K
    ReDim t2(1 To Application.Caller.Rows.Count, 1 To 2)
    For I = 1 To UBound(t2)
        t2(I, 1) = "": t2(I, 2) = ""
        If I <= UBound(kx) + 1 Then
            If itx2(I - 1) <= 1 Then a = a + 1: t2(a, 1) = kx(I - 1): t2(a, 2) = itX(I - 1)
        End If
    Next
    UniqueSOLO = t2
    Set dic1 = Nothing: Set dic2 = Nothing
End Function


Sub UnregisterOptions()
    On Error Resume Next
    Application.MacroOptions Macro:="UniqueSOLO", Description:=Empty, ArgumentDescriptions:=Empty, Category:=Empty
    On Error GoTo 0
End Sub

Sub registerOptions()
    Dim Funct_description As String, argumtsArray

    '(max 255 caracteres)
    Funct_description = "Fonction UniqueSOLO " & vbCrLf & _
                        "Filtre doublons dans une plage 1/2 colonnes par la colonne 1 ou 2" & vbCrLf & _
                        "récupere les valeurs qui n'apparaissent qu'une seule fois" & vbCrLf & vbCrLf & _
                        "Collection Fonctions Persos Créated By patricktoulon 02/2022"

    'Description des arguments de la fonction
    argumtsArray = Array("Adresse de la colonne à trier ", _
                         "index de la colonne à extraire les doublons ")


    'appel  la sub pour enregistrer
    Application.MacroOptions Macro:="UniqueSOLO", _
                             Description:=Mid(Funct_description, 1, 255), _
                             ArgumentDescriptions:=argumtsArray, _
                             Category:="personnalisée"
End Sub


'***************************************
'a mettre dans l'open si on veut la description  et le formulaire de fonction
Sub auto_open(): registerOptions: End Sub
Sub auto_close(): UnregisterOptions: End Sub
'***************************************
 

Pièces jointes

  • Fonction UniqueSOLO les OneShot.xlsm
    23.6 KB · Affichages: 12

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 837
dernier inscrit
Ugo