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 :

Fusion + Somme des valeurs d'une colonne [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 84
    Par défaut Fusion + Somme des valeurs d'une colonne
    Bonjour,

    après traitements, j'obtiens un tableau avec différentes données:
    Matricule-Nom-Prenom-Date de début-Date de fin-Somme Répartition-Type Anomalie
    (Les "-" représentant des colonnes, Matricule en colonne ... Type ano en G).

    Je me retrouve parfois avec des doublons du genre:
    2014688 PIYU ALEXANDRA 01/07/2002 02/06/2014 100 Anomalie Calcul
    2014688 PIYU ALEXANDRA 03/06/2014 31/12/2999 100 Anomalie Calcul

    Et je voudrais obtenir quelque chose du genre

    2014688 PIYU ALEXANDRA 01/07/2002 02/06/2014 200 Anomalie Calcul
    ( Les dates changent, mais ça n'a pas grande importance)

    Je sais que c'est possible avec l'insertion d'une nouvelle colonne, sommer, coller, ..
    Mais je me demandais si VBA/Excel offrait d'autre possibilité ? Une sorte de fusion sous condition par exemple ?

    Merci d'avance !

    Cdt, arkhang.

    EDIT: je joins également un fichier pour titre d'exemple

    Pièce jointe 149169

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour.

    Citation Envoyé par arkhang Voir le message
    après traitements
    Il serait logique pendant un traitement au lieu de créer une nouvelle ligne de directement cumuler …

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Il suffit de faire une boucle While.

    Pour chaque ligne, tu regardes si la ligne suivante contient des éléments identiques.

    Si c'est le cas, tu additionnes la valeur de la ligne suivante à la ligne en cours et tu supprimes la ligne suivante.
    Tu restes sur la même ligne et tu compares à nouveau à la ligne suivante.

    Si ce n'est pas (ou plus) le cas, tu passes à la ligne suivante.

  4. #4
    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
    Sur ton fichier original, les matricules sont triées ou non?
    Si non, peut on procéder au tri ou travailler sur les données telles.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 84
    Par défaut
    @Marc, crois bien que, si j'avais pu, j'aurais fais comme ça. On me délivre le traitement, et je ne peux y toucher. Merci de ton aide

    @Menhir, merci ... Je le faisais manuellement et voyant que c'était impossible (Circulaire) j'ai tout de suite pensé que c'était impossible en code .. Mais en fait si -__-.

    Donc à l'aide d'une boucle qui part de la fin .. ça devrait le faire !

    @mercatog elles sont triées oui

  6. #6
    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
    Ma proposition dans ce cas

    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 Assemblage()
    Dim LastLig As Long, i As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = LastLig To 2 Step -1
            If .Range("A" & i) = .Range("A" & i - 1) Then
                .Range("E" & i - 1) = .Range("E" & i - 1) + .Range("E" & i)
                .Rows(i).Delete
            End If
        Next i
    End With
    End Sub

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 84
    Par défaut
    Tout comme ce que je viens de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DerniereLigne3 = Range("A65536").End(xlUp).Row
            Range("A1:H" & DerniereLigne3).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _
            xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
            'On enlève et somme les doublons
            For i = DerniereLigne3 To 2 Step -1
                If Range("B" & i) = Range("B" & i - 1) And Range("C" & i) = Range("C" & i - 1) Then
                    Range("F" & i - 1) = Range("F" & i - 1) + Range("F" & i)
                    Rows(i).Delete
                End If
            Next i

    Merci de ton aide ! À bientôt !!

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par arkhang Voir le message
    Donc à l'aide d'une boucle qui part de la fin .. ça devrait le faire !
    Avec une boucle For to, il vaut mieux partir de la fin mais avec une boucle While qui vérifie que la ligne à traiter n'est pas vide, ça peut se faire dans l'ordre normal.

    Je ne pense pas que ces codes marche parce qu'à mon avis, il faut au moins deux boucles imbriquées pour faire ça : une boucle de scrutation (pour faire le traitement ligne par ligne) et une boucle de recherche des valeurs semblables de chaque ligne.

  9. #9
    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
    @Menhir
    Les lignes sont triées par matricule, donc pas besoin de 2 boucles. il suffit de tester chaque cellule avec sa précédente même s'il y en a 36 de même matricule
    D'où ma question initiale

  10. #10
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Je n'avais pas vu qu'en fait tu mettais la valeur de la ligne scrutée dans la ligne suivante et que c'est la ligne scrutée que tu supprimais.
    Pas bête.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/06/2015, 14h48
  2. Réponses: 5
    Dernier message: 31/05/2015, 20h57
  3. quote dans des valeurs d'une colonne SET
    Par Jean Fi dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/03/2006, 20h16
  4. Somme de valeurs d'une colonne d'un DBGrid
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/12/2004, 23h58

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