IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Supprimer les doublons et faire la somme dans une nouvelle feuille


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 1
    Par défaut Supprimer les doublons et faire la somme dans une nouvelle feuille
    Bonjour tout le monde,

    J'essaie de créer une macro qui agit sur mon fichier ci-joint,
    L'idée c'est de créer une nouvelle feuille pour chaque container et la nommer au nom du container ensuite faire une copie de tous les éléments du container pour les coller dans cette nouvelle feuille tout en supprimant les doublons et sommer les valeurs des doublons.
    Exemple : container A : item: 1 - Qtt: 2
    item: 1 - Qtt: 1
    item: 2 - Qtt: 4
    il affiche: item: 1 - Qtt : 3 et item: 2 - Qtt : 4 dans une nouvelle feuille nommée A.

    Je vous remercie infiniment pour votre aide.Classeur1.xlsx

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Voici, quelques éléments "indéterminés" reste en fond de feuille, libre à vous de les conserver ou de les supprimer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    Dim f1, f2
    Dim DerLig_L As Long, DerLig_C As Long
     
    Sub Creation_Feuille_Container()
        Application.ScreenUpdating = False
        Set f1 = Sheets("Liste")
        DerLig_L = f1.[D100000].End(xlUp).Row
        Formule_Recup_Nom_Container
        Filtrer_Container
        f1.Columns(6).ClearContents
        Set f1 = Nothing
    End Sub
     
    Sub Formule_Recup_Nom_Container()
        Range("F4:F" & DerLig_L).FormulaR1C1 = "=IF(RC[-5]=""Container No:"",RC[-3],IF(RC[-5]=""Seal No       :"",R[-1]C[-3],IF(AND(R[-1]C="""",OR(R[-2]C[-1]=""Description"",R[-1]C[-1]=""Description"")),R[-3]C[-3],R[-1]C)))"
        Range("F4:F" & DerLig_L).Value = Range("F4:F" & DerLig_L).Value
    End Sub
     
    Sub Filtrer_Container()
        ActiveSheet.AutoFilterMode = False
        Range("F4").Select
        If f1.AutoFilterMode Then
            isOn = "On"
        Else
            isOn = "Off"
            Selection.AutoFilter
        End If
     
        For Each C In f1.Range("F4:F" & DerLig_L)
            On Error Resume Next
            If f1.Cells(C.Row, "F") <> f1.Cells(C.Row - 1, "F") Then
                f1.Range("A3:F" & DerLig_L).AutoFilter Field:=6, Criteria1:=C.Text
                f1.Range("_FilterDataBase").Resize(, 11).SpecialCells(xlCellTypeVisible).Copy
                If Err.Number = 0 Then
                    Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = C.Text
                    Set f2 = Sheets(ActiveSheet.Name)
                    [A1].Select
                    ActiveSheet.Paste
                    DerLig_C = f2.[D100000].End(xlUp).Row
                    Tri
                    Formule_Somme_quantités
                    Suppression_Doublons
                End If
                On Error GoTo 0
            End If
            f1.ShowAllData
            Set f2 = Nothing
        Next C
    End Sub
     
    Sub Tri()
        Range("A5:L" & DerLig_C).Sort [D5], 1
    End Sub
     
    Sub Formule_Somme_quantités()
        Range("L5:L" & DerLig_C).FormulaR1C1 = "=SUMIF(C4,RC4,C8)"
        Range("L5:L" & DerLig_C).Value = Range("L5:L" & DerLig_C).Value
    End Sub
     
    Sub Suppression_Doublons()
        Cells.Select
        ActiveSheet.Range("A5:L" & DerLig_C).RemoveDuplicates Columns:=4, Header:=xlYes
        Range("H5:H" & DerLig_C).Value = Range("L5:L" & DerLig_C).Value
        Columns("F:K").Delete
        [F4] = "Q'ty" & Chr(10) & "(PCS)"
    End Sub
     
    Sub Supprimer_Feuilles_Containers()
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        For i = Sheets.Count To 1 Step -1
            If Sheets(i).Name <> "Liste" Then Sheets(i).Delete
        Next
    End Sub
    Avec le fichier
    Pièce jointe 466395

    Cdlt

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Une TCD est fait pour ça en 2coups de souris

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour Mercatog,

    "Un TCD est fait pour ça"

    OK, à condition que les données soient dans un tableau bien structuré et là ce n'est absolument pas le cas, il s'agit probablement de données issues d'une extraction d'une autre application donc, avant de faire quoique ce soit il m'a semblé nécessaire de faire une mise en forme pour rendre tout ça exploitable. De plus, Looper123 à bien précisé qu'il voulait le résultat dans des feuilles séparées.

    A moins de n'avoir pas tout compris, mais attendons l'avis de Looper123.

    CDlt

  5. #5
    Invité de passage
    Homme Profil pro
    Auditeur financier
    Inscrit en
    Avril 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Auditeur financier
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2018
    Messages : 1
    Par défaut Faire une somme concernant les valeurs de chaque doublon
    Bonjour,

    Bien qu'il soit possible de la faire avec un Tcd, j'aimerai savoir s'il serai possible de faire la sommes de valeur ayant pour critère chaque doublon puis de renseigner sur une colonne distincte une information en fonction du résultat.
    j'avoue ne pas du tout savoir comment aborder ce problème. J'ai essayé de comprendre le code de ARTHUR083 mais sans résultat. Pouvez-vous m'aider svp ?

    Vous trouverez ci-joint le fichier de départ et le résultat attendu.

    Je vous remercie
    Fichiers attachés Fichiers attachés

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Recap()
      Set f = Sheets("feuil1")
      Set result = Sheets("feuil2").Range("A2")
      Set Dico = CreateObject("Scripting.Dictionary")
      TblBD = f.Range("D8:H" & f.[D65000].End(xlUp).Row)
      For i = 1 To UBound(TblBD)
        If TblBD(i, 1) <> "" And TblBD(i, 1) <> "TOTAL (CFR)" And IsNumeric(TblBD(i, 5)) Then Dico(TblBD(i, 1)) = Dico(TblBD(i, 1)) + TblBD(i, 5)
      Next i
      result.CurrentRegion.Offset(1).ClearContents
      result.Resize(Dico.Count, 1) = Application.Transpose(Dico.Keys)
      result.Offset(, 1).Resize(Dico.Count, 1) = Application.Transpose(Dico.Items)
    End Sub

    Boisgontier
    Fichiers attachés Fichiers attachés

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    Citation Envoyé par ARTURO83 Voir le message
    [...]
    OK, à condition que les données soient dans un tableau bien structuré et là ce n'est absolument pas le cas[...]
    Dans ce cas, la première chose à faire, puisqu'on est en Excel, est de remettre les données dans une configuration qui permet d'utiliser les outils d'Excel. Excel propose des outils pour supprimer les doublons, des fonctions pour dénombrer et sommer à peu près n'importe quoi, et parce que les données ne sont pas bien organisées, on s'oblige à utiliser du code (qui de l'aveu même du demandeur n'a pas été compris par lui), alors que peu de code peut remettre les données d'équerre pour utiliser les outils d'Excel. De plus, la demande initiale peut être réalisée, depuis XL2010 (tag de version utilisé ici), grâce à Power Query sans VBA

    Ici, on utilise un dico et du code VBA, qui plus est date de 2003*,alors que l'on pourrait se contenter d'un code simple et compréhensible. C'est un non-sens, pour moi.


    * C'est aberrant, en 2019, d'encore proposer TblBD = f.Range("D8:H" & f.[D65000].End(xlUp).Row) alors que cela fait 12 ans qu'on est passé à 1048576 lignes et que les tableaux structurés permettent d'éviter de jouer avec du code qui contraint à l'utilisation d'une feuille et d'une colonne particulière de cette feuille. Si on déplace les données ailleurs sur la même feuille ou sur une autre feuille, le code que je cite va planter alors qu'on a tout ce qu'il faut en magasin pour écrire du code solide et pérenne grâce, notamment, aux tableaux structurés
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    De plus, la demande initiale peut être réalisée, depuis XL2010 (tag de version utilisé ici), grâce à Power Query sans VBA
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [XL-2016] VBA Supprimer les valeurs des cellules non coloriés dans une plage de donnée
    Par bouly.db78 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/04/2018, 09h19
  2. [WD20] fair la somme dans une rubrique avec condition
    Par iloveubb dans le forum WinDev
    Réponses: 7
    Dernier message: 06/07/2017, 09h45
  3. [XL-2003] Faire un somme dans une boucle for each
    Par tools dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/01/2011, 08h36
  4. supprimer les fichiers qui ne sont pas dans une liste
    Par jeorcal dans le forum Langage
    Réponses: 7
    Dernier message: 15/01/2011, 10h03
  5. Copier les valeurs d'une feuille dans une nouvelle feuille en VBA
    Par muska78 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/06/2008, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo