Fusion/addition doublons

  • Initiateur de la discussion Initiateur de la discussion seblap47
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

seblap47

Guest
Bonjour

J'ai une feuille excel qui ressemble à ça avec au moins 500 lignes.

1.jpg

Comment à l'aide d'une macro obtenir ça dans une autre feuille ?

2.jpg

Merci
 

Pièces jointes

  • 1.jpg
    1.jpg
    16.8 KB · Affichages: 57
  • 1.jpg
    1.jpg
    16.8 KB · Affichages: 59
  • 2.jpg
    2.jpg
    11.2 KB · Affichages: 48
  • 2.jpg
    2.jpg
    11.2 KB · Affichages: 47
Re : Fusion/addition doublons

Bonjour,

Exemple

Code:
Sub SousTotal()
  a = Range("A2:D" & [a65000].End(xlUp).Row)
  Dim b(): ReDim b(1 To UBound(a), 1 To UBound(a, 2))
  i = 1: j = 0
  Do While i <= UBound(a)
    j = j + 1: b(j, 2) = a(i, 2): b(j, 3) = a(i, 3): b(j, 4) = a(i, 4)
    Do While a(i, 2) = b(j, 2)
      b(j, 1) = b(j, 1) + a(i, 1)
      i = i + 1: If i > UBound(a) Then Exit Do
    Loop
  Loop
 [K2].Resize(UBound(b), UBound(b, 2)) = b
End Sub

JB
 

Pièces jointes

Dernière édition:
Re : Fusion/addition doublons

Bonjour,

Effectivement avec des tableaux croisé dynamiques ça fonctionne.
Par contre pour plus de praticité, je préférerai des macros.
Le but ce n'est pas de générer un autre tableau mais de fusionner les doublons et d'additionner les valeurs de la colonne A dans le feuille active.

Merci

Sébastien
 
Re : Fusion/addition doublons

Bonsoir le forum, 🙂

Sur quelles colonnes se base t-on pour déterminer tes doublons ?
J'ai pris en compte les colonnes 2, 3 et 4
VB:
Sub Essai()
Dim a, i As Long, j As Long, txt As String, n As Long
    Application.ScreenUpdating = False
    a = Range("A1").CurrentRegion.Value
    With CreateObject("Scripting.Dictionary")
        .CompareMode = 1
        For i = 1 To UBound(a, 1)
            txt = Join$(Array(a(i, 2), a(i, 3), a(i, 4)), Chr(2))
            If Not .exists(txt) Then
                n = n + 1
                .Item(txt) = n
                For j = 1 To UBound(a, 2)
                    a(n, j) = a(i, j)
                Next
            Else
                a(.Item(txt), 1) = a(.Item(txt), 1) + a(i, 1)
            End If
        Next
    End With
    'restitution et mise en forme
    With Sheets(2).Cells(1)
        .CurrentRegion.Clear
        .Resize(n, UBound(a, 2)).Value = a
        With .CurrentRegion
            With .Rows(1)
                .Font.Bold = True
                .Interior.ColorIndex = 40
                .BorderAround Weight:=xlThin
            End With
            .Font.Name = "calibri"
            .VerticalAlignment = xlCenter
            .HorizontalAlignment = xlCenter
            .Borders(xlInsideVertical).Weight = xlThin
            .BorderAround Weight:=xlThin
            '.Columns.AutoFit
        End With
        .Parent.Activate
    End With
    Application.ScreenUpdating = True
End Sub
klin89
 

Pièces jointes

Re : Fusion/addition doublons

Bonsoir le forum, 🙂

Sur quelles colonnes se base t-on pour déterminer tes doublons ?
J'ai pris en compte les colonnes 2, 3 et 4
VB:
Sub Essai()
Dim a, i As Long, j As Long, txt As String, n As Long
    Application.ScreenUpdating = False
    a = Range("A1").CurrentRegion.Value
    With CreateObject("Scripting.Dictionary")
        .CompareMode = 1
        For i = 1 To UBound(a, 1)
            txt = Join$(Array(a(i, 2), a(i, 3), a(i, 4)), Chr(2))
            If Not .exists(txt) Then
                n = n + 1
                .Item(txt) = n
                For j = 1 To UBound(a, 2)
                    a(n, j) = a(i, j)
                Next
            Else
                a(.Item(txt), 1) = a(.Item(txt), 1) + a(i, 1)
            End If
        Next
    End With
    'restitution et mise en forme
    With Sheets(2).Cells(1)
        .CurrentRegion.Clear
        .Resize(n, UBound(a, 2)).Value = a
        With .CurrentRegion
            With .Rows(1)
                .Font.Bold = True
                .Interior.ColorIndex = 40
                .BorderAround Weight:=xlThin
            End With
            .Font.Name = "calibri"
            .VerticalAlignment = xlCenter
            .HorizontalAlignment = xlCenter
            .Borders(xlInsideVertical).Weight = xlThin
            .BorderAround Weight:=xlThin
            '.Columns.AutoFit
        End With
        .Parent.Activate
    End With
    Application.ScreenUpdating = True
