Gestion de doublons Excel 2010

Bonjour.

Existe-t-il, dans Excel 2010, une fonction ou une macro qui me permettrait, selon l'exemple du fichier joint :

- De filtrer les doublons de la colonne A de Feuil1 tout en cumulant les valeurs contenues dans la colonne B et de copier le résultat dans Feuil2

En espérant avoir été assez clair !

Merci de votre aide.

grandid88

Bonjour,

Pourquoi ne pas utiliser le tableau croisé dynamique ... en moins de 5 secondes ...

Bonjour,

si un code est nécessaire, résultat immédiat en combinant un filtre avancé et une simple formule :

Sub Demo()
    With Feuil2.Cells(1).CurrentRegion.Rows
        If .Count > 1 Then .Item("2:" & .Count).Clear
    End With

    Feuil1.Cells(1).CurrentRegion.Columns(1).AdvancedFilter xlFilterCopy, , Feuil2.Cells(1), True

    With Feuil2.Cells(1).CurrentRegion.Columns(2).Rows
        With .Item("2:" & .Count)
             .FormulaR1C1 = "=SUMIF(Feuil1!C[-1],RC[-1],Feuil1!C)"
                 .Formula = .Value
        End With
    End With
End Sub

Bonsoir,

Bonsoir James007,

Le rouge te va bien.

Solution tableau et construction TCD en VBA,

Cdlt.

Salut Jean-Eric

Merci pour ton gentil compliment...

Maintenant, je dois impérativement me hisser à la hauteur de cette nouvelle exigence...!!!

Merci grandid88 pour ton message …

grandid88 a écrit :

Sujet: Gestion de doublons Excel 2010

Bonjour.

Merci bcp pour ce code qui répond précisément à mes besoins.

Est-il possible de l'adapter à cet autre exemple (filtrage sur colonne B avec cumuls sur colonne C)

… mais pourquoi l'avoir posté en message privé ?!

Et joindre un classeur qui n'est pas l'exact reflet du besoin est vraiment faire preuve d'optimisme quant à ses compétences !

Pourtant ici il s'agit d'une simple formule SOMME.SI à la portée de tout grand débutant !

Une fois la formule entrée manuellement dans une cellule de la feuille résultat et fonctionnelle,

dans la fenêtre Exécution du VBE la convertir via ? activecell.formular1c1 pour la coller dans le code …

Sans modifier la formule, juste en décalant les colonnes dans la feuille résultat :

Sub Demo2()
    Feuil2.UsedRange.Clear
    Feuil1.Cells(1).CurrentRegion.Columns(2).AdvancedFilter xlFilterCopy, , Feuil2.Cells(2), True
    Feuil1.Cells(3).Copy Feuil2.Cells(3)

    With Feuil2.Cells(2).CurrentRegion.Columns(2).Rows
        With .Item("2:" & .Count)
             .FormulaR1C1 = "=SUMIF(Feuil1!C[-1],RC[-1],Feuil1!C)"
                 .Formula = .Value
        End With
    End With
End Sub

Répondre donc ici, pas en MP …

Merci une fois de plus à Marc L à qui je présente toute mes excuses pour mon message en MP et qui a parfaitement eu raison de pestiférer !!

Le résultat de Demo2() est parfait.

Que faut-il lui ajouter pour que le contenu des colonnes A, D, E et F s'affichent dans Feuill2 ?

Vu le classeur joint en MP, je pense là qu'il y a un problème de logique !

Mais afin que tout à chacun puisse suivre, merci de poster un classeur .xlsx sans macro

avec les données sources en feuille 1 et le résultat souhaité en feuille 2 …

Ci-joint le fichier .XLSX demandé !

Merci

Ce nouveau classeur a été harmonisé au niveau des dates mais du côté de la logique,

à quoi cela sert-il de cumuler un compte sur des quantités mais aussi sur des dates, des personnes ou des commentaires ?!

Quel est donc le but ?

Par exemple pour le compte 028450, dans la colonne QUI il y a FE, RB, DV, c'est quoi donc la logique du cumul ?

On en prend un au pif dans la liste ? … Quand il s'agit d'un cumul, à part des valeurs numériques …

Si tu as besoin de voir les infos, autant cumuler directement dans la feuille 1 dans des colonnes libres, non ?

Et là à la limite, il n'y a même plus besoin de code mais juste d'une formule …

Bonjour Marc L,

Je réponds précisément à tes questions :

