Tri avec conditions (extraction de données d'un fichier)

Chess33

XLDnaute Nouveau
Bonjour.
Pourriez-vous m'aider svp... ?
(Sous excel 2007-2010)

J'ai un tableau de données sur trois colonnes T,X,Y où T est le temps et X,Y sont des grandeurs enregistrées à une cadence donnée. Je peux choisir la fréquence d'échantillonnage en fait (ou le pas d'incrémentation entre les lignes Ti du tableau) de quelques millisecondes et plusieurs secondes. X variant de 0 à 7000 et croissant en général, et Y variant de -20 à 2000 est une grandeur aléatoire indépendantes de X. Mon fichier texte de sortie ou tableau Excel peut donc contenir quelques centaines de lignes à quelques dizaines de milliers suivant le pas choisi à l'enregistrement.

La grandeur X étant associée à Y (couple de points à un temps Ti donné) j'aimerais réduire le nombre de lignes de mon tableau après dépouillement en procédant par pas de N sur les données Xi (N=1 ; 5 ou 10 ... au choix) : c'est-à-dire ne retenir les lignes [Ti, Xi et Yi] de mon tableau que lorsque la grandeur Xi aura augmenté du pas N que je me suis fixé. Ou encore extraire les lignes vers une autre feuille (ou autres colonnes) chaque fois que (Xi+k - Xi) = N ou sera peu différent de N.

« N » le pas d'incrément pris entre les Xi du tableau de sortie est un entier alors que les valeurs sur les lignes Xi du tableau ne sont pas des entiers. Et donc il me faut à chaque fois retenir sur les lignes, les Xi les plus proches d'un d'un entier.

En conclusion il faut à chaque fois récupérer les valeurs [Ti, Xi, Yi] d'une ligne, mais seulement et à chaque fois que la grandeur X aura augmenté de l'incrément donné (par exemple quand Xi= 0, 5, 10 ..... 7000 pour un pas N=5. En sachant que Xi est positif, croissant mais peut être parfois constant et donc redondant sur plusieurs dizaines de lignes indépendamment du temps T et de Y.

Je n'ai pas l'habitude du VBA et je n'arrive pas à voir simple : j'ai pensé partir de la première ligne, chercher à tester quand est-ce que (Xi+k - Xi)>=N et retenir les lignes vérifiant l'égalité ... Mais entre faire une opération en incrémentant à chaque fois les lignes, retenir que les parties entières des Xi : Int(Xi)+1 ou Sup(Xi), extraire les données au même format d'origine ... j'avoue que ça j'aurais besoin d'aide.

Désolé si un peu long et merci d'avance
 

Dugenou

XLDnaute Barbatruc
Re : Tri avec conditions (extraction de données d'un fichier)

Bonjour,
A défaut d'une exemple de données j'ai été créatif...
Je suppose qu'il y a de nombreuses façon possible de sélectionner certaines lignes en fonction du pas choisi. Voir PJ avec une méthode pas totalement satisfaisante : la première ligne est fixée, ensuite c'est une formule puis TCD pour n'utiliser que les lignes sélectionnées.

Cordialement
 

Pièces jointes

  • chess33.xlsx
    22.6 KB · Affichages: 30

Chess33

XLDnaute Nouveau
Re : Tri avec conditions (extraction de données d'un fichier)

Bonjour Dugenou,
Merci d'avoir pris le temps.

Je vais regarder de près votre fichier afin d'assimiler tout ça.
Oui l'idée est là sauf que la condition pour la sélection de la ligne à retenir est sur la deuxième colonne celle des Xi, et non sur la colonne Ti qui a déjà un pas fixe du fait de l'échantillonnage amont (le temps est en millisecondes avec un pas de 50ms dans l'exemple).
C'est justement le caractère aléatoire des Xi qui me posait problème dans mon "tri". Dans le fichier exemple en PJ, j'ai surligné les 4 premières lignes que je souhaiterais retenir, (lignes n°2, 91, 241, 378 au cas où la couleur n’apparaîtrait pas). La plage entre les lignes retenues devient donc aléatoire puisque seul un intervalle de 5 unités (environ) entre le Xi, de la dernière ligne retenue et celui la prochaine, conditionne la sélection et la copie de la ligne en cours. C’est le fameux pas N modifiable (fixé à 5 dans l’exemple en PJ) dont je parlais. C’est sur la colonne résultante et après traitement que je souhaiterais des intervalles de 5 unités environ.

Ha oui pardonnez aussi cet abus de langage, mais par "tri" j'entendais « recopier tel quel » les valeurs d’une ligne parmi n et non pas un trier par ordre croissant les valeurs des lignes.

Je me suis arrêté aux 400 premières secondes d'enregistrement dans mon exemple mais le fichier peut être bcp plus long.

Cordialement
 

Pièces jointes

  • Exple Chess33.xls
    236 KB · Affichages: 22

Dugenou

XLDnaute Barbatruc
Re : Tri avec conditions (extraction de données d'un fichier)

Re,
un peu le même principe, avec soit un TCD pour la "copie" (mais il faut actualiser à chaque changement de pas) soit une formule matricielle.
Attention aux temps de calcul qui vont devenir longs pour un grand nombre de lignes à cause du nb.si pour la colonne "sortie" et/ou à cause de la formule matricielle (à valider par ctrl+maj+enter)

Cordialement
 

Pièces jointes

  • chess33_2.xlsx
    407.3 KB · Affichages: 30

Chess33

XLDnaute Nouveau
Re : Tri avec conditions (extraction de données d'un fichier)

Bonjour Dugenou.
C'est génial j'en reviens pas! J'aurais mis des semaines à arriver à ça.
Bon les TCD j'ai un peu regardé et je pense pouvoir en créer un simple et progresser ensuite.
La fonction RECHERCHEV est très pratique cela dit et je ne connaissais pas.

Merci encore pour cette aide précieuse.
Cordialement
 

Chess33

XLDnaute Nouveau
Re : Tri avec conditions (extraction de données d'un fichier)

Bonjour
Je commence à entrevoir toutes les possibilités du TCD et je pense pourvoir aider à mon tour un collegue à l'adapter au tri par nom ou par nomenclature d'un stock magasin.
Grand merci encore.


PS
J'ai pu modifier la plage de données du TCD et en créer un autre.
Mais pour le tableau "[T(ms), X, Y]" à droite du TCD dans votre fichier exemple je n'arrive pas encore à appliquer les calculs sur une plus grande plage de données ( la plage de mes données précédente était $D$8002, en modifiant vos formules pour passer à $D$25125 ça marche sur la première ligne mais quand je copie et colle les formules sur les autres lignes j'ai les erreurs #NOMBRE! dans ces cellules).
J'ai remarqué aussi que quand bien même cela aurait marché pour les 25125 lignes, mon tableau aurait débuté à T(ms)=500 et non à la plus petite étiquette T(ms)=0 comme pour vous. Pourquoi alors.

"#NOMBRE!" doit ramener je pense à un problème de format ou type de données dans les cellules je me dis; mais même en comparant mon nouveau fichier avec votre exemple je vois rien de différent à par la plage des données ... Auriez-vous une idée?

Cordialement
 

Dugenou

XLDnaute Barbatruc
Re : Tri avec conditions (extraction de données d'un fichier)

Bonjour,
Quand vous avez modifié la formule matricielle dans ce tableau: avez vous validé avec ctrl+maj +enter ??? des {} doivent être affichés autour de la formule.
Pour la première valeur : j'ai mis un X "à la main" sur la première valeur, vérifiez que c'est pareil dans votre tableau et vérifiez que la formule commence bien à cette première ligne :
=INDEX($A$1:$A$8002;PETITE.VALEUR(SI($D$2:$D$8002="X";LIGNE($D$2:$D$8002));NBVAL($L$11:L11)))
le 1 en rouge ne doit jamais changer
le 2 en vert doit correspondre à la première valeur du tableau de données
la plage en violet doit donner 1 sur la première ligne du tableau de résultat (si le tableau est en ligne 24 : nbval($l$24:l24)

Cordialement
 

Chess33

XLDnaute Nouveau
Re : Tri avec conditions (extraction de données d'un fichier)

Bonjour,
Ha oui merci, je n'avait pas fair ctrl+maj+Enter et je vais regarder cela lundi.
Pourtant vous l'aviez noté en remarque en effet.
Pour le X à la main je vais vérifier et je suppose que ça marche avec un autre symbole ou un chiffre aussi
Pour le reste oui et c'était ok pour les indices $1 et $2 et les lignes.

Cordialement et bon week-end
 

Discussions similaires