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 :

Bonnes pratiques - Amélioration de ma macro [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 627
    Par défaut Bonnes pratiques - Amélioration de ma macro
    Bonjour,

    j'ai développé une macro Excel pour un client.
    La macro va calculer les positions des valeurs applicables et en faire la somme (j'ai une colonne qui me permet de savoir si le critère de la ligne est applicable ou pas)
    A la fin on divise la somme des valeurs applicables par le nombre de valeurs applicables.
    Donc avec le tableau ci-dessous en supposant que tous les critères soient applicables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     ; ; ;X; 
     ; ; ; ;X
     ; ;X; ; 
     ; ; ;X;
    La macro fait (4+5+3+4)/4. Si le critère 2 n'était pas applicable, la macro ferait (4+3+4)/3

    Ma macro fonctionne très bien mais je me demande s'il y a des bonnes pratiques que je ne respecterais pas ou si certains d'entre vous auraient fait autrement.

    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
    ' Cette fonction calcule la somme des positions des élements "val"
    ' dans le tableau Rng, à condition que CritNA soit vide
    ' et divise le résultat par CritNB, nombre de critères applicables
    Public Function MoyenneConditionnelle(Rng As Range, CritNA As Range, val As String, CritNb As Variant) As Single
    MoyenneConditionnelle = 0
    ' position de "val" dans la ligne
    Dim that As Integer
    ' Nombre de lignes du tableau passé en parametre
    Dim NbLigne As Integer
    NbLigne = Rng.Rows.Count
     
     
    For i = 1 To NbLigne
        If IsEmpty(CritNA(i)) Then
        that = Application.WorksheetFunction.Match(val, Rng.Rows(i))
        MoyenneConditionnelle = MoyenneConditionnelle + that
        End If
    Next
     
    MoyenneConditionnelle = MoyenneConditionnelle / CritNb
    End Function
    Merci pour vos avis

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Manus,

    En premier lieu, une bonne pratique selon moi, est d'utiliser le tables de données (tableaux structurés) et ainsi les formules structurées qui les accompagnent.
    2 tutoriels
    Les tableaux structurés
    Gestion des tableaux structurés par VBA

    Pour répondre à ton besoin, peut-être pourrais-tu regarder vers les nouvelles fonctions statistiques (je ne sais plus quelle version d'Office en est à l'origine).

    SOMME.SI.ENS
    NB.SI.ENS
    MOYENNE.SI.ENS

  3. #3
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 627
    Par défaut
    Merci, je vais regarder si je peux adapter tout ça au besoin du client.

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 446
    Par défaut
    Bonjour,

    Une façon de faire par calcul direct (qui ne donne un résultat juste que si la plage commence bien sur la colonne A, colonne n°1):

    Nom : MoyenneConditionnelle.png
Affichages : 217
Taille : 7,6 Ko

    Cordialement.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 627
    Par défaut
    C'est ce que j'avais utilisé au début (le calcul direct) mais en pratique il y a des dizaines de tableaux éparpillés sur plusieurs feuilles.

    Avec une seule macro je limite les chances que le client fasse des erreurs dans les formules donc j'ai estimé préférable de faire une macro et de lui montrer comment la paramétrer.

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

Discussions similaires

  1. [AC-2010] Les bonnes pratiques de la programmation des macros de données
    Par Tofalu dans le forum Access
    Réponses: 5
    Dernier message: 30/07/2016, 20h51
  2. Demande propositions améliorations ("bonnes pratiques")
    Par lautrec1 dans le forum Débuter
    Réponses: 10
    Dernier message: 24/11/2014, 11h24
  3. Qualité Web - Les bonnes pratiques pour améliorer vos sites
    Par Bovino dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 09/09/2013, 22h00
  4. Réponses: 4
    Dernier message: 19/05/2012, 13h49

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