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 d'une colonne d'un array


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut Somme d'une colonne d'un array
    Bonjour à tous,

    J'ai un petit soucis qui doit etre très stupide, mais je ne m'en sort pas!
    J'ai des données dans un array et j'aimerais faire la somme de la 3eme colonne de cet array. Comment dois je porcéder? Voici mon code:

    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
    Sub test()
     
    Dim nbre As Double
    Dim i As Integer
    Dim y As Integer
     
    nbre = Cells(Rows.Count, 1).End(xlUp).Row
     
    For i = 1 To nbre
     
    If Cells(i, 3) = "USD" Then
     
    ReDim KD(nbre, 3)
     
        KD(i, 1) = Cells(i, 2).Value
        KD(i, 2) = Cells(i, 4).Value
        KD(i, 3) = KD(i, 1) * KD(i, 2)
     
        range("SOMME")= '?????'''''''
     
     
    End If
    Next i
     
    End Sub

    Merci d'avance
    Cordialement,

  2. #2
    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
    La fonction Excel SOMMEPROD ne te va pas?
    =SOMMEPROD((C1:C20="USD")*B1:B20*D1:d20)
    Edit: Désolé
    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 test()
    Dim Nbre As Long, i As Long, k As Long
    Dim Kd() As Double, S As Double
    Dim Tb As Variant
     
    With Sheets("xx")
        Nbre = .Cells(.Rows.Count, 1).End(xlUp).Row
        Tb = .Range("A1:D" & Nbre)
        For i = 1 To Nbre
            If Tb(i, 3) = "USD" Then
                k = k + 1
                ReDim Preserve Kd(1 To 3, 1 To k)
                Kd(1, k) = Tb(i, 2)
                Kd(2, k) = Tb(i, 4)
                Kd(3, k) = Kd(1, k) * Kd(2, k)
                S = S + Kd(3, k)
            End If
        Next i
        .Range("Somme").Value = S
    End With
    End Sub

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut
    salut,

    En fait ce code est une version simplifiée de mon fichier. La vrai macro prend en compte plusieurs fichiers différents et plusieurs chose entre en compte. Pour faire simple, tous les jours j'ai des flux qui sont + ou -. Ces flux correspondent aux produits d'un nombre de part * une valeur. Ainsi j'ai,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Col H (= nombre de part) * Col N (valeur) = prix (+/-)
    Je cherche a indiquer dans une cell (ici range("somme")) la somme des produits. Au début j'ai donc fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.worksheetfunction.sumproduct
    mais plusieurs pb se posent:

    (1) les flux positifs et négatifs doivent étre séparés,
    (2) les flux peuvent être de différentes monnaies et doivent donc ête séparés,

    ainsi je doit avoir dans mon fichier:

    (1) Flux positif en EUR/USD/etc....
    (2) Flux négatif en EUR/USD/etc...

    J'ai donc séparer mon code par signe (positif vs négatif) et par monnaie.
    Je pensais que passer par un array serait plus simple. Comme je suis encore débutant, je n'ai pas bcp de solution à mes pb.

    PS: j'essaie ton code merci

    rebonjour,
    j'ai adapté ton code à mon fichier et il marche parfaitement sauf sur un point. Quand je recopie le mm code pour modifier une variable (ici USD contre EUR), la macro ne me sort pas le bon calcul. voici le code:

    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
     
    Sub test2()
    Dim Nbre As Long, i As Long, k As Long
    Dim Kd() As Double, S As Double
     
     
    With Sheets("Calcul")
        Nbre = .Cells(.Rows.Count, 1).End(xlUp).Row
        Tb = .Range("A1:Y" & Nbre)
        For i = 1 To Nbre
            If Tb(i, 16) = "EUR" Then
                If Tb(i, 11) > 0 Then
                k = k + 1
                ReDim Preserve Kd(1 To 3, 1 To k)
                Kd(1, k) = Tb(i, 11)
                Kd(2, k) = Tb(i, 17)
                Kd(3, k) = Kd(1, k) * Kd(2, k)
                S = S + Kd(3, k)
            End If
            End If
        Next i
        .Range("BuyEUR").Value = S
    End With
     
    With Sheets("Calcul")
        Nbre = .Cells(.Rows.Count, 1).End(xlUp).Row
        Tb = .Range("A1:Y" & Nbre)
        For i = 1 To Nbre
            If Tb(i, 16) = "USD" Then
                If Tb(i, 11) > 0 Then
                k = k + 1
                ReDim Preserve Kd(1 To 3, 1 To k)
                Kd(1, k) = Tb(i, 11)
                Kd(2, k) = Tb(i, 17)
                Kd(3, k) = Kd(1, k) * Kd(2, k)
                S = S + Kd(3, k)
            End If
            End If
        Next i
        .Range("BuyUSD").Value = S
    End With
     
    End Sub

    saurais tu ou est ce que j'ai modifier qqch qu'il ne fallait pas?

    Ok je pense avoir trouvé en fin de compte....j'ai change la variable S par une autre

  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
    Sans vba et directement par formule sur ta feuille avec formule
    =SOMMEPROD((p1:p200="USD")*(k1:k200>0)*k1:k200*q1:q200)
    Ou avec vba mais en appliquant la fonction sommeprod
    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 test2()
    Dim Nbre As Long
     
    With Sheets("Calcul")
        Nbre = .Cells(.Rows.Count, 1).End(xlUp).Row
        With .Range("BuyEUR")
            .Formula = "=SUMPRODUCT((P1:P" & Nbre & "=""EUR"")*(K1:K" & Nbre & ">0)*K1:K" & Nbre & "*Q1:Q" & Nbre & ")"
            .Value = .Value
        End With
        With .Range("BuyUSD")
            .Formula = "=SUMPRODUCT((P1:P" & Nbre & "=""USD"")*(K1:K" & Nbre & ">0)*K1:K" & Nbre & "*Q1:Q" & Nbre & ")"
            .Value = .Value
        End With
    End With

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 09/08/2007, 21h15
  2. faire la somme d'une colonne d'une listbox
    Par Namson dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 25/04/2007, 23h34
  3. Réponses: 10
    Dernier message: 03/10/2006, 20h19
  4. comment calculer la somme d'une colonne d'un dbgrid
    Par kirty dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/07/2006, 20h55

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