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 :

Grouper les lignes dont une valeur est identique, compter et faire une somme en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Par défaut Grouper les lignes dont une valeur est identique, compter et faire une somme en VBA
    Bonjour,

    Je cherche via VBA à grouper les lignes dont une cellule est identique, en calculer le nombre et faire la somme des quantités. (Comme le ferait un tableau TCD).

    Pourriez-vous m'aider s'il vous plaît.

    Nom : 12-06-2017 17-28-10.png
Affichages : 6987
Taille : 15,8 Ko
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Avec quelques petites recherches sur le net on peut trouver des solutions
    ou même le faire soit même avec le B.A.BA d'excel et de simples formules …

    Sinon voici une solution à adapter : https://www.developpez.net/forums/d1...s/#post8675891

    PS : comme la plupart je n'ouvre pas les fichiers joints, et encore moins dés le 1er post, cf. Règles du forum
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Par défaut
    Merci RyuAutodidacte,

    Je vais étudier le post que tu as mis en lien.

    Je sais bien qu'avec le B.A.BA d'Excel je peux m'en sortir ou avec un simple tableau croisé dynamique.

    Mais je veux automatiser le traitement via VBA et là, en tant que débutant en programmation : je galère !

    J'ai cherché sur le net sans vraiment trouver la solution ou su l'adapter à mon besoin.

    Et adapter sans comprendre ce n'est pas ce que je recherche : j'ai envie d'apprendre.

    Désolé pour la pièce jointe : je ne savais pas.

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    re,

    pour commencer je te conseille de lire :
    - http://silkyroad.developpez.com/VBA/LesVariables/
    - http://didier-gonard.developpez.com/...s-tableau-vba/ + http://silkyroad.developpez.com/vba/tableaux/
    - https://msdn.microsoft.com/fr-fr/lib...(v=vs.90).aspx + http://silkyroad.developpez.com/excel/doublons/#LIV-A + http://silkyroad.developpez.com/excel/doublons/#LIV-B + http://silkyroad.developpez.com/excel/doublons/#LIV-F

    et pour effectuer le code le faire en Pas à pas avec la touche F8 en ayant d'ouvert la fenêtre des variables locales afin de voir ce qui s'y passe à chaque pas dans le code

    après si tu as quelques soucis, en ayant fait quand même au préalable un minimum de travail afin d'essayer de comprendre, reviens avec tes questions sur les points bloquants
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Par défaut
    Bonjour RyuAutodidacte,

    J'ai pu bosser sur tes éléments (merci beaucoup) et ça fonctionne plutôt pas mal.

    En revanche, j'ai 2 questions :


    1 - Le format de certaines cellules change après application du code (Certaines cellules passent en date d'autres en standard pour le même type de données et la même colonne)

    Comment puis je éviter cela ?

    2 - Je ne peux pas lancer plusieurs fois la commande. J'ai une erreur Incompatibilité de Type '13' sur

    Nom : 19-06-2017 11-28-45.png
Affichages : 6426
Taille : 6,0 Ko

    Peut-être Est-ce dû au changement de format de cellule après le lancement de la commande ?

    Merci

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonsoir,

    PS : comme en ce moment j'ai pas mal de taf, je ne pourrais répondre qu'en détail le soir !

    Pour la 1ère question, je ne suis pas encore tombé sur le cas, il me faudrait un exemple concret, un fichier xlsx (donc sans macro) avec de fausses données mais où le cas est reproductible !
    afin que je puisse tester …
    (Certaines cellules passent en date d'autres en standard pour le même type de données et la même colonne)
    Il faudrait être plus précis stp, … ?

    En me basant sur l'exemple du post initial (en supposant qu'en plus de la colonne 4 on doit additionner la colonne 2) dont les critères d'additions seraient la colonne 1 et 3,
    voilà le résultat (PS : je peux relancer le code sans problème) :

    Nom emplacement Ref Article Host Stock total
    NESPRESSO 1 DULSAO 706
    NESPRESSO 2 ARPEGGIO 1 454
    NESPRESSO 1 ROMA 642
    NESPRESSO 1 CAFEZIN 1 549
    NESPRESSO 1 LINIZIO 411
    NESPRESSO 1 CAPRICIO 216
    NESPRESSO 3 VOLLUTO 1 728
    NESPRESSO 1 RISTRETO 672
    NESPRESSO 1 FORTIZIO310517 576
    NESPRESSO 1 KAZAAR310517 324
    NESPRESSO 4 VIVALTO 71 090
    NESPRESSO 1 UMUTIMA3 776
    NESPRESSO 1 TANIM311016 1 440

    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
    Sub StockCafe()Dim cLig As New Collection, c As Byte, L&, R&, VA, VR, X
        With Feuil1
            VA = .UsedRange.Value
            ReDim VR(1 To UBound(VA) - 1, 1 To 4)
            ReDim X(1 To UBound(VA) - 1) 'Tableau des critères pour addition
        For R& = 2 To UBound(VA)
                X(R - 1) = VA(R, 1) & "|" & VA(R, 3) 'Enregistrement des critères dans le tableau des colonnes 1 et 3
                On Error Resume Next
                L = cLig(X(R - 1))
                On Error GoTo 0
            If L Then
                VR(L, 2) = VR(L, 2) + VA(R, 2) 'Addition en col 2
                VR(L, 4) = VR(L, 4) + VA(R, 4) 'Addition en col 4
            Else
                L = cLig.Count + 1
                cLig.Add L, X(R - 1)
                For c = 1 To 4:  VR(L, c) = VA(R, c):  Next
            End If
                    L = 0
        Next
            If cLig.Count < UBound(VR) Then
                .Range("A2:D2").Resize(cLig.Count).Value = VR 'Copie du tableau épuré des doublons additon faite
                .Rows(cLig.Count + 2 & ":" & UBound(VA)).Delete 'Effacement des lignes en supp
            End If
        End With
    Set cLig = Nothing
    End Sub
    L'avantage du code c'est qu'il est facilement adaptable de 1 à x critères;
    Imaginons que l'on a 2 références de nom identique mais pas de même marques, en précisant les critères en concaténation on pourra faire le distinguo afin d'avoir les bonnes correspondances pour additionner !

    Pour la 2ème question :
    Je ne peux pas lancer plusieurs fois la commande. J'ai une erreur Incompatibilité de Type '13' sur
    je ne rencontre pas le problème, il faut vérifier le code que tu as adapté selon le contexte, c-à-d, selon la structure de tes données où tu as appliqué le code.
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/10/2013, 12h29
  2. Supprimer les lignes dont la valeur du deuxième champ est égale à 13
    Par mond14 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 21/05/2013, 13h26
  3. Réponses: 4
    Dernier message: 24/01/2013, 14h57
  4. Réponses: 2
    Dernier message: 27/02/2008, 18h45
  5. Réponses: 5
    Dernier message: 24/07/2006, 14h01

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