Traitement de données [résolu]

pascal82

XLDnaute Occasionnel
Bonjour à tous,

Je suis confronté à un nouveau problème insoluble avec mes compétences.
Les données.
- en colonne A une base temps incrémentée toutes les 10 milli secondes
- en colonne B des mesures en millimètre
Le problème:
Je dois déterminer la position en fermeture avec sont index de temps au moment de l'ouverture, ainsi que la position ouverture avec sont index lorsque qu'il n'y a plus de mouvement.
L'objectif est de déterminer la distance et le temps mis pour une fermeture.
Nota: Ce qui gène est le nombre important de données et surtout le parasitage des mesures
Si quelques avait une méthode permettant d'approcher les résultats attendus [I2:J7] ce serait l'idéal

Merci par avance
Cordialement
 

Pièces jointes

  • AAA0002.xlsm
    121.3 KB · Affichages: 36
Dernière édition:

job75

XLDnaute Barbatruc
Re : Traitement de données

Bonjour pascal82, le forum,

Vous auriez pu joindre un graphique pour qu'on comprenne mieux ce que vous voulez faire.

Voyez le fichier joint où j'en ai mis 3.

Graph 2 et Graph 3 permettent de cerner assez bien les 2 points de changement de pente, bien sûr cela reste empirique.

Mais il ne faut guère compter sur des formules ou du VBA pour les déterminer.

Bonne journée.
 

Pièces jointes

  • Graphiques - changement de pente(1).xls
    436 KB · Affichages: 42

pascal82

XLDnaute Occasionnel
Re : Traitement de données

Bonjour job75, le forum,

Merci pour votre contribution, par contre mon problème est bien d'automatiser le traitement de ces données. De plus dans l'exemple en annexe, les données sont tronquées en lignes et le nombre de colonnes a traiter est de 8. Ensuite il sera toujours possible de vérifier par graphique si le résultat affiché est conforme.
De mon coté j'ai essayé par VBA et j'arrive a un résultat proche de l'attendu, par contre avec ma méthode le temps de traitement est long (environ 2 mn) parce que multiplié par 8. En fait j'ai garder le programme dans le fichier initial en ajoutant un talon pour limiter le bruitage des mesures

Cordialement

VB:
Sub Test()
Dim myRange As Range, y As Integer, z As Byte, Nb As String
Dim a%, Minx!, Maxx!, min!, max!

'recherche valeur max colonne A pour le calcul du temps
y = Cells.Find("*", , xlValues, , 1, 2, 0).Row    'Dernière ligne
z = Cells.Find("*", , xlValues, , 2, 2, 0).Column 'Dernière colonne
Set myRange = Range("A1", Cells(y, z))
Nb = Application.WorksheetFunction.max(myRange)
Range("G1").Value = Nb / 10
'MsgBox "la valeur max est " & Nb

min = 1000

For a = 0 To Range("G1").Value
   If (Range("b4").Offset(a, 0).Value) < (min + 0.5) Then
   min = Range("b4").Offset(a, 0).Value
   Minx = Range("b4").Offset(a, -1).Value
   End If
   
   If (Range("b4").Offset(a, 0).Value) > (max + 0.5) Then
   max = Range("b4").Offset(a, 0).Value
   Maxx = Range("b4").Offset(a, -1).Value
   End If
   
Next

Range("G2").Value = min
Range("G4").Value = Minx
Range("G3").Value = max
Range("G5").Value = Maxx

Range("G6").Value = (Maxx - Minx) / 100
Range("G7").Value = max - min

End Sub
 

Pièces jointes

  • AAA0002-V2.xlsm
    120.9 KB · Affichages: 16
Dernière édition:

job75

XLDnaute Barbatruc
Re : Traitement de données

Re,

Ayant un peu réfléchi je suis arrivé par formules à un résultat très voisin de ce que l'on attend.

Pour le 1er changement on recherche le 1er point d'ordonnée supérieure à la moyenne de la 1ère droite + 5 fois l'écart-type.

Pour le 2ème changement on recherche le dernier point d'ordonnée inférieure à la moyenne de la 3ème droite - 5 fois l'écart-type.

Voyez les formules matricielles en H2:H5, à valider par Ctrl+Maj+Entrée.

Fichier (2).

