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 élements d'un tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut Somme des élements d'un tableau
    Bonjour,

    L'aide en ligne précise pour cette fonction : WorksheetFunction.Sum, méthode
    Si un argument est un tableau de référence, seuls les nombres dans ce tableau ou cette référence sont pris en compte

    J'ai beau chercher mais , je ne trouve pas comment établir < un tableau de référence >

    La construction du tableau a été effectuée comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim MaPlage As Range, PlageSum As Range
    Dim V As Variant, i As Byte, EUR As Double
     
        '* Définir la plage
        Set MaPlage = Worksheets("Data").Range("B20:O28")
     
        '* Tableau de travail
        V = MaPlage
    Je souhaiterais que ce < un tableau de référence > reprenne les références
    suivantes : les 8 lignes de la colonne 12

    V(1, 12), V(2, 12), V(3, 12), V(4, 12), V(5, 12), V(6, 12), V(7, 12), V(8, 12)

    En fait je cherche a construire une fonction qui effectuerait le total du tableau de référence qui serait transmis en paramêtre j'obtiendrait donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    V(9, 12) = WorksheetFunction.Sum( Tableau de référence )
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    V(9, 12) = WorksheetFunction.Sum(V(1, 12), V(2, 12), V(3, 12), V(4, 12), V(5, 12), V(6, 12), V(7, 12), V(8, 12))
    Merci d'avance de votre aide

  2. #2
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    bonjour,
    pourquoi ne pas mettre directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(9, 12) = WorksheetFunction.Sum(Range("L1:L8"))
    tu auras dans la cellule L9 la somme des cellule L1 à L8, sans 'tableau'.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    Bonsoir

    Comme je l'ai précisé dans mon exposé, mon code s'applique a un tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    '* Tableau de travail
    V = MaPlage
    Je ne saurais donc pas appliquer le code que vous me proposez

    Cordialement

  4. #4
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonsoir à tous

    Si j'ai bien compris, mais peut-être que !!!!, essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    masomme01 = Application.WorksheetFunction.Sum(maplage)
    Eric

  5. #5
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Je mettrais plutôt, pour totaliser la colonne 12 de la zone :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    masomme01 = Application.WorksheetFunction.Sum(maplage.Range("L1:L8"))

  6. #6
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonsoir à tous

    Pour être plus clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
    Dim maplage As Range
    Dim masomme01 As Integer
     
    Sub masomme_plage()
    Set maplage = Sheets("Feuil1").Range("A1:A4")
    masomme01 = Application.WorksheetFunction.Sum(maplage)
    End Sub
    après il suffit d'adapter, mais j'ai peut-être mal compris l'exposé de Sogestion
    Eric

  7. #7
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Citation Envoyé par Sogestion Voir le message
    ...
    Set MaPlage = Worksheets("Data").Range("B20:O28")
    ...
    Je souhaiterais que ce < un tableau de référence > reprenne les références
    suivantes : les 8 lignes de la colonne 12
    ...
    d'où ma proposition de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    masomme01 = Application.WorksheetFunction.Sum(MaPlage.Range("L1:L8"))

  8. #8
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    En fait je cherche a construire une fonction qui effectuerait le total du tableau de référence qui serait transmis en paramêtre j'obtiendrait donc

    V(9, 12) = WorksheetFunction.Sum( Tableau de référence )
    v(9,12) = cellule L9 (ligne 9, 12 = colonne L). Tu travails avec la feuil Data.
    Tu veux la somme de tableau de référence mais ce que tu appelles ton tableau n'est rien d'autre qu'un "range" ou une plage de cellule.
    Je souhaiterais que ce < un tableau de référence > reprenne les références
    suivantes : les 8 lignes de la colonne 12

    V(1, 12), V(2, 12), V(3, 12), V(4, 12), V(5, 12), V(6, 12), V(7, 12), V(8, 12)
    ici tu fais référence aux lignes 1 à 8 de la colonne 12 donc la plage L1:L8

    pour résumer: tu veux dans la cellule L9, la somme de la plage de cellule qui se trouve au-dessus à savoir L1:L8 ou sinon je n'ai rien compris.

    essaie ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test_somme()
    'je travail avec la feuille Data
    With Sheets("Data")
     
        'je calcul la somme de la plage L1:L8 et je met le résultat
        'en C9 de la feuille Data
        .Range("L9") = WorksheetFunction.Sum(.Range("L1:L8"))
    End With
    End Sub
    note:
    L'aide en ligne précise pour cette fonction : WorksheetFunction.Sum, méthode
    Si un argument est un tableau de référence, seuls les nombres dans ce tableau ou cette référence sont pris en compte
    ce qui veut dire que dans ta plage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    '* Définir la plage
    Set MaPlage = Worksheets("Data").Range("B20:O28")
    il fera la somme de toutes les cellules ou il y a un nombre.
    j'ai fais l'expérience : de A1:A7 j'ai mis les jours de la semaine, B1:B8 des nombres, en C1:C8 les mois de l'année. Pour la plage A1:C8, j'ai écrit ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("Feuil1")
    .Range("B9") = WorksheetFunction.Sum(.Range("A1:C8"))
    End With
    j'ai bien la somme des nombres.

    Maintenant je viens de penser à un truc.
    tu définies la plage B20:O28. A quel cellule correspondrait v(1,1) pour toi?
    à la cellule B20 ?

  9. #9
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    Bonsoir

    Comme je l'ai signalé dans mon post initial

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim MaPlage As Range, PlageSum As Range
    Dim V As Variant, i As Byte, EUR As Double
     
        '* Définir la plage
        Set MaPlage = Worksheets("Data").Range("B20:O28")
     
        '* Tableau de travail
        V = MaPlage
    toute ma procédure s'exécute donc sur un tableau et non sur la feuille excel

    Suivant l'aide en ligne :

    Tableau
    Ensemble d'éléments, indexés séquentiellement, ayant le même type de données intrinsèque.
    Chaque élément d'un tableau est associé à un numéro d›index qui l'identifie de manière univoque.
    Les modifications apportées à un élément de tableau n'affectent pas les autres éléments.
    Ce n'est qu'en fin de procédure que
    MaPlage = Worksheets("Data").Range("B20:O28")
    est mise a jour par l'instruction inverse

    '* Mise a jour de la plage
    MaPlage = V


    En réponse a la question

    Maintenant je viens de penser à un truc.
    tu définies la plage B20:O28. A quel cellule correspondrait v(1,1) pour toi?
    à la cellule B20 ?
    v(1,1) ne correspond a aucune cellule

    V étant le Tableau < Dim V As Variant >
    V(1,1) = Ligne 1/ Colonne 1 ) du tableau


    Vous conviendrez que les lignes/Colonnes d'un tableau ne corresponde en rien
    aux lignes et colonnes définies dans un < Range >

    v(9,12) = cellule L9 (ligne 9, 12 = colonne L). Tu travails avec la feuil Data.
    Tu veux la somme de tableau de référence mais ce que tu appelles ton tableau n'est rien d'autre qu'un "range" ou une plage de cellule.
    Désolé mais ma procédure travaille sur les lignes/colonnes d'un tableau et non un "range" ou une plage de cellule.

    Donc v(9,12) égale la Ligne n° 9 or Maplage précise
    Set MaPlage = Worksheets("Data").Range("B20:O28")
    la dernière ligne de cette plage est n° 28

    Cordialement

  10. #10
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    autant pour moi

    je ne pense pas que cela puisse ce faire sinon de faire comme tu l'as écrits dans ton premier post.

    il te reste soit à faire une boucle sur les lignes de ta colonne 12
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 1 To 8
    vresult = vresult + V(i, 12)
    Next i
     
    V(9, 12) = vresult
    soit créer un autre tableau :'tabref' et faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim V As Variant, tabref As Variant
    V = Sheets("Feuil1").Range("B20:O28")
    tabref = Sheets("Feuil1").Range("M20:M27") 'correspondrait à (V(1,12):V(8,12))
    V(9, 12) = WorksheetFunction.Sum(tabref)

  11. #11
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    Bonsoir Hervé

    Merci pour cette procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim V As Variant, tabref As Variant
    V = Sheets("Feuil1").Range("B20:O28")
    tabref = Sheets("Feuil1").Range("M20:M27") 'correspondrait à (V(1,12):V(8,12))
    V(9, 12) = WorksheetFunction.Sum(tabref)
    d'autant qu'elle m'a permis de trouver la réponse a ma demande initiale

    L'aide en ligne précise pour cette fonction : WorksheetFunction.Sum, méthode
    Si un argument est un tableau de référence, seuls les nombres dans ce tableau ou cette référence sont pris en compte
    Etablir un tableau de référence est en fait assez simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DIM PlageSum as Variant
     
    PlageSum = Array(V(1, 12), V(2, 12), V(3, 12), V(4, 12), V(5, 12), V(6, 12), V(7, 12), V(8, 12))
    V(9, 12) =  WorksheetFunction.Sum(PlageSum)
    Personnellement j'opterais pour votre fonction en raion de sa lisibilité, il faudra toutefois être attentif a la mise a jour préalable de la plage : < MaPlage = V >

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    V(9, 12) = WorksheetFunction.Sum([M20:M27])
    Bonne soirée et bon WE

    Cordialement
    Albert

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

Discussions similaires

  1. [débutant] Somme des éléments d'un tableau
    Par Kazuhiko$ dans le forum Caml
    Réponses: 5
    Dernier message: 19/11/2008, 11h29
  2. sommes des cases d'un tableau de taille variable
    Par Bubale dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2008, 00h18
  3. Somme des elements d'un tableau multi-dimension
    Par kika18 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/12/2007, 11h19
  4. Supprimer des élements d'un tableau
    Par glouffy6 dans le forum Langage
    Réponses: 2
    Dernier message: 17/07/2007, 11h49
  5. [Tableaux] Somme des éléments d'un tableau
    Par brazilpalace dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2006, 12h17

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