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 Excel pour les doublons sur 3 mois glissants


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Macro Excel pour les doublons sur 3 mois glissants
    Bonjour, déjà merci beaucoup pour votre forum complet et très intéressant :

    Je suis tout novice en VBA, et j'ai un fichier à traiter;

    En effet, j'ai une base de données ou je veux identifier mes doublons sur mes adresses mail mais aussi sur le nom et prénom sur 3 mois glissants, et écrire dans une colonne ok si pas de doublons et doublons si doublons.

    Je ne vois absolument pas comment faire?

    Pouvez-vous m'aider svp ?

    Merci d'avance

    P.S : j'ai joint mon fichier en pièce jointe
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Ce lien peut t'aider:
    http://silkyroad.developpez.com/excel/doublons/#LIV-D

    Tu veux que la concaténation de l'adresse mail, nom et prénom soit unique?
    Qu'entends tu par trois mois glissants?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour, merci de votre réponse aussi rapide, je veux identifier les doublons sur les adresses mails, mais aussi identifier les doublons sur le nom et prénom (dans ce cas je peux rajouter une colonne dans mon fichier ou je concatene nom+prenom) en effet une personne peut s'inscrire plusieurs fois avec des mails différents afin de béneficier de la promo c'est pour cela que je ne veux pas qu'un doublon sur les adresses mails, et contrairement au lien que vous m'avez donné, je ne veux pas les compter mais juste rajouter dans une colonne "doublons" si il y a un doublons sinon "ok" s'il n'y en a pas.


    Ce que j'entends par trois mois glissants c'est à dire qu'a chaque mois je veux identifier les doublons sur les trois mois précedents c'est à dire si on est en mars je veux les doublons de janvier à mars, si je suis en juin je regarde à partir d'avril

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il peut y avoir deux personnes différentes avec le même nom et prénom couplé à une adresse mail différente.

    Tu veux ignorer ce cas?

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    a tu entendu parler de l'object "scripting dictionnary"(dictionnaire qui n'acepte pas les doublons)????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Si ce sont deux personnes différentes dans ce cas oui je ne le considere pas comme un doublon.

    Vu qu'en fait c'est pour attribuer des cheques cadeaux a nos panélistes, ils peuvent tres bien s'inscrire sous differentes adresses mails afin de pouvoir bénéficier plusieurs fois des cadeaux.

    Bonjour patricktoulon,

    Absolument pas, comme je l'ai précisé je suis vraiment tout novice sous Excel et encore plus sous VBA Excel, je suis désolé de mon niveau pitoyable

  7. #7
    Invité
    Invité(e)
    Par défaut
    Pour moi deux problèmes se posent avant la réalisation de la macro:

    1 - Comment traiter le cas où deux personnes ont le même nom et le même prénom
    2 - La personne peut mentir sur son nom et son prénom et utiliser une deuxième adresse mail

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    tiens voila une function sur mesure

    cette fonction tri les nom et prenon colonne a et b et les mail en c

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Option Base 1
    'trier les doublons dans une plage de cellules en prenant en compte plusieurs colonnes
     
    Sub test()
    tri_doublon_multicolonne Range("a1:c" & Range("a" & Rows.Count).End(xlUp).Row)
    End Sub
     
     
     
    Public Function tri_doublon_multicolonne(plage As Range)
        Dim dico, tablo, tablosd(), e, textrec As String
        Set dico = CreateObject("Scripting.Dictionary")
         tablo = plage.Value
        plage.Clear
        For i = 1 To UBound(tablo)    'boucle sur toute les ligne du tableau(tablo)
            textrec = ""
            For a = 1 To plage.Columns.Count - 1
            textrec = textrec & tablo(i, a)
            Next
                    If Not dico.Exists(textrec) Then dico(textrec) = i
        Next
        k = dico.keys
        i = dico.items
        For n = 0 To dico.Count - 1
            'MsgBox k(n) & ", " & i(n)
            e = e + 1
            ReDim Preserve tablosd(1 To dico.Count, 3)
            tablosd(e, 1) = tablo(i(n), 1)
            tablosd(e, 2) = tablo(i(n), 2)
            tablosd(e, 3) = tablo(i(n), 3)
        Next
        Cells(plage.Row, plage.Column).Resize(UBound(tablosd), 3) = tablosd
    End Function
    c'est bio la vie pas vrai??
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    @vcottineau : oui mais ce sont des panélistes qui sont enregistrés dans nos bases donc s'il a menti sur son nom et prénom, il ne sera pas un doublon mais il ne pourra aussi pas bénéficier de son cadeaux vu qu'on lui envoit par voie postale tu me suis?
    Ensuite la personne qui a le meme nom et prénom on va considérer que c'est un doublon.

    @patricktoulon : si j'ai bien compris le peu que j'ai compris, c'est une macro qui va juste trier mes doublons c'est cela? il me faudrait une macro qui identifie les doublons de manière à écrire dans une colonne le texte doublons si doublons et ok si pas de doublons.

    @patricktoulon : la j'ai executer ton code et cela me supprime mes doublons mais je ne veux pas que ca me supprime les champs email et nom + prénom de mes doublons...ou alors c'est moi qui fait encore n'importe quoi et je suis encore plus nul que ce que je pensais

    Mon probleme moi c'est que c'est pour mon chef et il extrait les fichiers par un programme et ca lui sort un format bien défini le mail est en colonne A, le nom colonne B et le prénom colonne C je te joins le fichier pour que tu vois de quoi il a l'air.
    Fichiers attachés Fichiers attachés

  10. #10
    Invité
    Invité(e)
    Par défaut
    J'ai adapté le code de patricktoulon:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Option Explicit
    Option Base 1
     
    Public Sub Test()
        Call Tri_Doublon_Multicolonne(Range("A2:c" & Range("a" & Rows.Count).End(xlUp).Row))
    End Sub
     
    'Trier les doublons dans une plage de cellules en prenant en compte plusieurs colonnes
    Public Sub Tri_Doublon_Multicolonne(plage As Range)
    Dim dico, tablo, textrec As String
    Dim i, j As Integer
     
        Set dico = CreateObject("Scripting.Dictionary")
        tablo = plage.Value
     
        For i = 1 To UBound(tablo)
            textrec = ""
            For j = 1 To plage.Columns.Count
                textrec = textrec & tablo(i, j)
            Next
            If Not dico.Exists(textrec) Then
                dico(textrec) = i + 1
            Else
                Cells(i + 1, 7) = "X"
                Cells(dico.Item(textrec), 7) = "X"
            End If
        Next
     
    End Sub
    Et le fichier Excel en PJ.

    Quelle est ta contrainte supplémentaire des '3 mois glissants'?
    Dernière modification par AlainTech ; 28/05/2013 à 21h39. Motif: Fusion de 2 messages

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    @vcottineau merci beaucoup mais la ta macro si je l'ai bien compris identifie les doublons mais n'inscrit pas dans une colonne le mot "doublons" si doublons et ok si pas de doublons dans la colonne doublons.

    Pour les 3 mois glissants, mon fichier commencant au mois de février, (la colonne moi gains avec le numéro signifie le mois) il faut que je regarde seulement les doublons sur 3 mois glissants c'est à dire de février à avril donc du mois 2 au mois 4, et ainsi de suite. il ne faut pas regarder par rapport à la colonne "date envoi" mais bien "mois gain 2013"

    Les cellules vides, pour les colonnes dont j'ai besoin elles sont toutes remplies il me semble, par exemple si une adresse mail apparait en fevrier 2013 mais aussi en decembre 2013 elle ne sera plus considéré comme un doublon

  12. #12
    Invité
    Invité(e)
    Par défaut
    Tu pourrais regarder un peu de ton côté pour l'affichage des mots. Tu as déjà 99% du travail réalisé. Tu ne connais pas du tout le langage VBA?

    En tout cas le nouveau code:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Option Explicit
    Option Base 1
     
    Public Sub Test()
        Call Tri_Doublon_Multicolonne(Range("A2:c" & Range("a" & Rows.Count).End(xlUp).Row))
    End Sub
     
    'Trier les doublons dans une plage de cellules en prenant en compte plusieurs colonnes
    Public Sub Tri_Doublon_Multicolonne(plage As Range)
    Dim dico, tablo, textrec As String
    Dim i, j As Integer
     
        Set dico = CreateObject("Scripting.Dictionary")
        tablo = plage.Value
     
        For i = 1 To UBound(tablo)
            textrec = ""
            For j = 1 To plage.Columns.Count
                textrec = textrec & tablo(i, j)
            Next
            If Not dico.Exists(textrec) Then
                dico(textrec) = i + 1
                Cells(i + 1, 7) = "OK"
            Else
                Cells(i + 1, 7) = "doublons"
                Cells(dico.Item(textrec), 7) = "doublons"
            End If
        Next
     
    End Sub
    En ce qui concerne les 3 mois glissants je peux m'en occuper mais pas tout de suite.
    Dernière modification par Invité ; 21/05/2013 à 14h52.

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Non je ne connais absolument pas le VBA j'ai fais du langage C, du SAS mais absolument jamais de VBA, mais vu que c'est mon BIG BOSS qui m'a donné ca, je ne peux pas trop parler, en tout cas merci beaucoup beaucoup!

    Pour les trois mois glissants aussi, je ne suis pas non plus à la minute!

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour

    bon allez un autre exemple avec la meme methode(dictionnaire)

    en colonne "A" tu les noms
    en colonne"B" tu a les prenoms
    en colonne "C" tu a les emails

    et on mettra les indices "ok" ou "doublons"en colonne "D"
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub test()
        tri_doublon_multicolonne Range("a1:c" & Range("a" & Rows.Count).End(xlUp).Row)
    End Sub
     
    Public Function tri_doublon_multicolonne(plage As Range)
        Dim dico, tablo, tablosd(), e, textrec As String
        Set dico = CreateObject("Scripting.Dictionary")
        tablo = plage.Value
        'plage.Clear
        For i = 1 To UBound(tablo)    'boucle sur toute les ligne du tableau(tablo)
            textrec = ""
            For a = 1 To plage.Columns.Count - 1
                textrec = textrec & tablo(i, a)
            Next
            If Not dico.Exists(textrec) Then
                dico(textrec) = i
     
                Sheets(1).Cells(i, 4) = "ok"
            Else
                Sheets(1).Cells(i, 4) = "doublons"
            End If
        Next
     
    End Function
    t'a compris ou je.....

    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Invité
    Invité(e)
    Par défaut
    Salut,

    Est-ce que tes données sont toujours triées par mois croissants?

  16. #16
    Invité
    Invité(e)
    Par défaut
    J'ai supposé que les mois sont triés par ordre croissant. J'ai aussi rajouté le traitement lorsque deux personnes ont le même nom et prénom.
    Tu peux alors utiliser le code suivant:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Option Explicit
    Option Base 1
     
    Public Sub Test()
        Call Tri_Doublon_Multicolonne(Range("A2:C" & Range("a" & Rows.Count).End(xlUp).Row))
    End Sub
     
    'Trier les doublons dans une plage de cellules en prenant en compte plusieurs colonnes
    Public Sub Tri_Doublon_Multicolonne(plage As Range)
    Dim dicDico, strTablo, strText1, strText2 As String
    Dim i, j, k As Integer
     
        Application.ScreenUpdating = False
     
        Set dicDico = CreateObject("Scripting.Dictionary")
        strTablo = plage.Value
     
        k = Cells(2, 5)
        For i = 1 To UBound(strTablo)
            'Création des chaines de recherche
            strText1 = ""
            strText2 = ""
            For j = 1 To plage.Columns.Count
                strText1 = strText1 & strTablo(i, j)
                If j > 1 Then strText2 = strText2 & strTablo(i, j)
            Next
            'Vérification que la chaine n'existe pas déjà
            If Not dicDico.Exists(strText1) And Not dicDico.Exists(strText2) Then
                dicDico(strText1) = i + 1
                dicDico(strText2) = i + 1
                Cells(i + 1, 7) = "OK"
            Else
                Cells(i + 1, 7) = "doublons"
                If dicDico.Exists(strText1) Then Cells(dicDico.Item(strText1), 7) = "doublons"
                If dicDico.Exists(strText2) Then Cells(dicDico.Item(strText2), 7) = "doublons"
            End If
            If Cells(i + 2, 5) > k + 2 Then
                k = k + 3
                Set dicDico = CreateObject("Scripting.Dictionary")
            End If
        Next
     
    End Sub
    Dernière modification par Invité ; 11/06/2013 à 10h21.

Discussions similaires

  1. [XL-2010] Macro récuperant des données pour les coller sur ppt => pb de maj des données excel
    Par raphdes dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/08/2014, 17h33
  2. [XL-2010] Macro Excel pour se positionner sur une valeur d'une liste déroulante
    Par benadry dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/09/2013, 12h57
  3. Requete pour un résultat sur 12 mois glissants
    Par Franck_P dans le forum Développement
    Réponses: 10
    Dernier message: 17/11/2009, 17h53
  4. Réponses: 5
    Dernier message: 23/05/2006, 14h08
  5. Aide sur les macros Excel pour recopie auto de données
    Par nicoduhavre dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/11/2005, 08h38

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