Traitement données classeur excel

Résolu/Fermé
tybo52 Messages postés 3 Date d'inscription mercredi 3 février 2016 Statut Membre Dernière intervention 10 février 2016 - 3 févr. 2016 à 10:11
tybo52 Messages postés 3 Date d'inscription mercredi 3 février 2016 Statut Membre Dernière intervention 10 février 2016 - 10 févr. 2016 à 17:40
SALUTATION,

j'ai utiliser très récemment un enregistreur numérique, par contre le problème est qu'il me débite des tableaux excel de données très lourd (>50000 lignes), et impossible de réduire l'échantillonnage pour mon application.

j'ai le temps en ms, un déplacement en mm et une force.

j'ai eu l'idée de faire un échantillonnage des données en récupérant le maximum local sur un échantillon de 10 lignes et ce sur l'ensemble des données.

Le problème c'est que VB je connaissais, mais j'utilisais plus matlab, donc codage diffférents...


Voici donc la trame que j'ai choisi, mais j'aurais besoin d'un coup de main sur la correction:

Sub minloc()
Dim min As Double, locmin As Double, i As Long, j As Long, x2 As Integer


i = 6

x2 = 1
While Not (IsEmpty(ActiveSheet.Cells(i, 1)))
For j = -5 To 5
min = 800
If ActiveSheet.Cells(i + j, 2) < min Then
min = ActiveSheet.Cells(i + j, 2)
locmin = ActiveSheet.Cells(i + j, 1)
End If
Next
Worksheets("Feuil2").Cells(x2, 0).Values = locmin
Worksheets("feuil2").Cells(x2, 1).Values = min

i = i + 10
Wend

End Sub


l'autre option que j'avais : partir de la sélection de d'un classeur mais c'est pire:

à partir d'une selection, je n'au pas trouvécomment importer la selection dans un tableau pour la traiter.

zone_trtmt=ActiveSheet.range(Selection)

Mais une feuille excel ne semble pas être manipulable comme un tableau de données...
A voir également:

5 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
3 févr. 2016 à 11:36
Bonjour,

Vous cherchez un max et vous testez un min, curieux !!!!!

si pas assez rapide, ca peut s'ameliorer


Sub minloc()
    Dim min As Double, locmin As Double, i As Long, j As Long, x2 As Integer
    Dim Plage As Range
    
    i = 6
    x2 = 1
    With ActiveSheet
        derlig = .Range("A" & Rows.Count).End(xlUp).Row
        Set Plage = .Range("A2:C" & derlig)
    End With
    For i = 2 To derlig Step 10
        min = 800
        For j = 0 To 9
            If Plage(i + j, 2) <> Empty And Plage(i + j, 2) < min Then
                min = Plage(i + j, 2): locmin = Plage(i + j, 1)
            End If
        Next j
        With Worksheets("Feuil2")
            .Cells(x2, 1).Value = locmin: .Cells(x2, 2).Value = min
        End With
        x2 = x2 + 1
    Next i
End Sub
2
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 3/02/2016 à 12:57
Bonjour Tybo, F89

m^me genre de question que F89

tu cherches le maxi dans ta demande et actuellement tu donnes tous les valeurs inférieures à la valeur 800
si dans un "bloc" de 10, on a plusieurs fois la valeur maxi, que fait-on ?
si on ne retient qu'une des valeurs maxi, quelle la valeur à retenir dans l'autre colonne ?

 Michel
0
tybo52 Messages postés 3 Date d'inscription mercredi 3 février 2016 Statut Membre Dernière intervention 10 février 2016
Modifié par tybo52 le 10/02/2016 à 12:50
Merci pour vos réponses, je n'ai pas encore pu tester le code, mais pour répondre à vos questions:

Pour compléter les informations transmise: J'ai des fichiers de données de 180000 lignes avec un échantillonnage à la milliseconde afin de détecter les piques furtifs d'effort.
une erreurs de 10 ms sur une mesure de 180s, soit sur la mesure de distance une errure de localisation de 0,02%, c'est peanut... d'où mon raccourci de prendre que la première valeur Max constatée.

Concernant le min dans mon code, la raison est que je vais avoir deux codes, l'un pour les essais en phase de compression (-xx N), et en phase en traction (+xx N).
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
10 févr. 2016 à 14:40
Bonjour

Et alors, que fait on?
le mini, le maxi, les 2 ?
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
10 févr. 2016 à 14:44
Bonjour

épithète que la moyenne ira ( Ah ca ira, ca ira .....)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tybo52 Messages postés 3 Date d'inscription mercredi 3 février 2016 Statut Membre Dernière intervention 10 février 2016
Modifié par tybo52 le 10/02/2016 à 17:47
héhé,

accessoirement parlant, j'ai pu tester le code, je l'ai juste corrigé sur les colonnes à traiter mais dans l'idée c'était parfaitement ça.

Et pour dire réellement en quoi consistait cette prise de mesure, elle avait pour but de mesurer les efforts résistant au déplacement d'une masse sur un rail (calcul de rendement si vous préférez).
L'idée étant de passer successivement et le plus souvent possible d'un état statique à un état dynamique pour toujours avoir l’interaction du coefficient de frottement statique. D'où la nécessité d'avoir le maximum local (enveloppe supérieure ou inférieure de la courbe suivant le sens de travail du capteur de force).

La morale de mon essai: sans frottement, il n'y a pas de plaisir...

Merci les gars pour votre aide...
0