Demande de macro excel

Julien -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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 )

4 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    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
    1. Julien
       
      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
    2. Julien
       
      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
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    Salut,
    Désolé, je ne peux pas ouvrir les fichiers .xlsx...
    Merci d'enregistrer sous / type de fichier : Classeur Excel 97-2003...
    0
    1. Julien
       
      http://cjoint.com/?BCmnIYsifIN

      Voila, j'ai supprimé des lignes pour que ça passe, il reste à présent 8triggers
      0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    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
  4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    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