XL 2016 Compter sans doublons

  • Initiateur de la discussion Initiateur de la discussion KTM
  • 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 !

KTM

XLDnaute Impliqué
Bonjour Cher Forum
Je voudrais compter dans ma base le nombre de références enregistrées sur l'année en excluant les doublons.
J'ai préparé une macro mais il se trouve qu'elle n'est pas parfaite.
Aidez moi à la réussir MERCI
VB:
Sub unique()
Dim un As New Collection
Dim ls As Integer
Dim ind As Integer
Dim annee As Integer
Dim cel As Range

With Sheets("Base")
annee = .[K1]
ls = .Range("A2").End(xlDown).Row
For Each cel In .Range("A3:A" & ls)
ind = Year(CDate(.Range("B" & cel.Row)))
If ind = annee Then
un.Add cel.Value, CStr(cel.Value)
End If
Next cel
.[K3].Value = un.Count
End With
End Sub
 

Pièces jointes

Bonjour @KTM,

Je t'avoue que je ne maitrise pas du tout les collections. Je n'ai jamais pris le temps pour essayer de les comprendre. Cependant, un message explicite est affiché suite au plantage sur la ligne
VB:
un.Add cel.Value, CStr(cel.Value)
J'ai rajouté une gestion d'erreur classique, vois si le résultat est bon
Code:
Option Explicit

Sub unique()
    Dim un As New Collection, ls As Integer, ind As Integer, annee As Integer, cel As Range
    Dim d As Object
    Set d = CreateObject("scripting.dictionary")
    With Sheets("Base")
        annee = .[K1]
        ls = .Range("A2").End(xlDown).Row
        For Each cel In .Range("A3:A" & ls)
            ind = Year(CDate(.Range("B" & cel.Row)))
            If ind = annee Then
                On Error Resume Next
                un.Add cel.Value, CStr(cel.Value)
                On Error GoTo 0
            End If
        Next cel
        .[K3].Value = un.Count
    End With
End Sub

Bonne journée.
 
Bonjour @KTM,

Je t'avoue que je ne maitrise pas du tout les collections. Je n'ai jamais pris le temps pour essayer de les comprendre. Cependant, un message explicite est affiché suite au plantage sur la ligne
VB:
un.Add cel.Value, CStr(cel.Value)
J'ai rajouté une gestion d'erreur classique, vois si le résultat est bon
Code:
Option Explicit

Sub unique()
    Dim un As New Collection, ls As Integer, ind As Integer, annee As Integer, cel As Range
    Dim d As Object
    Set d = CreateObject("scripting.dictionary")
    With Sheets("Base")
        annee = .[K1]
        ls = .Range("A2").End(xlDown).Row
        For Each cel In .Range("A3:A" & ls)
            ind = Year(CDate(.Range("B" & cel.Row)))
            If ind = annee Then
                On Error Resume Next
                un.Add cel.Value, CStr(cel.Value)
                On Error GoTo 0
            End If
        Next cel
        .[K3].Value = un.Count
    End With
End Sub

Bonne journée.
Merci Tout fonctionne.
Je peux donc poursuivre.
Encore Merci.
 
Bonjour KTM, cp4,

Juste pour signaler que le VBA n'est pas indispensable, avec ces formules matricielles en K3 et K4 :
Code:
=NB(LN(EQUIV(A$3:A$13&K$1;A$3:A$13&ANNEE(B$3:B$13);0)=LIGNE(A$3:A$13)-2))
Code:
=NB(LN(EQUIV(A$3:A$13&K$1&MOIS(K$2);A$3:A$13&ANNEE(B$3:B$13)&MOIS(B$3:B$13);0)=LIGNE(A$3:A$13)-2))
A+
 

Pièces jointes

Bonjour KTM, cp4,

Juste pour signaler que le VBA n'est pas indispensable, avec ces formules matricielles en K3 et K4 :
Code:
=NB(LN(EQUIV(A$3:A$13&K$1;A$3:A$13&ANNEE(B$3:B$13);0)=LIGNE(A$3:A$13)-2))
Code:
=NB(LN(EQUIV(A$3:A$13&K$1&MOIS(K$2);A$3:A$13&ANNEE(B$3:B$13)&MOIS(B$3:B$13);0)=LIGNE(A$3:A$13)-2))
A+
Merci Job75 cela pourra me servir.
Dans mon cas j'avais besoins du VBA. Je dois utiliser le résultat dans dans un userform
 
- 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
3
Affichages
569
Réponses
19
Affichages
783
Réponses
2
Affichages
410
Réponses
14
Affichages
1 K
Réponses
3
Affichages
852
Retour