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 :

pb range dans fonction sum [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Par défaut pb range dans fonction sum
    Bonjour,
    j'ai un pb avec l'objet range. Mais peut être y a t'il une autre solution à mon pb. Je ne sais pas???

    Alors j'expose mon pb
    Pb: à la base, je rentre le nb de jours (userform) pour calculer une moyenne. Puis, je veux calculer la moyenne en sélectionnant un certain nombre de cellules (range).
    Mais le pb, c'est que suivant la cellule ou j'affiche le résultat de la moyenne, la somme des cellules (range) change aussi.

    Pour faire clair, j'aimerai faire varier la sélection des cellules quand je fais la somme (range) dans différentes cellules.

    Message d'erreur sur le range. C'est normal puisque cells renvoie une valeur.
    Mais que faut il mettre pour sortir des lignes et des colonnes variables suivant la cellule ou je fais mon calcul????

    merci bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function moyenne_arith(ByVal moyenne As Integer, decalcol As Integer, cellligne As Integer, cellcol As Integer) As Integer
    'decalcol permet de definir à quelle colonne on fait reference relativement à la cellule
    'à partir de cette cellule (premiere cellule de calcul), on remonte autant de fois pour calculer la moyenne.
    Dim somme As Integer
    somme = WorksheetFunction.Sum(Range("cells(cellligne-moyenne+1,cellcol+decalcol):cells(cellligne,cellcol+decalcol)"))
    'somme ="cells(celligne-moyenne,cellcol+decalcol):cells(celligne,cellcol+decalcol)"))
    moyenne_arith = somme / moyenne
    'Range ("cells(celligne-moyenne,cellcol-decalcol):cells(celligne,cellcol-decalcol)")
    End Function

  2. #2
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 20
    Par défaut
    Salut,

    Je n'ai pas encore vérifié tes calculs, mais déjà, tes guillemets ne sont pas corrects..., et donc ta fonction non plus. Essaye de remplacer ton calcul de somme par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    somme = WorksheetFunction.Sum(Range(Cells(cellligne - moyenne + 1, cellcol + decalcol), Cells(cellligne, cellcol + decalcol)))
    Si avec ça cela ne fonctionne pas, donne des valeurs types des entrées de ta fonction

  3. #3
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    Si tu veux calculer une moyenne en utilisant "WorksheetFunction" pourquoi ne pas calculer directement la moyenne ?
    Un exemple :

    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
    Dim MaPlage As Range
    Dim lig1 As Long, lig2 As Long
    Dim col1 As Integer, col2 As Integer
    Dim moyenne_arith  As Double
     
    lig1 = 1
    col1 = 8
    lig2 = 50
    col2 = 8
     
    Set MaPlage = Range(Cells(lig1, col1), Cells(lig2, col2))
     
    moyenne_arith = WorksheetFunction.Average(MaPlage)
     
    MsgBox moyenne_arith

    Edit : un exemple plus complet :

    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
     
    Dim MaPlage As Range
    Dim lig1 As Long, lig2 As Long
    Dim col1 As Integer, col2 As Integer
    Dim moyenne_arith  As Double
     
    Dim Nombre As Long, Somme As Double, Nombrenum As Long, Vmoy As Double
     
    lig1 = 1
    col1 = 8
    lig2 = 50
    col2 = 8
     
    Set MaPlage = Range(Cells(lig1, col1), Cells(lig2, col2))
     
    moyenne_arith = WorksheetFunction.Average(MaPlage)
    Somme = WorksheetFunction.Sum(MaPlage)
    Nombre = MaPlage.Count
     
    Nombre = MaPlage.SpecialCells(xlCellTypeBlanks).Count
    Nombrenum = MaPlage.SpecialCells(xlCellTypeConstants).Count
    Vmoy = Somme / Nombrenum
     
     
    MsgBox "La moyenne est : " & moyenne_arith & vbCr _
    & "La somme est : " & Somme & vbCr _
    & "Le nombre est (blancs compris)    : " & Nombre & vbCr _
    & "Le nombre est (seuls les nombres): " & Nombrenum & vbCr _
    & "Encore une moyenne : " & Vmoy & vbCr _
    & "Pour la plage : " & MaPlage.Address
     
     
     
    End Sub
    Edit2 : une autre façon de faire en bouclant sur une plage :

    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
    Dim MaPlage As Range, MaCel As Range
    Dim lig1 As Long, lig2 As Long
    Dim col1 As Integer, col2 As Integer
    Dim moyenne_arith  As Double
     
    Dim Nombre As Long, Somme As Double, Nombrenum As Long, Vmoy As Double
     
    lig1 = 1
    col1 = 8
    lig2 = 50
    col2 = 8
     
    Set MaPlage = Range(Cells(lig1, col1), Cells(lig2, col2))
     
    For Each MaCel In MaPlage
    If IsNumeric(MaCel) And MaCel <> "" Then ' MaCel <> empty pour ne pas prendre en compte les zéros
        Nombrenum = Nombrenum + 1
        Somme = Somme + MaCel
    End If
    Next
     
    moyenne_arith = Somme / Nombrenum
     
    MsgBox "La moyenne est : " & moyenne_arith & vbCr _
    & "La somme est : " & Somme & vbCr _
    & "Le nombre est (seuls les nombres): " & Nombrenum & vbCr _
    & "Pour la plage : " & MaPlage.Address

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Par défaut
    Merci bien, ça marche maintenant.
    Je n'ai pas tout compris dans les exemples.
    Mais j'y reviendrai.

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

Discussions similaires

  1. Parametre Range dans une fonction
    Par nox1492 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/11/2007, 20h53
  2. explication sur le fonction Sum dans qreport
    Par youcef_b_dz dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/05/2007, 13h04
  3. Comment écrire dans une cellule la fonction SUM en vba?
    Par Subkill dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/02/2007, 19h24
  4. [ACCESS2002][fonction sum dans une requête]
    Par louroulou dans le forum Access
    Réponses: 1
    Dernier message: 14/06/2006, 09h26
  5. [VBA-E] Fonction sum() dans une cellule
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/12/2002, 10h18

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