rassembler les doublons

an@s

XLDnaute Occasionnel
Bonjour à tous,

dans l'exemple ci-joint un code dans la feuille RECAP qui permet en premier lieu d'importer les informations de chaque feuille en commençant par 210 et les mettre dans le tableau de la feuille RECAP.

le 2ème rôle de ce code consiste à mettre jour le tableau de la feuille Synthèse en se basant sur celui de la feuille RECAP...

le code fonctionne bien mais j'aimerai faire une petite modification en faisant ceci :

en cliquant sur la feuille Synthèse je veux que le code rassemble les lignes dont les cellules de la colonne C sont les mêmes en une seule ligne, et les valeurs des colonnes E jusqu'à M sera la somme des lignes rassemblées.
exemple (lignes 11 & 12, 13 & 15, 10 & 17, 18-19-20-21-22-23)

NB: je n'ai pas de problème de ne plus avoir les formules dans le tableau de la feuilel synthèse et d'avoir juste des valeurs

Merci d'avance pour votre assistance
 

Pièces jointes

  • client.xlsm
    336.3 KB · Affichages: 54
Dernière édition:

Bebere

XLDnaute Barbatruc
bonsoir
an une proposition
Code:
Sub Rassemble()    'outils,références cocher microsoft scripting runtime
    Dim tbl(), a(), d As New Dictionary, i As Long, j As Long, c As Byte, item As Variant
    tbl = Feuil2.Range("C10:M23")    'synthèse
    For i = 1 To UBound(tbl)
        Set d(tbl(i, 1)) = tbl(i, 1)
        For c = 2 To UBound(tbl, 2)
            If tbl(i, c) = "" Then tbl(i, c) = 0
        Next
    Next
    ReDim Preserve a(1 To d.Count, 1 To 11)
    For Each item In d.Items
        j = j + 1: a(j, 1) = item
        For c = 2 To UBound(a, 2)
            a(j, c) = 0
        Next
    Next
    For j = 1 To UBound(a)
        For i = 1 To UBound(tbl)
            If tbl(i, 1) = a(j, 1) Then
                For c = 2 To UBound(tbl, 2)
                    a(j, c) = a(j, c) + tbl(i, c)
                Next
            End If
        Next
    Next

    Feuil2.Range("C30").Resize(UBound(a, 1), UBound(a, 2)) = a
   
End Sub
rmq:tu devrais t'arranger pour avoir des 0 avec les formules dans la feuille
 

an@s

XLDnaute Occasionnel
Bonsoir bebere,

merci pour votre réponse...
après un test je constate que le code renvoie une erreur sur la 2ème ligne et plus précisément
d As New Dictionary
de plus le code doit être variable c'est à dire le tableau peut finir dans la ligne 30 ou 40 et non pas toujours la ligne 23 comme dans mon exemple

Cordialement
An@s
 

an@s

XLDnaute Occasionnel
Bonjour Stapple, Bisson nicole
je viens de tester et ça ne fonctionne pas...
entre autre en cliquant juste sur l'onglet synthèse le code doit s’exécuter sans le lier à un bouton

Nicole merci pour le code mais ce n'est pas du tout ce que j'ai demandé, je n'ai pas besoin de créer un autre tableau

Cordialement
 

Staple1600

XLDnaute Barbatruc
Re

je viens de tester et ça ne fonctionne pas...
entre autre en cliquant juste sur l'onglet synthèse le code doit s’exécuter sans le lier à un bouton
Tu as testé le fichier de BISSON?
Ce serait étonnant qu'il ne fonctionne pas.

Et où à tu mis le code de Bebere?

D'après ce que tu dis, tu voudrais que le code soit dans un procédure événementielle.
Or les codes de Bebere ou Bisson tels quels se lancent par le biais d'un bouton ou par Développeur/Macros

Il faut donc adapter le code et le mettre dans le code de la feuille dans la procédure
Private Sub Worksheet_Activate()
 
Dernière édition:

an@s

XLDnaute Occasionnel
Re Staple,
je suis nul en VBA pour adapter l'un des codes à celui que j'ai sur mon fichier.
le code de bebere je l'ai mis dans un module
puis le fichier de boisson il crée un autre tableau sous celui que j'ai dans la feuille synthèse..

bien évidement ce que je souhaite c'est une fois je clique sur mise à jour la modification se fait dedans,
si non en cliquant sur l'onglet synthèse le code s'éxecute

cordialement
 

job75

XLDnaute Barbatruc
Bonjour an@s, bebere, JM, Nicole,
le tableau peut finir dans la ligne 30 ou 40 et non pas toujours la ligne 23 comme dans mon exemple
Alors vraiment pas besoin de se compliquer la vie, à placer dans le code de la feuille "SYNTHESE" :
Code:
Private Sub Worksheet_Activate()
Dim i&, j%
Application.ScreenUpdating = False
Call Maj
With [C10].CurrentRegion.Resize(, 14) 'colonnes C à P
  .Value = .Value 'supprime les formules
  .Sort .Cells(1), xlAscending, Header:=xlNo 'tri sur la 1ère colonne
  For i = .Rows.Count To 2 Step -1
    If .Cells(i, 1) = .Cells(i - 1, 1) Then
      For j = 3 To 11 'colonnes E à M
        If IsNumeric(CStr(.Cells(i, j))) Then .Cells(i - 1, j) = .Cells(i, j) + Val(Replace(.Cells(i - 1, j), ",", "."))
      Next
      .Rows(i).EntireRow.Delete 'suppression de la ligne doublon
    End If
  Next
End With
End Sub
Fichier joint, activer la feuille "SYNTHESE".

A+
 

Pièces jointes

  • client(1).xlsm
    341.7 KB · Affichages: 32

Bebere

XLDnaute Barbatruc
bonsoir
An le fichier avec le code évènement activate de synthèse
tu nous diras si cela a fonctionné

ps demain je regarde pour faire à partir de recap
je viens d'essayer avec maj et çà plante(la ligne total disparait)
 

Pièces jointes

  • clientV1.xlsm
    346.6 KB · Affichages: 25
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87