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 :

somme des éléments d'une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 33
    Points
    33
    Par défaut somme des éléments d'une colonne
    Bonsoir,

    je suis un débutant en VBA et j'ai programmé un code voici un exemple pour faciliter la compréhension du problème

    quantité	produits
    5165		A
    15		B
    16		A
    51		C
    5621		B
    le code doit afficher la somme des quantité pour chaque produit
    voici le code que j'ai réalisé :

    les quantité débute depuis Cells(2, 3) jusqu’à Cells(33, 3)
    les produits débute depuis Cells(2, 4) jusqu’à Cells(33, 4)
    le résultat doit être écrit sur la feuil3
    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
    Sub qte()
    Dim i As Integer
    Dim j As Integer
    Dim s As Integer
    k = 2
     
    For i = Cells(k, 4) To Cells(33, 4)
    s = 0
    For m = Cells(2, 4) To i
    If m.Value <> i.Value Then
    For j = Cells(k + 1, 4) To Cells(33, 4)
    If j.Value = i.Value Then
    s = s + Cells(k, 3).Value
    k = k + 1
    Next
    Next
    Next
     Sheets("Feuil3").Activate
     For f = 0 To 100
     Sheets("Feuil3").Cells(f, 1).Value = s
    End Sub
    merci d'avance

  2. #2
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut


    Bonsoir, bonsoir !

    Pourquoi en passer par du code alors qu'une simple formule de calculs suffit amplement ?! Via SOMME.SI par exemple …

    Et sachant la plupart des fonctions de formules de calculs utilisables en VBA !
    Sans compter un tableau croisé dynamique …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir Marc, raicolin
    Sans compter un tableau croisé dynamique …
    tu as raison Marc, mais juste pour le plaisir et pour que raicolin puisse étudier

    un code à adapter

    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
    Sub essai()
    Dim Dl As Range, Plg As Range, Tbl, Tbresult(), Tbdoublon
    Dim x As Long
    With Sheets("Feuil2") 'à changer par ton nom de feuille
      Set Dl = .Range("C" & .Rows.Count).End(xlUp) 'derniere cellule utilisée en col C
      Set Plg = .Range("C2", Dl(1, 2))
      Tbl = .Range("D2", Dl(1, 2))
      .Range("D2", Dl(1, 2)).RemoveDuplicates Columns:=1, Header:=xlNo
      Set Dl = .Range("D" & .Rows.Count).End(xlUp)
      Tbdoublon = .Range("D2", Dl)
      .Range("D2").Resize(UBound(Tbl)) = Tbl
      ReDim Tbresult(1 To UBound(Tbdoublon), 1 To 2)
      For x = 1 To UBound(Tbdoublon)
        Tbresult(x, 1) = Tbdoublon(x, 1)
        Tbresult(x, 2) = WorksheetFunction.SumIf(Plg.Columns(2), Tbdoublon(x, 1), Plg.Columns(1))
      Next
      Sheets("Feuil3").Range("A2").Resize(UBound(Tbresult, 1), UBound(Tbresult, 2)) = Tbresult
     
    End With
    End Sub
    bonne nuit
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 33
    Points
    33
    Par défaut
    Bonjour M.casafayere
    Je vous remercie de votre aide, en réalité il s’agit d’une situation un peu plus compliqué car je dispose de deux colonnes dans le fichier excel dans lequel je devrais faire la somme pour chaque code de la longueur correspondante il s’agit des colonnes C3 et C4 de la feuille CUTTING DATA -Roof family.
    Je n’est pas pu sélectionné ces deux colonne en se basant sur le code que vous m’avez fournit
    est ce que vous pouvez m'aider svp
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    déjà, ça m'embête quand j'ai la témérité d'ouvrir un fichier joint (j'ai déjà rencontré beaucoup de problème), ensuite je m'aperçois que tu es en option "L1C1", ce que je ne fais jamais (mais bon !)

    en réalité il s’agit d’une situation un peu plus compliqué car je dispose de deux colonnes dans le fichier excel dans lequel je devrais faire la somme pour chaque code de la longueur correspondante il s’agit des colonnes C3 et C4 de la feuille CUTTING DATA -Roof family.
    tu me parles de col C3 C4 or C3 et C4 sont des cellules, maintenant, expliques-toi mieux si tu veux que je continue à t'aider ou si d'autres intervenants souhaitent se mêler à la discussion.

    Bon courage et n'hésites pas
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 33
    Points
    33
    Par défaut
    Merci beaucoup d’avoir accepté de m’aider, pour corriger mon erreur il s‘agit de la cellule L2C3 jusqu’à L33C3 pour la première colonne et de la cellule L2C4 jusqu’à L33C4 pour la deuxième colonne
    Je voudrais effectuer la somme de la longueur pour chaque code donné
    Je vous remercie beaucoup d’avance

  7. #7
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Ok,

    mais mon code envoie toujours le résultat dans "Feuil3" qui n'existe pas, tu aurais dû adapter, alors dans quelle feuille ?, imaginons "Feuil5"

    Ton tableau est filtré, j'enlève les filtres
    De plus, Marc te préconisait un tableau dynamique et je viens de remarquer qu'en "feuil6" tu en as un, il suffisait de l'adapter.

    sinon, essaies ce code qui tient comptes des vides, tu devrais comprendre la démarche ensuite, dans le cas contraire, je t'expliquerai pas à pas mais la réponse sera suivant le temps dont je dispose
    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
    Sub essai()
    Dim Dl As Range, Plg As Range, Tbl, Tbresult(), Tbdoublon
    Dim x As Long
    With Sheets("CUTTING DATA -Roof family")
      Set Dl = .Range("C" & .Rows.Count).End(xlUp)
      Set Plg = .Range("C2", Dl(1, 2))
      Tbl = .Range("D2", Dl(1, 2))
      .Range("D2", Dl(1, 2)).RemoveDuplicates Columns:=1, Header:=xlNo
      Set Dl = .Range("D" & .Rows.Count).End(xlUp)
      Tbdoublon = .Range("D2", Dl)
      .Range("D2").Resize(UBound(Tbl)) = Tbl
      ReDim Tbresult(1 To UBound(Tbdoublon), 1 To 2)
      For x = 1 To UBound(Tbdoublon)
        Tbresult(x, 1) = Tbdoublon(x, 1)
        Tbresult(x, 2) = WorksheetFunction.SumIf(Plg.Columns(2), Tbdoublon(x, 1), Plg.Columns(1))
      Next
      Sheets("Feuil5").Range("A2").Resize(UBound(Tbresult, 1), UBound(Tbresult, 2)) = Tbresult
     
    End With
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 33
    Points
    33
    Par défaut
    Bonjour monsieur Dom je vous remercie infiniment de votre aide , bien sur si vous avez un peu de temps je serai reconnaissant de m'expliquer le code étape par étape comme je suis novice en vba
    bonne journée
    rai

  9. #9
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour raicolin, re le forum
    la partie de code et ses explications, lesquells, j'espère seront suffisantes, mais tu ne dis pas si le code fonctionne chez toi
    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
    With Sheets("CUTTING DATA -Roof family") 'évite les répétitions
      Set Dl = .Range("C" & .Rows.Count).End(xlUp) 'derniere cellule utilisée en col C
      Set Plg = .Range("C2", Dl(1, 2)) 'une plage de C2 à D et dernière ligne
      Tbl = .Range("D2", Dl(1, 2)) 'une variable tableau stockant les valeurs de D
      .Range("D2", Dl(1, 2)).RemoveDuplicates Columns:=1, Header:=xlNo 'on élimine les doublon en D (Depuis excel 2007)
      Set Dl = .Range("D" & .Rows.Count).End(xlUp) 'derniere cellule utilisée en col D
      Tbdoublon = .Range("D2", Dl) 'une variable tableau stockant les valeurs de D modifiée (sans doublon)
      .Range("D2").Resize(UBound(Tbl)) = Tbl 'je rends les valeurs originales à D grace à la variable Tbl
      'ci-dessus pour "Resize", voir l'aide
      ReDim Tbresult(1 To UBound(Tbdoublon), 1 To 2) 'je redimensionne la variable tableau du nombre de valeurs sans doublon
      'sur 2 dimensions (voir le forum pour l'utilisation des tableau
      For x = 1 To UBound(Tbdoublon) 'je fais une boucle jusqu'à la fin du tableau
        Tbresult(x, 1) = Tbdoublon(x, 1) 'je donne les valeurs de Tbdoublon à la 1ère dimension de Tbrésult
        'ci-dessous je calcule les valeurs de la 2ème dimension avec SumiF (Somme.Si)
        Tbresult(x, 2) = WorksheetFunction.SumIf(Plg.Columns(2), Tbdoublon(x, 1), Plg.Columns(1))
      Next
      'et enfin je mets le résultat obtenu dans Feuil5, à partir de A2
      Sheets("Feuil5").Range("A2").Resize(UBound(Tbresult, 1), UBound(Tbresult, 2)) = Tbresult
     
    End With
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Points : 33
    Points
    33
    Par défaut
    Bonsoir casafayere
    le code fonctionne à merveille, merci encore de votre aide et des explications fournies
    bon weekend

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

Discussions similaires

  1. Somme des éléments d'une matrice
    Par acacia dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 12/11/2009, 12h27
  2. [MySQL] Somme des éléments d'une table
    Par menoulette dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 10/09/2009, 17h53
  3. la somme des lignes d'une colonne de StringGrid
    Par faniette dans le forum C++Builder
    Réponses: 12
    Dernier message: 26/05/2009, 10h08
  4. Somme des carrés d'une colonne d'une matrice
    Par didougna dans le forum MATLAB
    Réponses: 11
    Dernier message: 27/06/2008, 16h09
  5. somme des éléments d'une matrice
    Par virginie999 dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/06/2008, 21h14

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