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 recherche de doublons et priorisation


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Macro recherche de doublons et priorisation
    Bonjour,

    Je dois effectuer une macro sous Excel 2007 mais je ne sais absolument pas comment m'y prendre... Peut-être pourriez-vous m'aider.

    J'ai un tableau sous la forme suivante :

    Fournisseur / Site / conformité du site / Conformité du fournisseur

    Les 2 premieres colonnes contiennent les noms des fournisseurs d'une part et les noms de chacun de leur site d'autre part. Les 3e et 4e colonnes peuvent contenir (dans l'ordre d'importance) les mentions suivantes :

    - MD
    - ILL
    - LEG
    - DUR
    - CERT

    Si un fournisseur n'a qu'un seul site qui est par exemple MD, alors il sera MD, si le site est ILL alors le fournisseur sera ILL, ainsi de suite.

    Ma question concerne les fournisseurs qui ont plusieurs sites. SI un fournisseur a un site qui est MD et un 2e qui est DUR, alors le fournisseur sera MD. De même si le fournisseur a un 1er site qui est LEG et un 2e CERT alors le fournisseur est LEG.

    Comment une macro peut-elle me faire sortir ces informations ?? Je pense qu'il faut établir un ordre de priorité dans mes mentions comme MD>ILL>LEG>DUR>CERT, faire ressortir les doublons, ...

    Quelqu'un a-t-il une idée ?

    Merci d'avance,

    Roxydc

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Voici une solution qui utilise un dictionnaire afin d’obtenir une liste des fournisseurs sans doublons.
    Les conformités sont inscrites dans un tableau suivant leur ordre de priorité.
    Après traitement, le dictionnaire contient une liste composée du nom des fournisseurs et de la conformité site prioritaire qui leur est associée.
    Il ne reste plus qu’à inscrire cette conformité dans la cellule correspondant à chaque fournisseur dans la feuille.
    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
    Option Explicit
    Sub Test()
    Dim DerLig As Long
    Dim Fournisseurs, Tablo(), k, i
    Dim MaPlage As Range, Cel As Range, C As Range
    Dim n As Integer
    Dim firstAddress As String
        'Les conformités sont inscrites dans un tableau suivant leur ordre de priorité
        Tablo = Array("MD", "ILL", "LEG", "DUR", "CERT")
        Set Fournisseurs = CreateObject("Scripting.Dictionary")
        With Worksheets("Feuil1") 'Nom de feuille à adapter
            'Recherche du numéro de la dernière ligne renseignée dans la colonne A
            DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
            'Définition de la plage de données correspondant aux fournisseurs
            Set MaPlage = .Range("A2:A" & DerLig)
            ' On passe en revue chaque cellule de cette plage
            For Each Cel In MaPlage
                'Si le fournisseur n'a pas déjà été inscrit dans le dictionnaire
                If Not Fournisseurs.Exists(Cel.Value) Then
                    'On ajoute son nom ainsi que la conformité du site
                    Fournisseurs.Add Cel.Value, Cel.Offset(0, 2).Value
                Else
                    'sinon, le fournisseur étant inscrit dans le dictionnaire, on compare la conformité inscrite à _
                    celle correspondant à la cellule scrutée.
                    'Si le numéro d'ordre de la conformité inscrite est supérieur à celui de la cellule scrutée, _
                    on remplace la conformité inscrite par celle de la cellule scrutée.
                    If Application.Match(Cel.Offset(0, 2), Tablo, 0) < Application.Match(Fournisseurs.Item(UCase(Trim(Cel))), Tablo, 0) Then
                       Fournisseurs.Item(UCase(Trim(Cel))) = Cel.Offset(0, 2)
                    End If
                End If
            Next Cel
            'On dispose alors d'un dictionnaire renseigné avec le nom de chaque fournisseur et sa conformité prioritaire.
            'On passe en revue chaque fournisseur du dictionnaire, on recherche les correspondances dans la colonne A _
            et on note la conformité prioritaire correspondante.
            k = Fournisseurs.keys
            i = Fournisseurs.items
            For n = 0 To Fournisseurs.Count - 1
                Set C = MaPlage.Find(k(n), LookIn:=xlValues)
                If Not C Is Nothing Then
                    firstAddress = C.Address
                    Do
                        C.Offset(0, 3).Value = i(n)
                        Set C = MaPlage.FindNext(C)
                    Loop While Not C Is Nothing And C.Address <> firstAddress
                    Set C = Nothing
                End If
            Next n
            Set MaPlage = Nothing
        End With
        Set Fournisseurs = Nothing
    End Sub
    Cordialement.

Discussions similaires

  1. [XL-2013] Macro recherche doublon avec bouton
    Par leixy dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 03/08/2014, 14h51
  2. [Toutes versions] Demande de Modif sur macro recherche doublons
    Par Aladin_23 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 03/06/2014, 21h54
  3. [VBA] Algo de recherche de doublons
    Par guams dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/07/2004, 17h10
  4. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13
  5. Réponses: 2
    Dernier message: 19/08/2003, 18h04

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