Demande de macro excel

Fermé
Julien - 8 mars 2012 à 18:56
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 15 mars 2023 - 14 mars 2012 à 09:09
Bonjour,

J'aurai besoin de votre aide pour la programmation d'un macro pour Excel:
J'ai une feuille de donnée en plusieurs lignes et colonnes (5colonnes et en moyennes 800 000 lignes) correspondant à des enregistrements médicaux.
A: temps / B: Réponse électrodermal / C : interval R-R du rythme cardiaque / D : stimulation / E : marqueur d'évènement
.
La feuille contenant ces données s'appelle "AED-RAW"
.
Je dois reprendre les données à partir des 150 marqueurs d'évènement, et les filtrer selon différente condition:
.
J'ai 3marqueurs différents dans ma colonne E : "#* trigger" ; "#1 Lat" ; "#1 Pic"
.
Je dois reprendre, dans un premier temps, pour chaque trigger la différence de temps entre la ligne comprenant #1 Lat" et la ligne comprennant "#* Trigger" :
Par exemple: si #* trigger = E33 et #1 Lat = E158; je dois effectué le calcul suivant =A158-A33 (le temps étant en colonne A)
.
Dans un deuxième temps, je dois prendre la différence de réponse électrodermale entre #1 Pic et #1 Lat ; Par exemple si #1 Lat = E158 et #1 Pic = E202; je dois effectué le calcul suivant =B202-B158.
.
Dans un troisième temps, je dois "filtrer" mes données : Si la valeur du premier calcul est supérieur à 4, ou inférieur à 1, la réponse électrodermal associé doit être = 0 et la case de temps doit rester vide dans le tableau correspondant au résultat.
.
Par ailleurs, les marqueur "#1 Lat" et "#1 Pic" ne sont pas toujours présents (contrairement à #* trigger); dans ce cas de figure le temps doit être une case vide, et la réponse électrodermal = 0
.
Ces données doivent être insérer dans une autre feuille de calcul appeler "AED-DATA" avec la première valeur de latence en P1 et la première valeur de réponse en Q1
(La seconde en P2 et Q2, etc...)
.
Je tente depuis le début d'année à apprendre le coding d'une macro, mais je n'arrive toujours pas à créer celle-ci...
.
De grâce, j'implore votre aide. (J'ai environ 200 tableur excel de ce genre, et ce préprocessing me prend environ une demi journée par feuille...)
.
Merci d'avance !
.
(Ci-joint, un exemple de classeur, en format .txt mais ouvrable avec excel: http://d01.megashares.com/dl/CJzw2hM/H01-AED-OK.txt )


A voir également:

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 15 mars 2023 2 733
9 mars 2012 à 09:48
Salut,
Je n'arrive pas à accéder à ton fichier sur Megashare :
Link Information:
All download slots for this link are currently filled.
Please try again momentarily.

Peux tu passer par https://www.cjoint.com/ par exemple?
Attention toutefois, ne présente pas un fichier de 800 000 lignes... Je penses qu'avec 25 - 30 000 nous en aurons assez...
0
http://cjoint.com/?BCkoG6y6yfM

Voici le lien cjoint, désolé pour le délai, mon institut me bloquait l'accés à ce site...

Ce fichier fait 50k lignes, il y a 18stimulations (#* trigger) avec le cas où la latence (#1 Lat) et le pic (#1 pic) est présent, et d'autres cas où ce n'est pas le cas.
0
Voici le même fichier auquel j'ai ajouté une feuille appelé "AED-DATA-corrigé", correspondant au résultat attendu pour cette partie de l'enregistrement:

http://cjoint.com/?BCko32jeJc4
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 15 mars 2023 2 733
12 mars 2012 à 08:41
Salut,
Désolé, je ne peux pas ouvrir les fichiers .xlsx...
Merci d'enregistrer sous / type de fichier : Classeur Excel 97-2003...
0
http://cjoint.com/?BCmnIYsifIN

Voila, j'ai supprimé des lignes pour que ça passe, il reste à présent 8triggers
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 15 mars 2023 2 733
14 mars 2012 à 08:50
Salut,

Juste pour info, je suis toujours là...
J'ai regard&é d'un peu plus près ce que tu nous as transmis.
Je relève une incohérence; est elle récurrente?
En fait, colonne E tu as deux "orthographes" différentes pour #1 Pic :
"#1 Pic "
ou
"#1 Pic"
La différence réside dans l'espace en fin de chaine de caractères.
Si c'est récurrent, la macro sera sensiblement différente, donc merci d'éclaicir ce point...

Pour que cela soit plu aisé à vérifier, utilise cette procédure :
Regroupe toutes les données de la colonne E, les unes après les autres, dans la colonne F :
Sub test()
Dim T_In, T_Out(), Lig As Long, Cpt As Long

With Sheets("AED-RAW")
    T_In = .Range("A6", .Range("E" & Rows.Count).End(xlUp))
    For Lig = LBound(T_In, 1) To UBound(T_In, 1)
        If T_In(Lig, 5) <> "" Then
            ReDim Preserve T_Out(Cpt)
            T_Out(Cpt) = T_In(Lig, 5)
            Cpt = Cpt + 1
         End If
    Next
    .[F2].Resize(UBound(T_Out, 1), 1) = Application.Transpose(T_Out)
End With
End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 15 mars 2023 2 733
14 mars 2012 à 09:09
Mais j'y pense, ce genre de macro ne te simplifierait-il pas la tâche?
Regroupe toutes les données de la colonne E, les unes après les autres, dans la colonne F et en colonne G les cellules correspondantes de la colonne A :

Dim T_In, T_Out(), Lig As Long, Cpt As Long

With Sheets("AED-RAW")
    T_In = .Range("A6", .Range("E" & Rows.Count).End(xlUp))
    For Lig = LBound(T_In, 1) To UBound(T_In, 1)
        If T_In(Lig, 5) <> "" Then
            ReDim Preserve T_Out(1, Cpt)
            T_Out(0, Cpt) = T_In(Lig, 5)
            T_Out(1, Cpt) = T_In(Lig, 1)
            Cpt = Cpt + 1
         End If
    Next
    .[F2].Resize(UBound(T_Out, 2), 2) = Application.Transpose(T_Out)
End With
0