A+
 

Pièces jointes

  • Graphiques - changement de pente(2).xls
    446.5 KB · Affichages: 29

pascal82

XLDnaute Occasionnel
Re : Traitement de données

Re job75,

Nos messages se sont croisés.
Votre travail est important et fait appel à une base solide de connaissance, félicitation. Cependant je vois un inconvénient majeur à votre méthode, en effet elle nécessite le calage des références [G9:H10] donc une observation préalable des données et c'est cela que j'aimerai éviter.
De plus, grâce à vous, je viens de me rendre compte que je me suis lamentablement planté dans le calcul du temps !!!.

Cordialement
 

job75

XLDnaute Barbatruc
Re : Traitement de données

Re,

Sur le même principe que celui utilisé pour les formules voici 2 fonctions VBA :

Code:
Function PremierPoint(tablo As Range, colonne As Byte)
Dim Necartype As Byte, i&, P As Range
Necartype = 5 'paramétrable
For i = 2 To tablo.Rows.Count
  Set P = Range(tablo(1, 2), tablo(i, 2))
  If tablo(i, 2) > Application.Average(P) + Necartype * Application.StDev(P) Then _
    PremierPoint = tablo(i, IIf(colonne = 1, 1, 2)): Exit For
Next
End Function

Function DernierPoint(tablo As Range, colonne As Byte)
Dim Necartype As Byte, trc&, i&, P As Range
Necartype = 5 'paramétrable
trc = tablo.Rows.Count
For i = trc - 1 To 1 Step -1
  Set P = Range(tablo(trc, 2), tablo(i, 2))
  If tablo(i, 2) < Application.Average(P) - Necartype * Application.StDev(P) Then _
    DernierPoint = tablo(i, IIf(colonne = 1, 1, 2)): Exit For
Next
End Function
Fichier joint.

L'exécution prend un certain temps mais c'est très raisonnable.

A+
 

Pièces jointes

  • Graphiques - changement de pente par VBA(1).xls
    460.5 KB · Affichages: 24

job75

XLDnaute Barbatruc
Re : Traitement de données

Re,

On évite 2 calculs inutiles en mettant des INDEX/EQUIV en H2:H3.

Et on évite le 2ème argument dans les fonctions :

Code:
Function PremierPoint(tablo As Range)
Dim Necartype As Byte, i&, P As Range
Necartype = 5 'paramétrable
For i = 2 To tablo.Rows.Count
  Set P = Range(tablo(1, 2), tablo(i, 2))
  If tablo(i, 2) > Application.Average(P) + Necartype * Application.StDev(P) Then _
    PremierPoint = tablo(i, 1): Exit For
Next
End Function

Function DernierPoint(tablo As Range)
Dim Necartype As Byte, trc&, i&, P As Range
Necartype = 5 'paramétrable
trc = tablo.Rows.Count
For i = trc - 1 To 1 Step -1
  Set P = Range(tablo(trc, 2), tablo(i, 2))
  If tablo(i, 2) < Application.Average(P) - Necartype * Application.StDev(P) Then _
    DernierPoint = tablo(i, 1): Exit For
Next
End Function
La durée d'exécution se réduit à 1,96 seconde sur Excel 2003.

Edit : sur Win7 - Excel 2010 c'est 0,96 seconde, donc 2 fois plus rapide.

Fichier (2).

A+
 

Pièces jointes

  • Graphiques - changement de pente par VBA(2).xls
    482 KB · Affichages: 18
Dernière édition:

pascal82

XLDnaute Occasionnel
Re : Traitement de données

Bonsoir job75,

Je suis impressionné par la qualité de votre travail. Par contre je teste vos fonctions dans le fichier de travail (22900 lignes pour ce cas) et le nombre de ligne ne se met pas a jour automatiquement, il dépend de l'encadrement fixé dans les fonctions [H2:H5]. Pour confirmer j'ai insérer "MsgBox tablo.Rows.Count". Bien calé les formules des 8 organes demande du temps et de nombreuses manipulations : (4*8) formules à modifier par fichier
Désolé d'insister sur ce point mais je suis amené a traiter rapidement un certaine nombre de fichier pour valider les différents déplacements, les temps de manœuvres ainsi que la chronologie de la séquence après chaque réglage (8 organes à synchroniser). C'est pourquoi le nombre de lignes est toujours variables. De plus cela nécessite de copier dans chaque fichier a traiter le tableau résultat avant de l'adapter sur le nombre de lignes à traiter