Le classeur est le reflet d'un classeur utilisé dans mon travail (mais dont je ne peux pas montrer pour des raisons de confidentialité) qui contient exactement :

  • En colonne A : un numéro de contrat client
  • En colonne B : la raison sociale du client (ici le nom d'une couleur)
  • En colonne C : le nombre de machines chez le client
  • En colonne D : Les initiales de la dernière personne à avoir contacté le client (3 personnes possibles)
  • En colonne E : la date du dernier contact
  • En colonne F : un petit commentaire sur le contenu du dernier contact.

Dans le fichier initial, un client peut avoir plusieurs numéros de contrats différents et pour chacun de ces contrats, avoir un nombre de machines différent également. Lorsque qu'un client est contacté, on met à jour le tableau, POUR CHAQUE CONTRAT (donc sur toutes les lignes associées au client concerné) en entrant la date du dernier contact, les initiales de la personne qui a contacté et le commentaire.

On souhaite condenser ce tableau et en faire un nouveau qui afficherait de manière UNIQUE une ligne par client tout en cumulant le nombre de machines de ses contrats. Dans ce nouveau tableau, on ne souhaite plus tenir compte du numéro de contrat (colonne A) et donc ne plus l'afficher (on garde seulement le nom du client, le nombre total de machines, les initiales du contactant, la date du contact et le commentaire).

Voilà le détail précis de ce que l'on cherche à faire.

En espérant avoir suffisamment bien répondu à tes interrogations...

Et dire que cela aurait dû être la présentation initiale ‼

Pour l'extraction sans doublon, tu as déjà ce qu'il faut …

Pour les dernières infos, une simple recherche suffit :

voir l'aide VBA de la méthode Range.Find avec son paramètre SearchDirection à xlPrevious

Oserais user une dernière fois de ta bonté pour te demander Marc L le contenu final du code ?

Je prends peut-être un risque !

EN TOUT CAS : UN GRAND MERCI POUR TOUT !!

Le code serait simplifié en triant la feuille source, est-ce possible ?

OUI sans problème pour trier la feuille source !

Comme le tri classe les lignes depuis la date la plus récente,

une recherche normale est suffisante pour copier les données du dernier contact :

Sub Demo3()
    Dim Rg As Range
    Application.ScreenUpdating = False
    Feuil2.UsedRange.Clear

    With Feuil1.Cells(1).CurrentRegion
        Set Rg = .Columns(2)
        .Sort .Cells(5), xlDescending, Header:=xlYes
        Rg.AdvancedFilter xlFilterCopy, , Feuil2.Cells(2), True
        .Range("C1:F1").Copy Feuil2.Cells(3)
    End With

    With Feuil2.Cells(2).CurrentRegion.Rows
        With .Columns(2).Rows("2:" & .Count)
             .HorizontalAlignment = xlRight
                     .IndentLevel = 2
                    .NumberFormat = "#,##0"
                     .FormulaR1C1 = "=SUMIF(Feuil1!C[-1],RC[-1],Feuil1!C)"
                         .Formula = .Value
        End With

        For R& = 2 To .Count
            Rg.Find(.Cells(R, 1).Value).Offset(, 2).Resize(, 3).Copy .Cells(R, 3)
        Next
    End With

    Set Rg = Nothing
End Sub

Bonjour Marc L

Je te remercie infiniment pour cette solution et je reconnais ton talent que je suis loin d'avoir !!

Si d'aventure, on me demandait d'intégrer au résultat de la Feuill2 (je sens le coup venir, c'est pour çà !...) , la colonne A (qui contient les numéros de compte), que faudrait-il modifier dans le contenu du code ?

Soit copier le titre puis au niveau de la cellule renvoyée par la méthode Find copier aussi la donnée

soit revenir à un tableau croisé dynamique !

Bonjour Marc,

Peux-tu stp m'apporter des précisions sur la modif que tu m'as dit de faire (ou m'indiquer exactement les modifs)

"Soit copier le titre puis au niveau de la cellule renvoyée par la méthode Find copier aussi la donnée"

J'ai essayé pendant un bon moment hier et je n'y suis pas arrivé !

MERCI, MERCI, MERCI, MERCI, ...

Pour les titres, mettre à jour l'adresse de la source de la copie ou remplacer par la copie de la première ligne …

Pour la première colonne, verrouiller la cellule trouvée par l'instruction Find par un bloc With

puis ajouter la copie de la cellule de la première colonne par exemple …

Rechercher des sujets similaires à "gestion doublons 2010"