Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1422 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Excel] Calcul de moyenne automatisé

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Excel] Calcul de moyenne automatisé

n°1903903
OinJ
^^
Posté le 09-07-2009 à 04:43:19  profilanswer
 

Bonjour tout le monde, j'expose brièvement mon "problème"
 
Suite à des expériences (mesures de coefficient de frottement) j'ai au final énormément de valeurs (temps, coefficient de frottement), un peu plus d'un million. Le logiciel de mesure me donne ça dans un fichier texte que j'ai pu importer sous Excel sans problèmes et il faut à partir de ces données que je trace un graphe coef=f(temps), un truc tout con donc. Le problème c'est qu'il faut au maximum 32000 entrées pour pouvoir tracer un graphe sous excel :\
 
Ma question est donc assez simple, comment faire une macro qui prend par exemple 40 valeurs successives, en fait la moyenne et met cette valeur dans une autre colonne, ceci pour le temps et le coefficient mesuré et en enchainant toutes les 40 valeurs (une boucle avec un itérateur incrémenté de 40 à chaque passage par exemple). J'imagine que c'est assez simple mais je n'ai aucune notion de VBA et de l'utilisation de macros sous Excel (j'ai des bases en c/c++ donc je pense pouvoir comprendre l'algo).
 
Donc au final le but serait d'obtenir 2 nouvelles colonnes (dans la même feuille ça va très bien) temps_m et coef_m comportant un peu moins de 32000 entrées chacune!
 
PS: j'ai un Excel anglais, je sais pas si ça change quelque chose au niveau des fonctions utilisables pour les macros.
 
PS2: j'envisage l'algo un peu comme ça, je sais pas si c'est le plus efficace mais c'est ce qui m'est venu à l'esprit:
Colonne A: temps, Colonne B: coef, Colonne C: temps_m(oyenné), Colonne D: coef_m(oyenné)
 
int j=1
Pour i=1 à fin(ColonneA)
     t_tmp=moyenne(A(i):A(i+40))
     c_tmp=moyenne(B(i):B(i+40))
     C(j)=t_tmp
     D(j)=c_tmp
     j=j+1
     i=i+41
fin pour
 
Un grand merci d'avance pour vos réponses :)
 
OinJ


Message édité par OinJ le 09-07-2009 à 04:44:02
mood
Publicité
Posté le 09-07-2009 à 04:43:19  profilanswer
 

n°1903945
produvba
Posté le 09-07-2009 à 10:24:40  profilanswer
 

Oui je ferais cela de la même manière. C'est la bonne voie.
L'Excel en anglais n'a aucune importance: en Visual Basic, les noms des method et properties est toujours uniquement en anglais.
Moyenne --> Average

n°1904256
OinJ
^^
Posté le 10-07-2009 à 05:09:59  profilanswer
 

C'est re-moi, donc j'ai regardé un peu comment fonctionnait VBA et son utilisation avec Excel et j'ai pondu ça:  
 

Code :
  1. Private Sub Calcul_Click()
  2. Dim n1 As Double, n2 As Double, i As Double
  3. '--- Popup pour demander n1 et n2
  4. n1 = InputBox("Premiere ligne " )
  5. n2 = InputBox("Derniere ligne " )
  6. i = n1
  7. Dim j As Integer
  8. j = 2
  9. '--- Boucle while: while i<n2 do ...
  10. While i < n2
  11.     Dim range_tmp As Range, time_m As Double, coef_tmp As Double
  12. '--- Moyenne du temps puis affectation dans moy en Aj
  13.     Set range_tmp = Sheet1.Range(Cells(i, 1), Cells(i + 40, 1))
  14.     time_m = WorksheetFunction.Average(range_tmp)
  15.     Sheet3.Cells(j, 1).Value = time_m
  16. '--- Moyenne du coef puis affectation dans moy en Bj
  17.     Set range_tmp = Sheet1.Range(Cells(i, 4), Cells(i + 40, 4))
  18.     coef_tmp = WorksheetFunction.Average(range_tmp)
  19.     Sheet3.Cells(j, 2).Value = coef_tmp
  20.     j = j + 1
  21.     i = i + 41
  22. Wend
  23. End Sub


 
Donc pour clarifier un peu:
 
La Sheet1 est là où j'ai mes données, le temps en A et le coef en D.
La Sheet2 est la feuille où je veux mettre mes valeurs moyennées, en A le temps et en B le coef.
 
Ca a l'air de plutôt bien fonctionner, pour traiter 1 million de lignes ça met un peu moins de 10 secondes! Est-ce que vous pensez que y a moyen d'améliorer le code pour que ça aille un peu plus vite ou pour la "beauté du code? C'est pas nécessaire mais c'est juste par curiosité ^^
 
Merci d'avance :)

n°1906211
produvba
Posté le 17-07-2009 à 16:10:45  profilanswer
 

Non c'est très bien comme cela, tu sais VBA c'est interprété donc pas rapide...

n°1907282
SuppotDeSa​Tante
Aka dje69r
Posté le 21-07-2009 à 15:31:14  profilanswer
 

Bonjour
 
Oui tu peux masquer l'execution d'excel pendant ta macro :
 
Application.screenupdating=false
et a la fin de ta macro
Application.screenupdating=true
 
Comme tu vois pas ce que fait excel, tu gagnes quelques secondes (voir minutes pour les gros gros traitements)


---------------
Soyez malin, louez entre voisins !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Excel] Calcul de moyenne automatisé

 

Sujets relatifs
[Excel] Formule de recherche multicritère[EXCEL] Identifier la cellule sélectionnée
variable vba et fonction excelInterface requête Base de données EXCEL
Addition toute bête en VBA (Macro Excel)[RESOLU] Problème de vérouillage dans ma feuille excel
Détecter l'affichage d'une MsgBox dans une macro excelincrémenter une cellule avec une condition sous excel
Probleme calcul : conditionsExcel : impression "auto" d'onglets => PDF
Plus de sujets relatifs à : [Excel] Calcul de moyenne automatisé


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR