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 :

VBA - déduplication multicritères


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Webmarketer
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmarketer

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Par défaut VBA - déduplication multicritères
    Bonjour à tous,

    Je suis débutant sous XL et souhaiterais demander conseil (comprendre la démarche plus que trouver une réponse toute faite).

    Je dois traiter très régulièrement des exports de mon outil de suivi ad-centric et dédupliquer mes contacts en fonction d'une "référence" (identifiant), d'une date et d'une heure.
    Jusque là, je traitais toujours à la mimine mais la tâche est redondante et c'est une perte de temps quand, j'en suis sûr, il existe des solutions pour automatiser ce travail sous excel (VB).

    J'ai simplifié mon fichier de base, il se présente comme suit (4 colonnes) : référence client, format, date de conversion, heure de conversion
    Le principe est d'identifier les doublons et de ne conserver, dans chaque doublon, que l'entrée la plus ancienne (ex : 17/03, 21/03, 22/03).
    Et donc supprimer les autres.
    Maintenant, il peut y avoir un 2 références identiques dans une même journée. Dans ce cas, c'est l'heure qui serait prise en compte.

    Dans le fichier test que j'ai joint à ce post, il y a 2 entrées doublonnées :
    -> les lignes 2/7 : l'entrée à conserver est donc la ligne 2 car le 17/03 pour les 2 entrées mais "12h05" pour la ligne 2, 17h05 pour la ligne 7
    -> les lignes 4/8 : l'entrée à conserver est la ligne 4 car elle date du 05/03 (contre 12/03 pour la ligne 8)


    test deduplication multicriteres.xlsx


    J'espère avoir été suffisamment explicite dans mon énoncé.
    Je vous remercie beaucoup pour la longue lecture et bien entendu pour l'aide que vous pourrez m'apporter !

    Bonne journée

    G

  2. #2
    Membre confirmé
    Homme Profil pro
    Apprenti GEII
    Inscrit en
    Janvier 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprenti GEII
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 83
    Par défaut
    Bonjour Gregobedo,

    En premier lieu, il te faut une variable tableau à partir de laquelle tu exploites ta feuille => Tab
    Tu traites les données.
    Tu remplaces le contenu de ta feuille par la variable Tab.

    => Au niveau du traitement, tu crées une boucle (n°1) sur les éléments de ton Tab:
    Tu extraits le numéro de client, puis la date et l'heure correspondante à l'occurence.
    Tu commences une boucle (n°2) qui ne prends en compte QUE les numéros de clients identiques à celui déjà trouvé
    Tu compares les deux dates, et si il faut les heures dès que tu trouves un ID identique
    Tu supprimes le maillon faible,décales les valeurs de ton tableau et continue ta boucle n°2
    Une fois ta boucle n°2 finie, il ne te reste QUE la ligne qui t'interesse pour un ID spécifique.
    Puis tu finis ta boucle n°1.

    A la fin, tu n'as qu'un tableau tout propre

    Si tu connais peu le VBA je peux te concocter un petit exemple qui marche sur ton fichier de démonstration,
    restera à l'adapter à ton fichier.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Webmarketer
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmarketer

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Par défaut
    Hello PierrotMfff,

    Merci, c'est exactement le style de réponse qu'il me fallait !

    Avec plaisir pour ta proposition, je ne connais pas suffisamment le vba pour créer ce module mais comme je souhaite m'y mettre sérieusement... je creuse.
    Avant de te solliciter, je vais essayer de le créer de mon côté et en posterai le code sur ce thread.
    Du coup, tu pourras me contreproposer ton exemple en correction (j'en aurai sûrement besoin )

    Encore merci et à très vite

    G

    PS : je ne ferme pas encore le fil du coup

  4. #4
    Membre confirmé
    Homme Profil pro
    Apprenti GEII
    Inscrit en
    Janvier 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprenti GEII
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 83
    Par défaut
    Re,

    ça fait plaisir de s'adresser à quelqu'un qui n'attend pas une réponse toute faite !

    Voici quelques éléments qui peuvent t'aider:

    Par rapport à l'environnement de codage:
    L'instruction Stop sert à interrompre le code, il est pratique pour le debugage, sinon tu cliques sur la colone
    de gauche pour mettre un point d'arrêt, qui permet aussi d'interrompre le code lorsque la ligne breakpointée est exécutée
    Les points d'arrêt ne fonctionnement pas pour les commentaires

    Pour Comprendre l'évolution du code tu peux cliquer sur F8 pour l'exécuter ligne par ligne, en passant ta souris sur les variables pour observer leur valeurs courrantes.
    En complément tu peux avoir la synthèse de tes variables et leur valeur courantes en cliquant sur Affichage > fenêtre variables locales.
    Par rapport à la programmation:
    Je ne peux que te recommander le tutoriel de SilkyRoad à propos des tableaux

    Si tu as une question spécifique demande la dans ce post.
    (En sachant que la partie tutoriels excel du site est bien garnie, ainsi que d'inombrables sujets "Résolus" )

    Une remarque aussi, ne te fie pas rigoureusement à ce que je t'ai conseillé comme manière de procéder, ça peut être une piste, mais surement il existe des méthodes plus efficaces/simples qui existent ! je suis moi même habitué, mais loin d'être pro d'excel...

    Bonne programmation

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Bonjour,

    une approche plus simple est de trier la liste par référence puis par date croissante puis par heure croissante.

    Une fois le tri effectué, il suffit d'une p'tite boucle remontant de la dernière ligne vers la troisième
    afin de supprimer une ligne si sa référence est égale à celle de la ligne précédente,
    le tout en à peine une dizaine de lignes de code …


    ____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  6. #6
    Membre confirmé
    Homme Profil pro
    Apprenti GEII
    Inscrit en
    Janvier 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprenti GEII
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 83
    Par défaut
    Oui je me suis rendu compte en essayant de faire un petit exemple que la gestion de boucle est beaucoup plus compliquée qu'elle n'en a l'air !
    Et oui cette méthode est plus efficace Marc-L !

    Exemple de tri de tableau dans le tuto de SilkyRoad:

    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
    Option Explicit
     
     
    Sub Tri_Tableau()
        Dim Valeur As Integer
        Dim i As Integer
        Dim Cible As Variant
        Dim Tableau() As Single
     
        'Remplissage tableau avec la plage de cellules A1:A10
        ReDim Tableau(0 To 9)
        For i = 0 To UBound(Tableau())
            Tableau(i) = Cells(i + 1, 1)
        Next i
     
     
        Do 'tri décroissant
            Valeur = 0
     
            For i = 0 To UBound(Tableau) - 1
                If Tableau(i) < Tableau(i + 1) Then
                    Cible = Tableau(i)
                    Tableau(i) = Tableau(i + 1)
                    Tableau(i + 1) = Cible
                    Valeur = 1
                End If
            Next i
        Loop While Valeur = 1
     
        'vérification du tri décroissant
        For i = 0 To UBound(Tableau)
            Debug.Print Tableau(i)
        Next i
     
     
        'Pour obtenir un ordre croissant, il suffit de boucler du dernier élément
        'du tableau, vers le premier.
     
        'For i = UBound(Tableau) To 0 Step -1
            'Debug.Print Tableau(i)
        'Next i

Discussions similaires

  1. Filtre multicritères Excel/VBA
    Par cydzeboss dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/12/2008, 11h43
  2. [SQL] Requête Multicritère Vba
    Par holoaccess dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/04/2007, 11h00
  3. [vba-e] Recherche multicritére
    Par deaqu1 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/04/2007, 10h28
  4. [VBA-E]suppression ligne d'après lisbox multicritère
    Par clairefranclieu dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/09/2006, 22h38
  5. [débutante] recherche multicritère vba
    Par Mimi64 dans le forum IHM
    Réponses: 7
    Dernier message: 01/08/2006, 09h57

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