Se connecter avec
S'enregistrer | Connectez-vous

Aide macro excel pour fusionner doublons

Dernière réponse : dans Programmation

suite à une requête sur access, j'obtiens un tableau qui croise des données de deux tables, néanmoins j'obtiens des doublons.Gràce à votre forum j'ai pu dans un premier temps effacer les lignes qui contenaient les colonnes "F" "G" et "H" toutes vides.

Par contre j'obtiens encore par exemple :

nom/prenom/ vente a/ vente b/vente c
dupont/ marie/ 2/
dupont/ marie/ / 5 / /
dupont/ marie/ / / 1 /

Pourrais avec une macro compiler ces données pour obtenir

nom/prenom/vente a/vente b/vente c/
dupont/marie/ 2 /5 /1

Merci d'avance pour votre aide.
Lassé par la pub ? Créez un compte

Merci pour la rapidité de réponse je suis débutant en access mais je vais étudier la solution group BY, sinon juste au cas ou je poste ma macro même si elle doit etre horrible à voir lol merci encore

'Recherche de la dernière ligne de la colonne C
derli = Columns(3).Find("*", , , , , xlPrevious).Row
' boucle qui commence à la fin à cause des suppression de cellules
For i = derli To 2 Step -1
'Si la valeur de la cellule au dessus est égale à la valeur de la cellule (colonne C) alors
If Cells(i, 3) = Cells(i - 1, 3) Then
'on additionne les deux montants dans la cellule "F au-dessus"
Cells(i - 1, 6) = Cells(i - 1, 6) + Cells(i, 6)
Cells(i - 1, 7) = Cells(i - 1, 7) + Cells(i, 7)
Cells(i - 1, 8) = Cells(i - 1, 8) + Cells(i, 8)
'on supprime les cellules
Range(Cells(i, 1), Cells(i, 2), Cells(i, 3), Cells(i, 4), Cells(i, 5), Cells(i, 6), Cells(i, 7), Cells(i, 8)).Delete Shift:=xlUp
End If
Next
End Sub

désolé au temps pour moi
entre temps j'ai visité ton sujet pour ceux qui débutent en macro sous excel, et j'ai trouvé la raison de mon erreur qui se trouvai au niveau du range je te met le code et cette fois ci sous bon format .
je l'ai testée et elle a l'air de fonctionner

  1. 'Recherche de la dernière ligne de la colonne C
  2. derli = Columns(3).Find("*", , , , , xlPrevious).Row
  3. ' boucle qui commence à la fin à cause des suppression de cellules
  4. For i = derli To 2 Step -1
  5. 'Si la valeur de la cellule au dessus est égale à la valeur de la cellule (colonne C) alors
  6. If Cells(i, 3) = Cells(i - 1, 3) Then
  7. 'on additionne les deux montants dans la cellule "F au-dessus"
  8. Cells(i - 1, 6) = Cells(i - 1, 6) + Cells(i, 6)
  9. Cells(i - 1, 7) = Cells(i - 1, 7) + Cells(i, 7)
  10. Cells(i - 1, 8) = Cells(i - 1, 8) + Cells(i, 8)
  11. 'on supprime les cellules
  12. Range(Cells(i, 1), Cells(i, 9)).Delete Shift:=xlUp
  13. End If
  14. Next
  15. End Sub
Expert Programmation

Ah ! Ben ça fait plaisir de voir quelqu'un 1° qui lit les autres sujets et qui s'en sert, 2° qui accepte et qui adopte le règlement 3° qui teste et qui résout par lui-même ses problèmes.

Reste maintenant à voir si tu es de ceux qui acceptent la critique (objective) et qui en tirent les conséquences :

Cette macro VB traite a posteriori des problèmes que tu n'aurais pas eu en traitant a priori tes données. Que donne tes recherches sur la clause GROUP BY et son application à ton problème ?

Re ZEb, je n'ai pas encoe eu le temps de m'y pencher ma responsable étant venu me parler, mais pour ta critique, elle est trés pertinente, j'ai hate de voir ce que ca donnera avec group by, ca devrai me faciliter pas mal de choses effectivement.

Je m'y plonge et te tiens au courant.

merci encore bonne journée

Bonjour, n'ayant pas eu trop le temps de me plonger dans la requête "GROUP BY", je fais appel à vos services pour une dernière macro et mon fichier sera complet et je pourrais l'envoyer ma responsable.
Comme j'ai du croisé une troisième base de données avec les deux initiales.Lorsque je fusionne les lignes avec la macro posté précedemment, j'obtiens pour chaque nom 7 lignes didentiques suite à ma requête Access.
J'ai essayé d'appliquer une seconde macro pour supprimer les doublons suite à la fusion mais elle ne fonctionne pas.

  1. Dim l As Long
  2. For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
  3. If Cells(i, 4) = Cells(i - 1, 4) _
  4. Then Rows(i).Delete
  5. Next
  6. End Sub


merci d'avance
Lassé par la pub ? Créez un compte