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 :

Fusionner et sommer des doublons


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Fusionner et sommer des doublons
    Bonjour,

    Je cherche à supprimer les doublons d’un tableau (non trié) en conservant pour chaque doublon un exemplaire et à sommer les valeurs d’une colonne leurs correspondant, le tout en VBA !

    Voici un exemple illustré de ce je cherche à faire :
    Dans le premier tableau ci-dessous, on y trouve les doublons DUPONT et MARTIN. La valeur des abonnements est toujours le même pour un vendeur donné. En revanche, la valeur des licences est différente pour un vendeur donné :
    Nom : doublons.PNG
Affichages : 953
Taille : 7,1 Ko

    Ce que je voudrais faire est de « fusionner » les lignes DUPONT (dans le même tableau), en conservant la valeur 25 dans abonnements mais en sommant les valeurs des licences lui correspondant. De la même manière pour MARTIN. On obtiendrait le tableau ci-dessous :
    Nom : doublons2.PNG
Affichages : 927
Taille : 3,9 Ko

    J’ai un code qui fonctionne si et seulement le tableau est classé par ordre alphabétique mais je ne souhaite pas le trier…
    Pouvez-vous m’aider, s’il vous plait ?

  2. #2
    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,

    conformément au règles de ce forum, poster le code balisé via l'icône dédiée # !

    Et pourquoi donc ne pas vouloir trier ? C'est la solution la plus simple et la plus rapide !


    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,
    J’ai un code qui fonctionne si et seulement le tableau est classé par ordre alphabétique mais je ne souhaite pas le trier…
    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
    Sub SousTotalNonTrié()
      Set d1 = CreateObject("Scripting.Dictionary")
      a = Range("A2:C" & [a65000].End(xlUp).Row)
      j = 0
      For i = LBound(a) To UBound(a)
         If Not d1.exists(a(i, 1)) Then j = j + 1: d1(a(i, 1)) = j
      Next i
      Dim b(): ReDim b(1 To d1.Count, 1 To UBound(a, 2))
      For ligne = LBound(a) To UBound(a)
        p = d1(a(ligne, 1))
        b(p, 2) = b(p, 2) + a(ligne, 2)
        b(p, 3) = a(ligne, 3)
        b(p, 1) = a(ligne, 1)
      Next ligne
      [E11].Resize(UBound(b), UBound(b, 2)) = b
    End Sub
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Total()
      Set d1 = CreateObject("Scripting.Dictionary")
      Set d2 = CreateObject("Scripting.Dictionary")
      For Each c In Range("a2", [a65000].End(xlUp))
        d1(c.Value) = d1(c.Value) + c.Offset(, 1)
        d2(c.Value) = c.Offset(, 2)
      Next c
      [e2].Resize(d1.Count, 1) = Application.Transpose(d1.keys)
      [f2].Resize(d1.Count, 1) = Application.Transpose(d1.items)
      [g2].Resize(d1.Count, 1) = Application.Transpose(d2.items)
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci pour cette réponse si rapide !

    Est-il possible de ne pas créer de deuxième tableau mais simplement fusionner dans le même tableau?

  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




    Effacer le contenu du tableau (propriété ClearContent) avant de copier le résultat …

    Sinon en triant la liste donc sans dictionnaire avec une simple variable tableau pas besoin d'effacer au préalable !


    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponses, j'ai décidé d'opter pour la solution de création d'un second tableau.

    Bonne journée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Fusionner des doublons dans plusieurs colonnes
    Par JambonBlanc01 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/10/2013, 09h44
  2. [XL-2010] Supprimer certains doublons et sommer des cellules
    Par tom.com dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/12/2012, 11h11
  3. Fusionner les cellules des doublons dans excel
    Par sihammaster dans le forum VB.NET
    Réponses: 8
    Dernier message: 10/05/2010, 11h28
  4. Effacer des doublons
    Par ben53 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/07/2004, 17h56
  5. Réponses: 2
    Dernier message: 07/07/2004, 17h44

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