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 :

Comparer deux listes et lister les manquants


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Par défaut Comparer deux listes et lister les manquants
    Bonjour ici !

    Je fais appel à vos compétences de génie pour résoudre une petite problématique sur laquelle je sèche depuis un moment.

    Petite explication :

    Je souhaite identifier quel magasin ne détient pas une référence.
    Vu la volumétrie des données (environ 500 ref possibles sur 10000 magasins), je ne peux pas passer par formule type nb.si.ens ou autre.
    J'ai écris un bout de code qui fonctionne..mais reste relativement lent (10 mns pour traitement de 300 ref sur 1200 magasins)
    Je pense avoir besoin d'utiliser les fonctions Array et/ou Dico sous VBA, mais..j'avoue un certain blocage ..d'où mon appel à l'aide
    Je ne souhaite pas utiliser Access, mes utilisateurs sont ..allergiques

    Je dispose des bases listant :
    • toutes les références (sans notion de magasin)
    • toutes les détentions magasin / référence
    • les caractéristiques d'un magasin


    En pièce jointe un exemple très light des sources et du résultat souhaité.

    Je suis preneuse de toute piste, idée..

    Merci pour votre aide, et un excellent week end à tous !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Où est le code entrepris ? Ça serait bien de le mettre dans le post et bien sûr entre les balises code, cf exemple dans ma signature
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Par défaut
    Je n'avais pas inséré ce bout de code, car pas du tout du tout opti, mais le voici

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    Sub EAN_ABSENT()
     
    Dim w1 As Worksheet, w2 As Worksheet, w3 As Worksheet
    Dim i As Long
     
    FichierSource = ThisWorkbook.Name
    Windows(FichierSource).Activate 'Nom du classeur
     
    Chrono1 = Timer
     
    Set w1 = Sheets("DV_VA") 'Liste EAN MAX
    Set w2 = Sheets("BI4_TGP") 'Extract BI4 Releve Magasin
    Set w3 = Sheets("Traitement") 'Sortie
    Set w4 = Sheets("TABLE_MAGASIN") 'Liste Magasin
     
    'Suppression des données dans la feuille traitement
    w3.Range("A2:AA500000").ClearContents
     
    NBMagasin = w4.Range("B4").Value
     
    For n = 6 To NBMagasin + 6 - 1
    MAGASIN = w4.Range("A" & n).Value
    ZONE = w4.Range("B" & n).Value
    REGION = w4.Range("C" & n).Value
    SECTEUR = w4.Range("D" & n).Value
    ENSEIGNE = w4.Range("G" & n).Value
    NOMENSEIGNE = w4.Range("H" & n).Value
    CODEPOSTAL = w4.Range("J" & n).Value
    VILLE = w4.Range("K" & n).Value
     
     
    For i = 2 To w1.Range("O500000").End(xlUp).Row ' faire toute la colonne C
        If Application.WorksheetFunction.CountIfs(w2.Range("C:C"), MAGASIN, w2.Range("M:M"), w1.Range("O" & i)) = 0 Then 'comparer si w2 et different de W1
                w1.Range("A" & i & ":O" & i).Copy Destination:=w3.Range("A500000").End(xlUp).Offset(1, 0) 'copier nouvelle entité de la w1 Different en w2 sur w3
                w3.Range("P65536").End(xlUp).Offset(1, 0) = "PICKING"
                w3.Range("Q65536").End(xlUp).Offset(1, 0) = MAGASIN
                w3.Range("R65536").End(xlUp).Offset(1, 0) = ZONE
                w3.Range("S65536").End(xlUp).Offset(1, 0) = REGION
                w3.Range("T65536").End(xlUp).Offset(1, 0) = SECTEUR
                w3.Range("U65536").End(xlUp).Offset(1, 0) = ENSEIGNE
                w3.Range("V65536").End(xlUp).Offset(1, 0) = NOMENSEIGNE
                w3.Range("W65536").End(xlUp).Offset(1, 0) = CODEPOSTAL
                w3.Range("X65536").End(xlUp).Offset(1, 0) = VILLE
        End If
    Next
     
    Next
     
    Chrono2 = Timer
     
    MsgBox "TERMINE"
    MsgBox Chrono2 - Chrono1 & "   secondes" ':)
     
    End Sub
    Merci

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    la feuille résultat est très répétitif au niveau des informations magasins,
    on peut considérer comme n° d'identification unique les réfs et le n° de magasins.

    je me demande si il ne pourrait pas y avoir mieux dans l'agencement des données afin que le traitement soit plus simple,
    car il faut traiter qd meme 500 réfs x 1000 magasins, donc si on peut éviter la répétition se serait déjà un plus …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Par défaut
    Je confirme, les deux seules infos core sont l'ID du magasin et le code de la ref manquante.
    Mais comme j'ai l'intention de monter quelques recaps sur cette feuille résultat, plutôt que de passer les infos complémentaires (et répétitives) après, par formule ou macro, j'ai opté pour un traitement massif...

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    comme tu le pressentais travailler sur feuille est très lent.
    Exemple avec des tableaux et un dictionary :
    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
    Sub absent()
        Dim mag, ref, ref_mag, dict, result()
        Dim lig As Long, col As Long, cptMag As Long, cptRef As Long, cptMagRef As Long
        Set dict = CreateObject("Scripting.Dictionary")
     
        mag = Sheets("MAGASIN").[A1].CurrentRegion.Value
        ref = Sheets("REF").[A1].CurrentRegion.Value
        ref_mag = Sheets("REF_MAG").[A1].CurrentRegion.Value
        For lig = 2 To UBound(ref_mag)
            dict(ref_mag(lig, 1) & "_" & ref_mag(lig, 2)) = 1
        Next lig
        ReDim result(1 To (UBound(mag) - 1) * (UBound(ref) - 1) - dict.Count, 1 To 6)
        For cptMag = 2 To UBound(mag)
            For cptRef = 2 To UBound(ref)
                If Not dict.exists(mag(cptMag, 1) & "_" & ref(cptRef, 1)) Then
                    cptMagRef = cptMagRef + 1
                    result(cptMagRef, 1) = mag(cptMag, 1)
                    For col = 2 To 4
                        result(cptMagRef, col) = mag(cptMag, col + 1)
                    Next col
                    result(cptMagRef, 5) = mag(cptMag, 2)
                    result(cptMagRef, 6) = ref(cptRef, 1)
                End If
            Next cptRef
        Next cptMag
        Sheets("RESULTAT").[A2].Resize(UBound(result, 1), UBound(result, 2)) = result
        Set dict = Nothing
    End Sub
    eric

Discussions similaires

  1. Comparer deux listes
    Par timtim2007 dans le forum Prolog
    Réponses: 7
    Dernier message: 07/06/2019, 09h02
  2. [XL-2010] Macro pour comparer deux listes et en extraire les lignes divergentes
    Par delpphil dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/02/2016, 11h55
  3. Requete pour comparer deux listes
    Par Jean-Christoph dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/04/2008, 13h29
  4. Comparer deux listes de listes
    Par julien80 dans le forum Prolog
    Réponses: 5
    Dernier message: 05/03/2008, 18h18
  5. [C# 2.0] Comparer deux listes
    Par Rodie dans le forum Windows Forms
    Réponses: 4
    Dernier message: 01/08/2006, 00h40

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