End Sub
klin89

Bonsoir,

Merci ce code fonctionne parfaitement !
C'est bien les colonnes 2,3 et 4 qu"il faut prendre en compte.

Merci encore 🙂

Sébastien
 
Dernière modification par un modérateur:
Re : Fusion/addition doublons

Bonsoir à tous

seblap47[highlight] [Bienvenue sur le forum][/code]
Vous pouvez m'expliquer où est le problème ?
Je n'ai pas le droit de poster la même question sur plusieurs forum ?
Ce n'est pas un problème mais une question d'usage.
Multipostage — Wikipédia
Il est apprécié de savoir qu'une même question a été posée sur plusieurs forums (en le signalant par un lien hypertexe)
Cela a notamment l'avantage d'éviter la(les) situation(s) suivante(s):
Tu poses ta question sur plusieurs forums puis tu la postes sur XLD sans signaler tes autres posts.
Un XLDnaute tombe sur ta question et essaie d'y répondre (donc il passe du temps pour cela)
Puis il se rend compte que :
1) il poste une réponse similaire à une réponse déposée sur autre forum bien avant la sienne
(en gros, il a perdu son temps à répondre à une question qui a déjà sa réponse ailleurs)
2) il se rend compte que le demandeur ne suit plus son fil sur XLD parce qu'il a une réponse ailleurs et ne daigne pas venir le signaler sur XLD (car une question et sa solution intéresse potentiellement la communauté Excelienne et donc vaut d'être partagée avec tous)

J'espère avoir éclairer ta lanterne sur ce point 😉
 
Dernière édition:
Re : Fusion/addition doublons

Bonjour,

Il me semble que ma réponse au post #3 donnait le (bon) résultat

Code:
Sub SousTotalJB()
  Set champ = Range("A2:D" & [a65000].End(xlUp).Row)
  champ.Sort key1:=[b2]
  a = champ.Value
  Dim b(): ReDim b(1 To UBound(a), 1 To UBound(a, 2))
  i = 1: j = 0
  Do While i <= UBound(a)
    j = j + 1: b(j, 2) = a(i, 2): b(j, 3) = a(i, 3): b(j, 4) = a(i, 4)
    Do While a(i, 2) = b(j, 2)
      b(j, 1) = b(j, 1) + a(i, 1)
      i = i + 1: If i > UBound(a) Then Exit Do
    Loop
  Loop
  [A1:D1].Copy Sheets("feuil2").[f1]
  Sheets("feuil2").[f2].Resize(UBound(b), UBound(b, 2)) = b
End Sub

Autre solution avec Dictionary

Code:
Sub SousTotalJB()
  Set d1 = CreateObject("Scripting.Dictionary")
  a = Range("A2:D" & [a65000].End(xlUp).Row)
  For i = LBound(a) To UBound(a)
    d1(a(i, 2)) = ""
  Next i
  Dim b():  ReDim b(1 To d1.Count, 1 To UBound(a, 2))
  For ligne = LBound(a) To UBound(a)
     p = Application.Match(a(ligne, 2), d1.keys, 0)
     b(p, 1) = b(p, 1) + a(ligne, 1)
     For k = 2 To 4: b(p, k) = a(ligne, k): Next k
  Next ligne
  Sheets("feuil2").[f2].Resize(UBound(b), UBound(b, 2)) = b
  [A1:D1].Copy Sheets("feuil2").[f1]
End Sub


JB
 

Pièces jointes

Dernière édition:
Re : Fusion/addition doublons

Bonjour,

Il me semble que ma réponse au post #3 donnait le (bon) résultat

Code:
Sub SousTotalJB()
  a = Range("A2:D" & [a65000].End(xlUp).Row)
  Dim b(): ReDim b(1 To UBound(a), 1 To UBound(a, 2))
  i = 1: j = 0
  Do While i <= UBound(a)
    j = j + 1: b(j, 2) = a(i, 2): b(j, 3) = a(i, 3): b(j, 4) = a(i, 4)
    Do While a(i, 2) = b(j, 2)
      b(j, 1) = b(j, 1) + a(i, 1)
      i = i + 1: If i > UBound(a) Then Exit Do
    Loop
  Loop
  [A1:D1].Copy Sheets("feuil2").[f1]
  Sheets("feuil2").[f2].Resize(UBound(b), UBound(b, 2)) = b
End Sub


JB

Bonsoir,

Désolé pour le retard.
J'ai testé tout les codes et effectivement le votre fonctionne parfaitement.
Merci beaucoup, c'est parfait.

Sébastien
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
16
Affichages
478
  • Question Question
Microsoft 365 Mozaïque photos
Réponses
17
Affichages
519
Réponses
2
Affichages
158
Réponses
10
Affichages
472
Retour