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 :

Macro : Calcul de moyennes par semaine


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Nord
    Inscrit en
    Octobre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Nord
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Macro : Calcul de moyennes par semaine
    Bonjour,

    Après de multiples recherches en vain et de multiples prises de têtes car je suis très mauvais en VBA, je vous sollicite pour me proposer une solution.
    Dans le cadre du boulot, j’utilise de plus ou moins grandes bases de données et j’aimerais, pour des raisons de productivité, avoir une macro qui me permette :

    • de calculer la moyenne de la colonne L pour chaque numéro de semaine (colonne E) automatiquement dans la colonne N
    • de calculer MAX-MIN de la colonne L pour chaque numéro de semaine (colonne E) dans la colonne P


    Vous trouverez, en pièce jointe, un exemple de fichier.
    Merci d’avance pour votre temps consacré à ma demande et m’éviter un burn-out .

    Bonne fin de journée.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Bonjour,

    Je suis fermement convaincu que l'on peux expliquer ce que l'on veut faire en postant une ou plusieurs image, ainsi que des extraits de code sur lesquelles on a travaillé.

    Peux tu poster une image de ce que tu veux faire, avec (si existant) un bout de code qui fait (ou qui essaye) de faire ce que tu veux ?
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim MesStat(5) as Double
     
    For i = 1 to Range("L1").End(xlDown).Row
       if Cells(i,14)=15 then
          MesStat(1) = MesStat(1) + 1
          MesStat(2) = MesStat(2) + Cells(i,12)
          If MesStat(3) > Cells(i,12) Then MesStat(3) = Cells(i,12)
          If MesStat(5) < Cells(i,12) Then MesStat(5) = Cells(i,12)
       End If
    Next i
    MesStat(4) = MesStat(2) / MesStat(1)
    Tu remplaces "15" par le numéro de semaine que tu souhaites.

    A la fin, la variable MesStat te donne les statistiques :
    Indice 1 : nombre
    Indice 2 : somme
    Indice 3 : Min
    Indice 4 : Moyenne
    Indice 5 : Max
    Que tu peux placer dans les cellules que tu veux.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Nord
    Inscrit en
    Octobre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Nord
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci Menhir je vais essayer d'en tirer quelque chose même si je ne comprends pas grand chose .

    Nicho Chg, je n'ai pas posté de codes puisque les seuls codes sur lesquels j'ai travaillé étaient des codes issus du forum et que j'ai essayé d'adapter à mon cas. Malheureusement, je n'y suis pas arrivé. Et pour ma défense c'est seulement la deuxième macro que j'essaye de réaliser sans aucunes connaissances. Je démarre de très loin.

    Bonne soirée.

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par AsylumPan Voir le message
    Merci Menhir je vais essayer d'en tirer quelque chose même si je ne comprends pas grand chose .
    Je n'ai pourtant utiliser que des fonction de base très simples.
    S'il y en a que tu ne comprends pas, regarde dans l'aide VBA intégrée à Excel.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Points : 5
    Points
    5
    Par défaut solution possible
    Bonjour,

    Normalement , il serait judicieux de faire une tableau de synthèse des moyennes, max,min dans une autre feuille car les résultats sont dupliqués par ligne.
    Cependant, il reste possible de s'en tirer sans trop de difficulté :

    Pour le calulde la moyenne on peut utiliser les fonctions existantes : somme.si ou somme.si.ens et nb.si de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SOMME.SI.ENS($L$2:$L$5000;$E$2:$E$5000;$E2)/NB.SI($E$2:$E$5000;$E2)
    Le $ indique le membre de l'adresse invariant lorsque l'on va dupliquer la cellule. La fonction moyenne.si n'exitant pas , il convient de la recréer en partant de la somme divisé par la moyenne.

    Pour la partie Max et min , il me semble nécessaire d'écrire les fonction équivalente à la moyenne de la manière suivante :
    1/ il faut créer une colonne pour max et une colonne pour Min quitte à en faire la concaténation dans une 3eme si cela reste ton choix :

    2/ les fonction minsi et maxsi restent similaires ... il y a certainement possibilité de les optimiser mais cela doit répondre à ton besoin :

    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
    44
    45
    Function maxsi(rgemax As Range, rge As Range, cond As Variant)
    Function maxsi(rgemax As Range, rge As Range, cond As Variant)
    ' Rgemax : ensemble de cellule sur lesquelles portent le calcul du Max
    ' rge : ensemble des cellules sur lesquelles pourtent le test
    ' cond : valeur de cellule qui sert de condition sur rge
     
    Dim cel As Range
    Dim i As Integer
     
    i = 1
    maxsi = rgemax.Item(1, 1)
        For Each cel In rge
            If cel.Value = cond Then
                If maxsi < rgemax.Item(i, 1).Value Then
                    maxsi = rgemax.Item(i, 1).Value
                End If
     
            End If
            i = i + 1
        Next
     
     
     
    End Function
    Function minsi(rgemin As Range, rge As Range, cond As Variant) As Variant
    ' Rgemin : ensemble de cellule sur lesquelles portent le calcul du Min
    ' rge : ensemble des cellules sur lesquelles pourtent le test
    ' cond : valeur de cellule qui sert de condition sur rge
     
    Dim cel As Range
    Dim i As Integer
     
    i = 1
    minsi = rgemin.Item(1, 1)
        For Each cel In rge
            If cel.Value = cond Then
                If minsi < rgemin.Item(i, 1).Value Then
                    minsi = rgemin.Item(i, 1).Value
                End If
     
            End If
            i = i + 1
        Next
     
    End Function
    L'utilisation dans la cellule se fait de la même façon que précédemment pour la moyenne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =maxsi($H$2:$H$5000;$E$2:$E$5000;$E2)
    Nota : remplacé le 5000 par la valeur de la dernière ligne de ton tableau

  7. #7
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par cg061101 Voir le message
    Pour la partie Max et min , il me semble nécessaire d'écrire les fonction
    Ca peut se règler de manière classique en passant par les fonctions matricielles :
    En prenant 15 comme numéro de semaine et en supposant que tes données vont de la ligne 1 à 100 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MAX(SI($E$1:$E$100=15;$L$1:$L$100;""))
    A valider comme une fonction matricielle avec Ctrl + Shift + Entrée

    En remplaçant MAX par MIN ou MOYENNE, on peut avoir le minimum ou la moyenne.

    Mais ce n'est pas la solution que j'ai proposé de prime abord puisque AsylumPan demandait une macro.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

Discussions similaires

  1. [Débutant] Comment Calculer un total par semaine ?
    Par Ys6BcinMZrSO dans le forum ADO.NET
    Réponses: 1
    Dernier message: 21/03/2013, 13h55
  2. exécuter une macro 1 seule fois par semaine ?
    Par deby23 dans le forum VBA Access
    Réponses: 9
    Dernier message: 20/12/2012, 11h22
  3. requete calcul heures travaillées par semaine
    Par ben35 dans le forum Modélisation
    Réponses: 2
    Dernier message: 09/06/2008, 09h56
  4. [Access] moyenne par semaine et mois
    Par robert_trudel dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/10/2006, 17h54
  5. [Oracle] Calcul de moyenne par module
    Par naazih dans le forum Langage SQL
    Réponses: 14
    Dernier message: 27/04/2006, 14h38

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