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 :

Problème avec mon code (moyenne parametrable) [XL-2002]


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 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Par défaut Problème avec mon code (moyenne parametrable)
    Bonjour à toutes et à tous,
    Faisons court faisons bien
    Je souhaite moyenner une suite de données suivant un ‘pas ‘ paramétrable par l’exécutant, exemple :
    Ma série dans la colonne A
    1
    5
    4
    7
    21
    5
    3
    6
    54
    1
    2
    5
    Un ‘pas ‘ de 3 par exemple, et on obtient dans la colonne B:
    (1+5+4)/3 c'est-à-dire 3.3333
    (7+21+5)/3
    (3+6+54)/3
    (1+2+5)/3

    Si l’opérateur choisi un ‘pas’ de 4 :
    (1+5+4+7)/4
    (21+5+6+54)/4
    La quantité de données de la colonne B = ENT(NBVAL(A:A)/’pas’)


    Le code auquel j’ai pensé est le suivant :

    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
    Public Sub paramaverage()
    Dim sht As Worksheet
    Dim LastLigne As Long
    Dim i, Step1, StepRef As Integer
    Set sht = Sheets("MaFeuille_1")
     
     
    With sht
    Step1 = StepRef = .Cells(3, 5)
    .Cells(1, 17) = Application.Average(.Range("A" & 1 & ":A" & StepRef).Value)
     
    LastLigne = .Cells(5, 5) '.Range("A65536").End(xlUp).Row
     
    For i = 2 To LastLigne Step 1
        .Cells(i, 17).Value = Application.Average(.Range("A" & (Step1 - StepRef) & ":A" & Step1).Value)
        Step1 = Step1 + StepRef
    Next
    End With
     
    End Sub
    Vous l’aurez bien compris, ma macro ne fonctionne pas… et n’étant qu’un novice ça n’aide en rien.

    Un grand merci en avance pour ceux qui liront mon post, ceux qui essayeront de m’aider, et pour ceux qui réussiront

    A bientôt !

    Cheerio

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Salut,

    Un exemple a adapter a ton cas.
    J'ai mis en colonne A les nombres en colonne B les moyennes
    et il faut saisir en C2 le pas avant de lancer la macro.

    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 CalculMoyenne()
        Dim Pas As Byte, CptPas As Byte
        Dim Cpt As Integer, CptResult As Integer
        Dim Nombre As Double
     
        Pas = Range("C2").Value
        Columns(2).ClearContents
        CptResult = 1
        Cpt = 1
        While Cpt <= Range("A65536").End(xlUp).Row
            Nombre = 0
            For CptPas = 1 To Pas
                Nombre = Nombre + Range("A" & Cpt + CptPas - 1).Value
            Next CptPas
     
            Cpt = Cpt + Pas
            Range("B" & CptResult).Value = Nombre / Pas
            CptResult = CptResult + 1
        Wend
    End Sub

  3. #3
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Tu peux utiliser une inputbox pour définir la valeur du pas:

    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
    Sub mo()
     
    Boite = InputBox("Choisisez une valeure pour le pas", "Valeure du Pas")
     
    i = 1
    If IsNumeric(Boite) Then
    Do Until i > Range("A65536").End(xlUp).Row
    Moy = WorksheetFunction.Average(Range(Cells(i, 1), Cells(i + 2, 1)))
    Cells(i + 2, 2).Value = Moy
     
    i = i + Boite
    Loop
     
    End If
     
    End Sub

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

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Par défaut
    Citation Envoyé par Minick Voir le message
    Salut,

    Un exemple a adapter a ton cas.
    J'ai mis en colonne A les nombres en colonne B les moyennes
    et il faut saisir en C2 le pas avant de lancer la macro.

    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 CalculMoyenne()
        Dim Pas As Byte, CptPas As Byte
        Dim Cpt As Integer, CptResult As Integer
        Dim Nombre As Double
     
        Pas = Range("C2").Value
        Columns(2).ClearContents
        CptResult = 1
        Cpt = 1
        While Cpt <= Range("A65536").End(xlUp).Row
            Nombre = 0
            For CptPas = 1 To Pas
                Nombre = Nombre + Range("A" & Cpt + CptPas - 1).Value
            Next CptPas
     
            Cpt = Cpt + Pas
            Range("B" & CptResult).Value = Nombre / Pas
            CptResult = CptResult + 1
        Wend
    End Sub

    Merci beaucoup, je teste tout ça...

    Citation Envoyé par diude54 Voir le message
    Tu peux utiliser une inputbox pour définir la valeur du pas:

    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
    Sub mo()
     
    Boite = InputBox("Choisisez une valeure pour le pas", "Valeure du Pas")
     
    i = 1
    If IsNumeric(Boite) Then
    Do Until i > Range("A65536").End(xlUp).Row
    Moy = WorksheetFunction.Average(Range(Cells(i, 1), Cells(i + 2, 1)))
    Cells(i + 2, 2).Value = Moy
     
    i = i + Boite
    Loop
     
    End If
     
    End Sub
    Merci beaucoup, je teste également le votre, j'y intègre un timer, car je dois faire ça pour 63000 lignes...
    Merci beaucoup

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

Discussions similaires

  1. [JDOM] problème avec mon code
    Par aroua dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 30/04/2008, 13h36
  2. problème avec mon code pour accès au serveur ftp
    Par mimi51340 dans le forum Général Java
    Réponses: 1
    Dernier message: 03/03/2008, 23h24
  3. Problème avec mon code - un aperçu
    Par nsimon70 dans le forum Flash
    Réponses: 1
    Dernier message: 14/02/2008, 12h47
  4. [MySQL] problème avec mon code (envoi données) ?
    Par cuisto44000 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/12/2007, 09h45
  5. probléme avec mon code JAVA et MYSQL
    Par ulysse031 dans le forum JDBC
    Réponses: 5
    Dernier message: 10/05/2007, 00h46

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