Cordialement
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Traitement de données

Re,

Avec ces fonctions plus besoin de limiter la plage à étudier, elles le font elles-mêmes.

Par ailleurs les 2 colonnes peuvent ne pas être voisines.

Code:
Function PremierPoint(debtemps As Range, colonne As Range)
Dim Necartype As Byte, h&, tablo As Range, i&, P As Range
Necartype = 5 'paramétrable
h = Cells(Rows.Count, colonne.Column).End(xlUp).Row - debtemps.Row + 1
Set tablo = debtemps.Offset(, colonne.Column - debtemps.Column).Resize(h)
For i = 2 To h
  Set P = Range(tablo(1), tablo(i))
  If tablo(i) > Application.Average(P) + Necartype * Application.StDev(P) Then _
    PremierPoint = debtemps(i): Exit For
Next
End Function

Function DernierPoint(debtemps As Range, colonne As Range)
Dim Necartype As Byte, h&, tablo As Range, i&, P As Range
Necartype = 5 'paramétrable
h = Cells(Rows.Count, colonne.Column).End(xlUp).Row - debtemps.Row + 1
Set tablo = debtemps.Offset(, colonne.Column - debtemps.Column).Resize(h)
For i = h - 1 To 1 Step -1
  Set P = Range(tablo(h), tablo(i))
  If tablo(i) < Application.Average(P) - Necartype * Application.StDev(P) Then _
    DernierPoint = debtemps(i): Exit For
Next
End Function
Fichier (3).

A+
 

Pièces jointes

  • Graphiques - changement de pente par VBA(3).xls
    483.5 KB · Affichages: 20
Dernière édition:

pascal82

XLDnaute Occasionnel
Re : Traitement de données

Bonsoir Job75, le forum,

Je suis abasourdi par votre travail, après quelques tests les résultats sont plus que satisfaisant pour les 8 colonnes à traiter. Les dernières modifications que vous avez apportées sont appréciables, utiles et importantes.
Un grand merci à vous pour votre patience et votre implication.

Je tente de comprendre votre code, je reviendrais si besoin.

Cordialement
 

job75

XLDnaute Barbatruc
Re : Traitement de données [résolu]

Bonjour Pascal, le forum,

J'ai juste fait 2 petites modifications au post #10 :

- pour la dernière ligne mieux vaut prendre celle de la colonne (colonne), pas celle de (debtemps)

- il est inutile de préciser la colonne (1) pour tablo et debtemps.

A+
 

job75

XLDnaute Barbatruc
Re : Traitement de données [résolu]

Re,

Je reviens sur la solution par formules.

Voyez les formules en H2:H5 et H9:H10 dans ce fichier (3).

Il suffit en H9 et H10 d'étudier les 100 premiers points de mesure (1 seconde) et les 100 derniers pour que les fonctions MOYENNE et ECARTYPE donnent des résultats acceptables.

Il a fallu prendre 6 fois l'écart-type.

Pour moi c'est bien meilleur que le VBA car toutes les formules se calculent en 8 millièmes de seconde :rolleyes:

A+
 

Pièces jointes

  • Graphiques - changement de pente(3).xls
    461.5 KB · Affichages: 21

job75

XLDnaute Barbatruc
Re : Traitement de données [résolu]

Re,

Bien entendu les cellules H9:H10 ne sont pas indispensables, on peut intégrer leurs formules en H4:H5.

Fichier (4).

A+
 

Pièces jointes

  • Graphiques - changement de pente(4).xls
    461.5 KB · Affichages: 19

job75

XLDnaute Barbatruc
Re : Traitement de données [résolu]

Re,

Allez pour peaufiner et voir ce que ça donne, avec ce fichier (5) le nombre d'écarts-types est paramétré.

A+
 

Pièces jointes

  • Graphiques - changement de pente(5).xls
    461.5 KB · Affichages: 38

Membres actuellement en ligne

Statistiques des forums

Discussions
314 499
Messages
2 110 249
Membres
110 711
dernier inscrit
chmessi