Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.
 
Bonjour nannir

une syntaxe possible parmis d'autres :






renvoi en c1

salut
 
bonjour nanir et hervé

Il est vraie que c'est difficile de répondre sans pouvoir joindre de fichiers. Je ne sais pas ce qui c'est passé, Pourquoi cette situation?
Si quelqu'un peux m'expliquer, je suis preneur.

Enfiin essai ce code et adapte le
Sub deb()

For Each i In Selection

lettre = Left(i, 1)
If Left(i.Offset(1, 0), 1) = lettre Then
première = Right(i, Len(i) - 4)
deuxième = Right(i.Offset(1, 0), Len(i.Offset(1, 0)) - 4)
données = Val(première) + Val(deuxième)
i.Value = lettre & ' - ' & données
MsgBox i.Offset(1, 0).Rows
i.Offset(1, 0).Rows.EntireRow.Delete
Else
End If
Next
End Sub
 
C'est génial Hervé!

J'ai modifié la dernière ligne afin d'obtenir le renvoie sur la feuille 2 en A1. Ca me permet de vraiment voir la différence avec les deux tableaux,

Merci beaucoup pour ta rapidité et ton efficacité, ca me fais gagné un temps fou!

A+
 
bonjour à tous et toutes

ma version (du style de celle d'Hervé mais en plus rustique)

Code:
Option Explicit
Sub addition()
Dim m As Integer
Dim n As Integer
Dim ligne As Integer
Dim total As Integer
total = 0
ligne = 1
Dim col As Collection
Set col = New Collection
For n = 1 To Sheets('Feuil1').Range('A65536').End(xlUp).Row
On Error Resume Next
col.Add Sheets('Feuil1').Range('A' & n), CStr(Sheets('Feuil1').Range('A' & n))
On Error GoTo 0
Next n
For n = 1 To col.Count
 For m = 1 To Sheets('Feuil1').Range('A65536').End(xlUp).Row
   If Sheets('Feuil1').Range('A' & m) = col(n) Then
     total = total + Sheets('Feuil1').Range('B' & m)
   End If
 Next m
Sheets('Feuil1').Range('D' & ligne) = col(n)
Sheets('Feuil1').Range('E' & ligne) = total
total = 0
ligne = ligne + 1
Next n
End Sub

resultats en D et E
 
Merci à tous pour vos réponses.

Effectivement sans fichier exemple il est difficile de trouver une solution et je me rends compte que j'ai mal formulé mon problème même s'il y a un bon début.

En fait j'ai un tableau de A1:J1522

En A j'ai des matricules. Dans cette colonne je doit supprimer les doublons.
En J J'ai des montant que je dois additionner.
Mais entre A et J j'ai des infos qui ne doivent pas disparaitre (noms, prénoms...)

Pouvez vous m'aider,
Merci.
 
re

alors comme ceci, peut etre :




salut
 
re

toujours le meilleur Hervé

ma version quand même

Code:
Dim ligne As Integer
Dim total As Integer
total = 0
ligne = 1
Dim col As Collection
Set col = New Collection
For n = 1 To Sheets('Feuil1').Range('A65536').End(xlUp).Row
On Error Resume Next
col.Add Sheets('Feuil1').Range('A' & n), CStr(Sheets('Feuil1').Range('A' & n))
On Error GoTo 0
Next n
For n = 1 To col.Count
 For m = 1 To Sheets('Feuil1').Range('A65536').End(xlUp).Row
   If Sheets('Feuil1').Range('A' & m) = col(n) Then
     total = total + Sheets('Feuil1').Range('J' & m)
   End If
 Next m

Sheets('Feuil2').Range('A' & ligne) = col(n)
Sheets('Feuil2').Range('J' & ligne) = total
total = 0
ligne = ligne + 1
Next n
ligne = 1
For n = 1 To col.Count
   For m = 1 To Sheets('Feuil1').Range('A65536').End(xlUp).Row
   If Sheets('Feuil1').Range('A' & m) = col(n) Then
      Sheets('Feuil1').Range('B' & m & ':I' & m).Copy Destination:=Sheets('Feuil2').Range('B' & ligne & ':I' & ligne)
      ligne = ligne + 1
      Exit For
   End If
   Next m
Next n

End Sub
 
Re le fil,

Puis je vous demander un dernier petit service?

Pourriez vous me rajouter les commentaires avec vos codes?

En fait, j'aimerai comprendre et apprendre ce que vous avez fait. L'idéal serait qu'à therme j'arrive à le refaire seul, surtout si je dois adapter le code dans un autre tableaux.

J'ai franchement envie de progresser et votre traduction va pouvoir m'aider.

Amicalement,
 
re Nanir

en esperant etre comprehensible !!
(si souci ne pas hesiter à revenir)

Code:
Option Explicit
Sub addition()
Dim m As Integer
Dim n As Integer
Dim ligne As Integer
Dim total As Integer
total = 0
'initialisation de ligne (ou l'on ecrira)
ligne = 1
'création d'une collection
Dim col As Collection
Set col = New Collection
'une collection (avec une clé) est un tableau qui necomporte pas de doublons
For n = 1 To Sheets('Feuil1').Range('A65536').End(xlUp).Row
On Error Resume Next 'permet d'eviter le bug au moment ou la collection refuse le doublon
'la clé est habituellement contituée par Cstr(item)
col.Add Sheets('Feuil1').Range('A' & n), CStr(Sheets('Feuil1').Range('A' & n))
'le goto 0 réinitialise la gestion d'erreur !! INDISPENSABLE
On Error GoTo 0
Next n
'on exploite la collection
'pour chaque membre on cherche dans la colonne A et on totalise la valeur de la colonne B
For n = 1 To col.Count
 For m = 1 To Sheets('Feuil1').Range('A65536').End(xlUp).Row
   If Sheets('Feuil1').Range('A' & m) = col(n) Then
     total = total + Sheets('Feuil1').Range('J' & m)
   End If
 Next m
