Suppression doublons et addition

  • Initiateur de la discussion Initiateur de la discussion Nanir
  • 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 !

Nanir

XLDnaute Occasionnel
Bonjour le forum,

Il y a beaucoup de fils au sujet des doublons et j'ai réussi à trouver assez rapidement un petit code les supprimer dans une colonne.

Seulement dans mon cas c'est un peu plus compliqué et je n'arrive pas à trouver mon bonheur malgré mes recherches.

Voici un exemple de ce que j'aimerai faire.

admettons :
Colonne A - Colonne B
a - 1000
a - 200
b - 2000
C - 1200
C - 300
D - 2100

J'aimerai obtenir :
Colonne A - Colonne B
a - 1200
b - 2000
C - 1500
D - 2100

On peut très bien avoir ce résultat via un tableau croisé dynamique seulement j'aimerai pouvoir le faire par VBA. Est ce possible?

Merci d'avance pour votre aide,
Cordialement.
 
re

la preuve qu'il n'y a pas de pépites pierrejean, y'a un bug (j, c'est la 10ème colonne, pas la 9ème)

code corrigé


Sub Bouton1_QuandClic()
Dim data As New Collection
Dim tablo
Dim tablores()
Dim c As Range
Dim i As Integer, j As Integer
Dim k As Byte
Dim plage1 As Range
Dim plage2 As Range

'crée une variable (plage1) objet(set) contenant la plage A1:a...
Set plage1 = Range('a1:a' & Range('a65536').End(xlUp).Row)
'crée une variable (plage2) objet(set) contenant la plage j1:a...
Set plage2 = Range('j1:j' & Range('j65536').End(xlUp).Row)
'stock dans un tableau variant l'ensemble des données
tablo = Range('a1:j' & Range('j65536').End(xlUp).Row)

'utilisation d'une collection pour extraire sans doublons

'on error resume next, annule les erreurs provoquées par des clées doublons
On Error Resume Next
'pour chaque cellule (c) de la plage1
For Each c In plage1
       
'ajoute (add) à la collection (data) l'item (c), et la clé (cstr(c))
        data.Add c,
CStr(c)
'cellule suivante
Next c
'réinitialise le gestionnaire d'erreur
On Error GoTo 0

'prépare un tableau dynamique (tablores)
'en le dimmensionnant pour x lignes (1 to data.count) et 9 colonnes (1 to 9)
ReDim tablores(1 To data.Count, 1 To 10)

'boucle sur chaque élément de la collection data
For i = 1 To data.Count
       
'remplit la premiere colonne de la ligne i de tablores avec
       
'l'element i de la collection (data(i))
        tablores(i, 1) = data(i)
       
'boucle sur chaque ligne du tableau de stock des données (tablo)
       
'de la ligne 1 jusqu'à la limite supérieur du tableau
       
For j = 1 To UBound(tablo)
               
'si la premiere colonne de la ligne i du tableau de stockage est
               
'egale à la valeur de la premiere colonne du tableau de resultat
               
'j'aurais pu faire aussi : if tablo(j,i)=data(i)
               
If tablo(j, 1) = tablores(i, 1) Then
                       
'boucle sur les 8 colonne du tablo de stockage
                       
For k = 2 To 9
                               
'et alimente les 8 colonnes du tableau de résultat
                                tablores(i, k) = tablo(j, k)
                       
Next k
               
End If
       
Next j
       
'ici c'est la somme
       
'j'utilise simplement la syntaxe vba de la formule somme.si
       
'somme.si(plage,critere,plageàsommer)
       
'somme.si(range('a1:ax),criteres,range('j1:jx')
       
'et je stocke le résultat dans la derniere colonne du tableau résultat
        tablores(i, 10) = Application.SumIf(plage1, data(i), plage2)
Next i
'renvoi en feuille 2 à partir de A1 le tableau de résultat
Sheets(2).Range('a1').Resize(UBound(tablores, 1), 10) = tablores
End Sub


salut
 
Merci pour tes explications Hervé.

Après avoir testé les 2 codes (qui donnent exactement le même résultat) et pour conclure, il s'avère que le code de Pierrejean est beaucoup plus lent à l'éxécution (attention Pierrejean ce n'est pas un reproche).

Je ne sais pas lequel je vais conservé pour mon application, la priorité est deja de comprendre le fonctionnement des deux codes.

Je m'aperçoit qu'en fait VBA c'est un peu comme l'anglais. C'est à dire qu'en faisant pleins de petites phrases simples on réussit à faire une phrase compliqué et à se faire comprendre même si c'est pas très beau.

Voila.
Je vous remercie encore une fois.
 
Re : Suppression doublons et addition

Bonjour à toutes et à tous,

Je viens de trouver le fil de Nannir sur le forum qui correspond à ce que je voudrais obtenir moi aussi (à savoir suppression de doublon et ajout des résultats).

Par contre, j'ai 1 petite question :
comment fait-on si notre critère de doublon porte sur 2 colonnes (ex : nom+prénom identique en colonne A et B) et résultats à additionner sur plusieurs mois (ex : colonne E à Z) sachant qu'entre la colonne C et D on garde nos informations ?

Merci pour vos réponses.
 
- 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

Discussions similaires

Réponses
2
Affichages
531
L
Réponses
2
Affichages
1 K
Laurent_7
L
D
Réponses
4
Affichages
1 K
G
Réponses
4
Affichages
1 K
Gregoryen
G
L
Réponses
1
Affichages
982
T
  • Question Question
Réponses
125
Affichages
14 K
T
Réponses
9
Affichages
1 K
T
R
Réponses
3
Affichages
4 K
R
S
Réponses
43
Affichages
5 K
Sonia2020
S
D
Réponses
2
Affichages
7 K
Delsaufa
D
Retour