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 :

Tri et Somme des doublons


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 38
    Points
    38
    Par défaut Tri et Somme des doublons
    [QUOTE=argaz01] Bonjour,

    Concernant un tableau, j'arrive à le trier avec excel en fonction d'une cellule, seul bémol j'aimerais que le tableau supprime les doublons et envoie la somme des lignes de la colonnes correspondante à chaque doublons; Je m'explique:

    J'arrive à avoir un tableau du genre:
    <SGP> <type> <ratio>
    A 1 x%
    A 1 y%
    A 1 z%

    et j'aimerais avoir un tableau du genre:

    <SGP> <type> <ratio>
    A 1 somme(x%,y%,z%)


    En vous remerciant d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    essaye ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim ligne As Integer
    ligne = 2
    Do
     
      If Cells(ligne, 1) = Cells(ligne + 1, 1) And Cells(ligne, 2) = Cells(ligne + 1, 2) Then
        Cells(ligne, 3) = Cells(ligne, 3) + Cells(ligne + 1, 3)
        Cells(ligne + 1, 3).EntireRow.Delete Shift:=xlUp
      Else
        ligne = ligne + 1
      End If
    Loop While Cells(ligne, 1) <> ""

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Merci, ça marche très bien, sauf que je perd la ligne des titres (elle se trouvait sur la ligne 1). J'aimerais aussi intégrer un variable pour trier en fonction des ratios dans l'ordre croissant.

    Encore merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    je perd la ligne des titres (elle se trouvait sur la ligne 1)
    je ne vois pas comment c'est possible car je supprime toujours la ligne + 1 donc même si ligne = 1 je supprimerais la 2 eme.
    Dans une autre partie du code peut-être ?
    J'aimerais aussi intégrer un variable pour trier en fonction des ratios dans l'ordre croissant
    pourrais-tu être plus clair

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Je voulais dire comment modifier la macro pour qu'elle trie aussi le tableau en fonction de la colonne ratio (colonne 3) dans l'ordre croissant.

    Sinon j'ai bel et bien perdu la lignes des titres!!! Comment faire pour revenir en arrière?

    Merci

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Je voulais dire comment modifier la macro pour qu'elle trie aussi le tableau en fonction de la colonne ratio (colonne 3) dans l'ordre croissant.
    Ne sachant pas ce que tu as utilisé, ce code fait un tri sur les trois colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Columns("A:C").Select
        Selection.Sort _
          Key1:=Range("A2"), Order1:=xlAscending, _
          Key2:=Range("B2"), Order2:=xlAscending, _
          Key3:=Range("C2"), Order3:=xlAscending, _
          Header:=xlYes
    pour la ligne de tritre j'ai refais un essais et tout c'est bien passé, a mon avis il faut la refaire et avant de refaire un essai met la de coté dans une feuille temporaire pour la sauvegarder car il n'y a pas de undo pour les modifications par macro.

    bon courage

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Dois-je créer un nouveau module ou simplement une nouvelle procédure pour ajouter une macro? Merci

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Ca dépend de ce que tu veux faire

    si c'est un code que tu veux appeler, dans un module tu crées une routine sub
    ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub triColAC()
     
    'toncode
     
    end sub
    ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    J'ai intégré to code ci-après en tant que nouvelle procédure dans le même module que le premier (code pour trie et somme doublons), cependant il fait un tri croissant à partir de la 16ème ligne et non à partie de la 1ère!!!
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Columns("A:C").Select
        Selection.Sort _
          Key1:=Range("A2"), Order1:=xlAscending, _
          Key2:=Range("B2"), Order2:=xlAscending, _
          Key3:=Range("C2"), Order3:=xlAscending, _
          Header:=xlYes
    PS: Pour le 1er code comment faire pour le réinitialiser et récuperer ma ligne des titres?

    Et merci pour ton aide

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    pour le tri essaye ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Columns("A:C").Sort _
          Key1:=Range("A1"), Order1:=xlAscending, _
          Key2:=Range("B1"), Order2:=xlAscending, _
          Key3:=Range("C1"), Order3:=xlAscending, _
          Header:=xlYes
    la ligne de titre est toujours supprimé ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Oui ma ligne de titre est toujours supprimée. De plus, le tri croissant avec la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Columns("A:C").Sort _
          Key1:=Range("A1"), Order1:=xlAscending, _
          Key2:=Range("B1"), Order2:=xlAscending, _
          Key3:=Range("C1"), Order3:=xlAscending, _
          Header:=xlYes
    ne trie qu'à partir de la 16ème ligne!!!

    Merci

    Houssaine

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    peux tu lancer l'enregistrement d'une macro, effectuer le tri sur les trois colonnes, arrêter l'enregistrement et faire un essai en utilisant le code enregistré.

    sinon peux-tu mettre ton code complet car pour la ligne de titre je ne comprend pourquoi elle est supprimé

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Voici le code utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub TriSommeAMF()
    Dim ligne As Integer
    ligne = 2
    Do
     
      If Cells(ligne, 1) = Cells(ligne + 1, 1) And Cells(ligne, 2) = Cells(ligne + 1, 2) Then
      Cell(ligne, 3) = Cells(ligne, 3) + Cells(ligne + 1, 3)
        Cells(ligne + 1, 3).EntireRow.Delete Shift:=xlUp
      Else
        ligne = ligne + 1
      End If
    Loop While Cells(ligne, 1) <> ""
     
    End Sub
    Concernant la méthode de l'enregistrement de macro, j'ai un seul souci c'est que mon tableau d'origine comporte des sous-totaux au bout de certaines lignes et comme il amené à être modifié, la méthode de l'enregistrement entraîne des erreurs de saisie: C'est pour cela que je suis à la recherche d'une macro qui va chrcher uniquement les lignes sans les sous-totaux de plusieurs colonnes et les trier dans une nouvelle feuille avec le code que tu m'a passé!!

    Le but final c'est de concevoir un outil de pilotage pour un portefeuille de placement qui soit automatique!
    Mais comme je suis encore novice en VBA, je pense que ça va me prendre beaucoup de temps tout cela.

    Alors toute aide est la bienvenue et j'espère que d'ici quelques semaine je commencerais à maîtriser cet outil!!

    Cordialement

    Houssaine

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Tu as fais un copier coller de ta routine car déja il manque un S à cells dans cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(ligne, 3) = Cells(ligne, 3) + Cells(ligne + 1, 3)
    Quand je disais code complet je parlais de tout car je me demande si le problème ne viendrait pas d'ailleurs, à moins que tu en ai beaucoup trop.

    joindre le fichier excel peut-être? si information non confidentielles bien sùr

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Bonjour tout le monde,


    Bon zyhack, voilà un bout du fichier que je devais trier hier: je devais faire la somme des doublons et ensuite le trier dans un odre croissant (quote-part): le code pour somme des doublons est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim ligne As Integer
    ligne = 2
    Do
     
      If Cells(ligne, 1) = Cells(ligne + 1, 1) And Cells(ligne, 2) = Cells(ligne + 1, 2) Then
        Cells(ligne, 3) = Cells(ligne, 3) + Cells(ligne + 1, 3)
        Cells(ligne + 1, 3).EntireRow.Delete Shift:=xlUp
      Else
        ligne = ligne + 1
      End If
      Loop While Cells(ligne, 1) <> ""
     
    End Sub
    et le code pour faire le tri croissant est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub TriCroissantRatios()
    Columns("A:C").Select
        Selection.Sort _
          Key1:=Range("A1"), Order1:=xlAscending, _
          Key2:=Range("B1"), Order2:=xlAscending, _
          Key3:=Range("C1"), Order3:=xlAscending, _
          Header:=xlYes
     
    End Sub
    J'avais intéger ces deux code dans 2 modules différents et puis je les ai mis maintenant dans un même module, mais ça me supprime toujours la ligne de mes titres et ne trie qu'aprtir de la 16ème ligne!!

    Merci pour l'aide
    Fichiers attachés Fichiers attachés

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut Constatation
    1. j'ai chargé ton classeur, je ne sais pas si c'est normal mais il n'y avait aucun code
    2. j'ai créé un module et j'ai ajouté les deux routines
    3. j'ai fais deux tests
      1. en lançant la première routine et ensuite la deuxième
      2. puis inversement
    Résultat la somme est correct, le tri est correct, la première ligne n'est pas supprimé

    Peut-tu refaire le test exactement comme je l'ai fait, en partant du classeur que tu as joint.

    car pour moi le problème viens d'un code annexe à ces deux routine

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    J'ai fait exactyement comme tu m'a dit mais rien ne se passe!!! Je n'y comprend plus rien!!!

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    j'ai modifier le classeur avec des valeurs de test dans la feuille 1

    dans la feuille 2 j'ai mis une copie de la feuille 1 pour pouvoir refaire le test en copiant collant la feuille 2 dans la feuille 1

    Ferme tous tes classeur et ouvre celui ci

    lance en premier la macro TriCroissantRatios puis ensuite TriSommeAMF

    dans la feuille 3 j'ai coller le résultat que j'ai obtenu

    qu'est ce que ça donne chez toi
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA/MACRO : Regrouper la somme des doublons avec conditions
    Par suzette69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/06/2012, 21h24
  2. Comment forcer la somme des doublons
    Par Bunny_Warrior dans le forum Deski
    Réponses: 6
    Dernier message: 27/10/2010, 18h54
  3. SOMME des doublons à l'extérieur de la table
    Par LATIFA70 dans le forum Débuter
    Réponses: 1
    Dernier message: 18/01/2009, 15h36
  4. débutant sur des doublons et des sommes
    Par timal78 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 22/08/2007, 12h44
  5. Recherche et tri sur des doublons XSLT
    Par MusSDev dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 01/06/2005, 10h27

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