'apres examen de toute la colonne A on ecrit les resultats en feuil2
Sheets('Feuil2').Range('A' & ligne) = col(n)
Sheets('Feuil2').Range('J' & ligne) = total
'réinitialisation du total et increment de la ligne pour ecriture suivante
total = 0
ligne = ligne + 1
Next n
' on reprend les valeurs entre la colonne A et la colonne J
ligne = 1
' pour chaque valeur de la collection
For n = 1 To col.Count
'lecture de la colonne A
   For m = 1 To Sheets('Feuil1').Range('A65536').End(xlUp).Row
   'des que l'on trouve l'equivalence
   If Sheets('Feuil1').Range('A' & m) = col(n) Then
   'on copie en feuil2 on incremente la ligne et on sort
      Sheets('Feuil1').Range('B' & m & ':I' & m).Copy Destination:=Sheets('Feuil2').Range('B' & ligne & ':I' & ligne)
      ligne = ligne + 1
      Exit For
   End If
   Next m
Next n

End Sub
 
Pierrejean,

Juste pour info, j'ai modifié une ligne de ton code, car en l'état il y a une imcompatibilité de type.

Ce n'est pas ta faute mais plutot la mienne.
En effet dans mon exemple en colonne J j'ai donné des nombres entiers. Il s'agit en fait de nombres décimaux.

Du coup, et j'espère avoir bien fait (en tout cas ca fonctionne) :

Dim total As Integer
total = 0

devient

Dim total as variant

Nanir.
 
re Nanir

Bravo

tu es sur la bonne voie

puisqu'il s'agit de nombres tu pourrais utiliser

Dim total as Double

mais Variant convient egalement

en ce qui me concerne je vais essayer de piger le code de Hervé ( je suis a peu près sur d'y trouver des pepites !!!)
 
bonjour à vous deux

y'a pas beaucoup de pépites dans ce code pierrejean 🙂

quelques commentaires :




je reviens

salut
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…