Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    Macro - Compter Doublons - Sans tenir compte des lignes masquées
    Bonjour tout le monde

    J'ai une macro qui me permet de compter les cellules en doublons sur la colonne B et j'aimerai que celle-ci fonctionne uniquement sur les lignes visibles.

    Pour l'instant voici mon code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For J = 1 To Range("B" & Rows.Count).End(xlUp).Row
    If Application.CountIf(Columns(2), Range("B" & J)) > 1 Then 
    MsgBox "ATTENTION ! PLUSIEURS N° IDENTIQUES ONT ÉTÉ DÉTECTÉS, VEUILLEZ METTRE A JOUR MANUELLEMENT LE FICHIER"
    End If
    Next


    J'ai essayé de trouver des solutions sur Internet mais ma recherche n'a pas abouti... et j'aimerai vraiment pouvoir réaliser cette fonction uniquement sur les cellules visibles
    Merci pour votre aide

  2. #2
    Expert confirmé
    Bonjour,

    Essayez ceci
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
         Dim Nb As Long, Lig As Long, i As Long
        Dim Tbl
        Nb = Range("B" & Rows.Count).End(xlUp).Row
        Set D1 = CreateObject("Scripting.Dictionary")
        Tbl = Range("B1:B" & Nb)
        For i = 1 To UBound(Tbl)
            If Rows(i).Hidden = False Then
                Lig = Lig + 1
                D1(Tbl(i, 1)) = ""
            End If
        Next i
        If D1.Count <> Lig Then MsgBox "ATTENTION ! PLUSIEURS N° IDENTIQUES ONT ÉTÉ DÉTECTÉS, VEUILLEZ METTRE A JOUR MANUELLEMENT LE FICHIER"
        Set D1 = Nothing


    Cdlt

  3. #3
    Futur Membre du Club
    Bonjour ARTURO83 et merci pour votre réponse

    Malheureusement, j'ai essayé votre code et cela me détecte quand même les doublons sur cellules masquées

    Je me demande si c'est possible à exécuter

  4. #4
    Expert confirmé
    Malheureusement, j'ai essayé votre code et cela me détecte quand même les doublons sur cellules masquées
    Ah bon!, voici le fichier en exemple, masquez les lignes de votre choix de telle manière que les cellules visibles soient uniques, vous ne devez pas obtenir le message


    Sinon, comment est fait votre fichier?

  5. #5
    Futur Membre du Club
    Autant pour moi...

    Tout fonctionne à merveille

    Pouvez-vous me dire en détails ce que fait votre macro ? Cela me permettra de mieux comprendre par la suite

    Merci encore pour aide et d'avoir partager vos connaissances

  6. #6
    Expert confirmé
    Dans la boucle, je compte les lignes visibles et avec l'aide d'un dictionnaire je crée un tableau dans lequel j'enregistre toutes les valeurs uniques trouvées et seulement si les lignes sont visibles.
    Si le nombre de lignes visibles trouvées est différent du nombre de valeurs enregistrées, alors c'est qu'il y a des doublons.

  7. #7
    Futur Membre du Club
    Merci pour ces explications ARTURO83

    J'ai juste remarqué que les cellules vides sont pris en compte, cela ne devrait pas me poser problème mais sait-on jamais... Est-il possible de ne pas tenir compte des cellules vides ?

  8. #8
    Expert confirmé
    Bonjour,

    J'ai juste remarqué que les cellules vides sont pris en compte, cela ne devrait pas me poser problème mais sait-on jamais... Est-il possible de ne pas tenir compte des cellules vides ?
    ceci:
    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
    Sub Verif()
        Dim Nb As Long, Lig As Long, i As Long
        Dim Tbl
        Nb = Range("B" & Rows.Count).End(xlUp).Row
        Set D1 = CreateObject("Scripting.Dictionary")
        Tbl = Range("B1:B" & Nb)
        For i = 1 To UBound(Tbl)
            If Rows(i).Hidden = False And Cells(i, "B") <> "" Then
                Lig = Lig + 1
                D1(Tbl(i, 1)) = ""
            End If
        Next i
        If D1.Count <> Lig Then MsgBox "ATTENTION ! PLUSIEURS N° IDENTIQUES ONT ÉTÉ DÉTECTÉS, VEUILLEZ METTRE A JOUR MANUELLEMENT LE FICHIER"
        Set D1 = Nothing
    End Sub



    Cdlt

  9. #9
    Futur Membre du Club
    Super J'essaye ça cet après-midi et je reviens vous dire

  10. #10
    Futur Membre du Club
    Bonjour,

    Désolé de répondre que maintenant mais je reviens juste pour vous dire que le code fonctionne parfaitement à l'usage

    Merci encore

###raw>template_hook.ano_emploi###