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 :

Variable Tableau ==> =somme( de à ) [XL-2007]


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 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 101
    Par défaut Variable Tableau ==> =somme( de à )
    Bonjour à toutes et tous,

    Je crée une variable tableau
    Pour avoir le total par ligne, jusqu'à présent je fais une boucle de 1 à 12 ; mais existe t-il une solution plus simple comme par ex : et où la 13eme colonne serait la somme de 1 à 12 sans utiliser une boucle ? (je cherche à éviter les imbrications de boucles...)

    Merci par avance !

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Salut,

    pour un tableau à une dimension:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub testSommeTableau()
        Dim varTab As Variant
        Dim somme As Double
     
        ' créé un tableau de doubles
        varTab = Array(1#, 2#, 3#, 4#, 5#, 6#, 7#, 8#, 9#)
     
        somme = Application.WorksheetFunction.Sum(varTab)
     
    End Sub
    A adapter pour ton tableau à 2 dimensions.
    Cordialement,

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 101
    Par défaut
    Citation Envoyé par Philippe PONS Voir le message
    Salut,

    pour un tableau à une dimension:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub testSommeTableau()
        Dim varTab As Variant
        Dim somme As Double
     
        ' créé un tableau de doubles
        varTab = Array(1#, 2#, 3#, 4#, 5#, 6#, 7#, 8#, 9#)
     
        somme = Application.WorksheetFunction.Sum(varTab)
     
    End Sub
    A adapter pour ton tableau à 2 dimensions.
    Cordialement,
    Si j'ai compris ce que tu as créé , je suis tenu par array (plus de variable possible ?) ... en fait je ne connais pas cette écriture array 1# etc ... la réponse s'y trouve ?

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    J'ai utilisé Array pour créer rapidement un tableau, et montrer comment faire la somme des éléments du tableau.
    Le # permet simplement de spécifier le type de donnée, et dire que les nombres sont de type Double(nombres à virgule!)
    Mais dans ton cas, tu dois certainement remplir ton tableau d'une autre façon!
    Cordialement,

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 101
    Par défaut
    Citation Envoyé par Philippe PONS Voir le message
    J'ai utilisé Array pour créer rapidement un tableau, et montrer comment faire la somme des éléments du tableau.
    Le # permet simplement de spécifier le type de donnée, et dire que les nombres sont de type Double(nombres à virgule!)
    Mais dans ton cas, tu dois certainement remplir ton tableau d'une autre façon!
    Cordialement,
    Effectivement !!! mais je ne l'avais pas compris !! tout est OK !
    Merci beaucoup

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    T'es dur en affaire !

    Comme tu le constates, j'ai utilisé des Fonctions de feuille de calcul (Somme, Index) et un transpose.
    Ce sont des fonctions ne pouvant dépasser la dimension 2 du coup.

    Si t'as une paire de chaussure, tu peux pas chausser trois pieds en même temps.

    pour des dimensions supplémentaires ... il va falloir préciser un peu ton contexte d'utilisation, histoire d'éviter les usines à gaz.

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tout dépend de ce que tu veux faire.

    voici deux exemples

    1) avoir directement dans le tableau la somme de tes lignes dans une colonne supplémentaire

    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
    Sub toto()
    Dim UnTab(1 To 20, 1 To 13)
    Dim i As Long, j As Long
     
    'remplissage du tableau pour avoir des données
    For i = LBound(UnTab, 1) To UBound(UnTab, 1)
        'on ne remplit pas la dernière colonne
        For j = LBound(UnTab, 2) To UBound(UnTab, 2) - 1
            UnTab(i, j) = i + j
        Next j
    Next i
     
    ' pour chaque ligne du tableau
    For i = LBound(UnTab, 1) To UBound(UnTab, 1)
        ' la dernière colonne = la somme des autres colonnes de la ligne
        UnTab(i, UBound(UnTab, 2)) = Application.WorksheetFunction.Sum(Application.Index(Application.Transpose(UnTab), , i))
    Next i
     
    ' écriture du résultat pour vérifier
    With ThisWorkbook
        On Error Resume Next
            Application.DisplayAlerts = False
            .Worksheets("DEMO").Delete
            Application.DisplayAlerts = True
        On Error GoTo 0
     
        With .Worksheets.Add
            .Name = "DEMO"
            .Cells(1, 1).Resize(20, 13).Value = UnTab
        End With
    End With
     
    End Sub

    2) pas besoin de stocker les résultats, on veut juste appeler la somme d'une ligne à la volée

    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
    Sub toto()
    Dim UnTab(1 To 20, 1 To 12)
    Dim i As Long, j As Long
    Dim LigneSomme As Long
     
    ' on va prendre la somme de la ligne 4 pour l'exemple
    ' (mais une boucle ou plusieurs lignes c'est possible et simple à faire)
    LigneSomme = 4
     
    'remplissage du tableau pour avoir des données
    For i = LBound(UnTab, 1) To UBound(UnTab, 1)
        For j = LBound(UnTab, 2) To UBound(UnTab, 2)
            UnTab(i, j) = i + j
        Next j
    Next i
     
    MsgBox "La somme de la ligne " & LigneSomme & " est : " & Application.WorksheetFunction.Sum(Application.Index(Application.Transpose(UnTab), , LigneSomme))
     
    End Sub

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 101
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    tout dépend de ce que tu veux faire.

    voici deux exemples

    1) avoir directement dans le tableau la somme de tes lignes dans une colonne supplémentaire

    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
    Sub toto()
    Dim UnTab(1 To 20, 1 To 13)
    Dim i As Long, j As Long
     
    'remplissage du tableau pour avoir des données
    For i = LBound(UnTab, 1) To UBound(UnTab, 1)
        'on ne remplit pas la dernière colonne
        For j = LBound(UnTab, 2) To UBound(UnTab, 2) - 1
            UnTab(i, j) = i + j
        Next j
    Next i
     
    ' pour chaque ligne du tableau
    For i = LBound(UnTab, 1) To UBound(UnTab, 1)
        ' la dernière colonne = la somme des autres colonnes de la ligne
        UnTab(i, UBound(UnTab, 2)) = Application.WorksheetFunction.Sum(Application.Index(Application.Transpose(UnTab), , i))
    Next i
     
    ' écriture du résultat pour vérifier
    With ThisWorkbook
        On Error Resume Next
            Application.DisplayAlerts = False
            .Worksheets("DEMO").Delete
            Application.DisplayAlerts = True
        On Error GoTo 0
     
        With .Worksheets.Add
            .Name = "DEMO"
            .Cells(1, 1).Resize(20, 13).Value = UnTab
        End With
    End With
     
    End Sub

    2) pas besoin de stocker les résultats, on veut juste appeler la somme d'une ligne à la volée

    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
    Sub toto()
    Dim UnTab(1 To 20, 1 To 12)
    Dim i As Long, j As Long
    Dim LigneSomme As Long
     
    ' on va prendre la somme de la ligne 4 pour l'exemple
    ' (mais une boucle ou plusieurs lignes c'est possible et simple à faire)
    LigneSomme = 4
     
    'remplissage du tableau pour avoir des données
    For i = LBound(UnTab, 1) To UBound(UnTab, 1)
        For j = LBound(UnTab, 2) To UBound(UnTab, 2)
            UnTab(i, j) = i + j
        Next j
    Next i
     
    MsgBox "La somme de la ligne " & LigneSomme & " est : " & Application.WorksheetFunction.Sum(Application.Index(Application.Transpose(UnTab), , LigneSomme))
     
    End Sub
    Merci beaucoup !!
    C'est SUPER !!! je viens de le tester sur mon tableau et c'est parfait ! pour compléter ma question ... ce que tu as écris fonctionne avec un tableau à 2 dimensions mais si j'ai un tableau à 3 dimensions est ce encore possible ??? (ma question, parce que j'ai vu que tu utilises "transpose" ...)

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

Discussions similaires

  1. [XL-2007] Variable tableau et somme.si
    Par neiluj26 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/10/2011, 15h41
  2. [Tableaux] récuperer une variable tableau passé par URL
    Par molesqualeux dans le forum Langage
    Réponses: 2
    Dernier message: 23/12/2005, 01h12
  3. variables tableau dans requettes mysql ... et affichage
    Par mulbek dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/10/2005, 16h29
  4. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30
  5. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55

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