Calcul puissance acoustique - VB/VBA/VBS - Programmation
Marsh Posté le 20-02-2013 à 19:20:31
  
           Bonsoir !   Normalement cela devrait pouvoir se calculer sans l'aide du VBA … 
 
           Pas sûr de bien comprendre ta formule, j'aimerais bien un lien sur une page détaillée avec un exemple … 
 
Marsh Posté le 21-02-2013 à 08:28:46
Bonjour, 
 
Voici un lien qui explique un peu la formule : http://www.acouphile.fr/bases.html 
 
La formule se situe en bas de page (avant dernier titre : niveau sonore global en dB et dBA) 
 
Si il existe en effet une solution sans passer par le VBA, je suis preneur ! 
 
Bonne journée à tous 
Marsh Posté le 21-02-2013 à 09:21:32
  
          Bonjour et merci pour le lien ! 
 
          Hélas je reste encore un peu dans le brouillard, pourriez-vous expliquer un exemple et comment vous le calculez manuellement ? 
 
Marsh Posté le 21-02-2013 à 09:58:35
Bonjour, 
 
En fait pour avoir un niveau de puissance acoustique global, il faut additionner les niveaux de puissance de chaque bande de fréquences. 
 
Admettons que j'ai 3 bandes de fréquences différentes : 250Hz, 500Hz et 1000Hz 
Et que j'ai un niveau de puissance pour chaque bandes qui vaut respectivement 53dB, 25dB et 46dB. 
 
On note Lw le niveau de puissance global qui vaut : 10 x Log (10^(53/10)+10^(25/10)+10^(46/10)) = 53,8 dB 
 
Si on note Li le niveau de puissance acoustique par bande, on obtient la formule donnée sur le site, c'est à dire 10 x Log (Somme (10^(Li/10))). 
 
Mon problème est que parfois je peux avoir plus de 10 bandes de fréquence, ce qui veut dire que j'ai une formule à rallonge quand je calcul le Lw. J'aimerais qu'en une seule case je puisse faire le calcul du Lw. 
 
J'espère que c’est compréhensible, 
 
Bonne journée
Marsh Posté le 21-02-2013 à 10:56:03
  
           Pour la formule directe, je ne vois pas trop à cause de la variabilité du nombre de fréquences … 
 
           Par contre en VBA c'est facile !   Le code exposé part sur une procédure alors qu'une fonction est nécessaire … 
 
           Voici donc la fonction Lw à insérer dans un module VBA normal : 
Code :
  | 
 
           Si les 53, 25 & 46dB sont dans les cellules B6 à D6, voici la formule à entrer dans une cellule : 
=Lw(B6:D6)  | 
Marsh Posté le 21-02-2013 à 11:15:30
Ca marche parfaitement, merci ! 
 
Peux-tu m'expliquer le code ? Que je comprenne ce que j'écris... 
 
Merci beaucoup
Marsh Posté le 21-02-2013 à 11:31:48
  
          Ne pas oublier l'aide intégrée de VBA ‼ 
 
          Sinon il n'y a pas grand chose à expliquer : 
 
          - ligne n°1 :  Rg est la plage à traiter 
 
          -            3 :  Boucle pour calculer T, la somme des Li;  Cel est une cellule de la plage 
 
          -            4 :  Résultat à partir d'un logarithme népérien converti en base 10 puis arrondi à une décimale … 
 
Marsh Posté le 21-02-2013 à 11:39:49
Ok,  
 
J'ai modifié le code pour que la valeur ne soit pas arrondie. 
 
Tout marche impec, merci beaucoup 
 
A bientôt  
 
Marsh Posté le 21-02-2013 à 14:16:20
  
           En fait j'ai été quelque peu induit par le résultat de l'exemple … 
 
           Sinon je me demande s'il n'y a quand même pas moyen d'éviter le VBA par un produit matriciel (ou quelque chose dans le genre) 
           mais pour l'instant rien ne me revient;   au cas où, je posterais ici une autre approche … 
 
Marsh Posté le 24-02-2013 à 11:32:02
  
           Rien de nouveau côté formule … 
 
           Dans la fonction Lw, la ligne  Application.Volatile  n'est pas nécessaire dans ce cas … 
 
Marsh Posté le 20-02-2013 à 17:57:39
Bonjour à tous,
Dans le cadre de mon travail je dois calculer un niveau de puissance acoustique. Cette puissance ce calcul de la façon suivante :
10 x Log ( Somme de 10 ^(Li/10))
Ou Li est ma puissance acoustique pour une bande de fréquence donnée. (250 Hz, 500 Hz ...)
J'aimerais pouvoir automatiser mon calcul pour mes 8 bandes de fréquence sans avoir à taper une formule à rallonge. Je n'ai pas trouvé de solution en utilisant les formules classiques du coup je voudrais passer par les macros. Voila ce que j'ai écris pour le moment mais sans succès :
Sub Lw()
Dim i As Integer
For i = 2 To 10
Range("B12" ).Formula = "=10 * Log(Sum(10 ^ (cell(6,i) / 10)))"
Next i
End Sub
Quelqu'un aurai une idée ?
En vous remerciant, bonne fin d'aprem à tous,
Egel