IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Macros et VBA Excel Discussion :

Macro - Compter Doublons - Sans tenir compte des lignes masquées


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut 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é
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    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
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    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é
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    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
    Pièce jointe 579457

    Sinon, comment est fait votre fichier?

  5. #5
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    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é
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    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
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    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é
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    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
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    Super J'essaye ça cet après-midi et je reviens vous dire

  10. #10
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    Bonjour,

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

    Merci encore

  11. #11
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    Bonjour le forum

    Je reviens sur ce sujet car je bloque sur un point...

    Le code d'ARTURO83 fonctionne parfaitement pour compter les doublons sans tenir compte des lignes masquées sur la colonne B

    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
    J'aimerai juste savoir si cela était possible de comparer les doublons avec la valeur d'une cellule par exemple "A4" et le code ci-dessus (colonne B sans ligne masquées)

    Merci !

  12. #12
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Voilà, seule la ligne qui suit le "For i = 1 To UBound(Tbl)" à été modifiée:
    Sub Verif_2()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        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") = Range("A4").Value 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

  13. #13
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    Bonjour ARTURO83

    Mille mercis pour ta réponse et ton code qui fonctionne parfaitement une fois de plus

    Je passe le sujet en résolu !

    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/12/2017, 08h47
  2. Réponses: 0
    Dernier message: 16/09/2015, 09h14
  3. Réponses: 7
    Dernier message: 08/06/2012, 17h24
  4. Réponses: 2
    Dernier message: 11/01/2007, 12h28
  5. Réponses: 1
    Dernier message: 17/08/2006, 21h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo