IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Script VBA classement donnée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Par défaut Script VBA classement donnée
    Bonjour,

    Faisant face à un nombre conséquent de donnée, et n'ayant pas fait de VBA depuis des années, je vous avoue que je galère..

    Exposition du problème :

    Je possède un classeur excel avec un grand nombre de donnée (>500).
    Les données sont des résultats biologiques de deux machines, classées par nom.

    Cependant l'extraction des données a été faite ainsi :
    Une ligne correspond à un résultat biologique d'une machine pour une personne
    ce qui veux dire, que je possède plusieurs ligne, avec un même nom et des résultats.

    Objectif :

    J'aimerais regrouper les différents résultats biologiques d'un même patient qui vont être répartie sur la ligne 1,2, et 3, en : une seule ligne, avec le nom unique (afin d'éviter d'avoir plusieurs ligne, avec plusieurs fois le même prénom)




    Si vous avez la bonter de bien vouloir m'aider, je vous en serais absolument reconnaissant ^^
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    je recommander de simplement résultat type (x) dans une seule colonne (colonne E) et insérer un TCD avec comme colonne Résultat Type et tu aura ce que tu veux sans VBA

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour

    un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub test()
      Dim old As Range, Dl As Long, plage As Range, meslignes As String, I As Long
      Set plage = ActiveSheet.UsedRange ' adapter a ton contexte 
        Dl = Cells(Rows.Count, 1).End(xlUp).Row
        Set old = plage.Cells(1, 1)
        For I = 2 To Dl
            If Cells(I, 1).Text = old.Text Then
                If old.Offset(, 4) = "" And plage.Cells(I, 1).Offset(, 4).Text <> "" Then old.Offset(, 4) = plage.Cells(I, 1).Offset(, 4).Text: x = True
                If old.Offset(, 5) = "" And plage.Cells(I, 1).Offset(, 5).Text <> "" Then old.Offset(, 5) = Cells(I, 1).Offset(, 5).Text: x = True
                If old.Offset(, 6) = "" And plage.Cells(I, 1).Offset(, 6).Text <> "" Then old.Offset(, 6) = plage.Cells(I, 1).Offset(, 6).Text: x = True
     
            If x = True Then meslignes = meslignes & " " & plage.Rows(I).Address
            Else
                Set old = plage.Cells(I, 1)
            x = False
            End If
        Next
    'netoyage
    meslignes = Replace(Trim(meslignes), " ", ",")
    plage.Parent.Range(meslignes).EntireRow.Delete
    End Sub
    avec la variable plage il n'est pas forcé que la plage a (trier, arranger, nettoyer )commence en ("A1")
    en fin de macro je supprime les lignes obsolètes

    avant

    Nom : avant.JPG
Affichages : 235
Taille : 51,9 Ko

    après

    Nom : apres.JPG
Affichages : 229
Taille : 54,5 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Par défaut
    Bonjour,

    Ouaw, je ne m'attendais pas une réponse aussi rapide,
    je regarde ton code dans la soirée, pour voir ce que ça donne et te faire un retour !

    En tout cas,
    un grand merci pour votre réactivité !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Par défaut
    Bonjour, je vous pris d'excuser le retard dans mon intervention, j'ai été pas mal pris malheureusement.

    Alors du coup, j'ai re-regarder mon extraction de donnée, et il y a plusieurs choses a prendre en compte.

    la première c'est que j'ai omis un détail de selection non négligeable, alors je re-explique le but de l'algo, et les objectifs :

    Le but étant toujours le même : extraire de cette longue liste les données pertinentes.

    J'ai simplifié le problème, en considérant qu'il n'y avait que deux valeurs (les deux colonnes tout a droite en bleu).

    Objectif : Extraire les données d'un même patient, de l'automate 1 et 2, les mettre sur une seule ligne, seulement et seulement si les resultats sont du même jours avec 1h max d'écart.
    Le but étant d'associé un résultat de l'automate un, sur une même ligne avec un résultat de l'automate 2 qui a été fait avec max 1h de différence.


    Etant donnée que les resultats de l'automate 1 (colonne resultat gauche) sont moins nombreux, ils sont donc plus discriminants, voila donc a ce que j'ai pensé : Exemple (par rapport au screen)

    ----------------------------------------

    1.Il faut que l'algorithme en premier lieu : détermine la plage des différentes valeurs d'un même patient : pour nom1 de 105 a 109
    une fois ça déterminé

    2. L'agorithme doit parcourir les ligne de l'automate 1 du NOM 1

    -> si première case est vide (de l'automate 1)
    alors : lire la deuxième case ( de l'automate 1) tant qu'il ne trouve pas un résultat automate 1
    en gros il parcours, dans l'ordre les resultats automate 1, jusqu'a avoir une valeur

    Si il trouve un resultat : premier résultat trouver dans l’exemple est donc 70
    --------------- alors : l'algorithme cherche en colonne resultat automate 2, un resultat (une case non vide) qui a moins d'une heure de différence.
    -------------------- si il trouve : alors il concatène ces deux resultats dans une nouvelle feuille
    -------------------- sinon (=aucune valeurs automate 2 <1h) : il peut passer a la deuxième valeur automate 1 qui est 134, de même, il cherche a l'associé avec un résultat automate 2 qui a <1h d'écart

    dans l’exmple 1, ici rien ne sera extrait car aucun resultat automate 2 < 1h (pour le 70)

    Résultat exemple : cf screen resultat 1

    Dans le cas ou : 1 valeur automate un peut être associé a 2 résultat automate 2 (<1h donc), deux ligne seront crée : cf exemple 2


    Nom : donne_image.png
Affichages : 225
Taille : 20,0 Ko
    les valeurs ajouté en rouge, on été ajouté pour le cas exemple 2


    J'espère que c'est clair au maximum, et encore merci de votre aide, vous allez peut-être me sauver la vie <3
    d'ailleurs si quelqu'un veux m'aider et souhaite me poser des questions en direct, je suis dispo Discord, skype, même tel ^^

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Par défaut
    Petit ajout :

    Après verification, pour que l'algorithme verifie qu'il y est bien une durée inférieur d'une heure entre les deux résultats d'automate, la différence des deux dates permet de sortir une valeur

    exemple : (13/06/19 6:10) - (13/06/19 7:10) =0.041
    la différence des dates/heures doit donc être <0.041..

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Par défaut
    dernier petit message (désolé, je spam un peu..)

    Mais vous trouverez ici en exemple (xls) les données de départ, et ce que je souhaite a l'arriver.. Extraction-test.xlsx

Discussions similaires

  1. [XL-2013] Formule ou VBA Classement selon données tableau + ancienneté acquise
    Par samsam007 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/04/2014, 10h42
  2. Script vba ne donne pas le resultat souhaité
    Par developpeur82 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/01/2013, 17h18
  3. Réponses: 1
    Dernier message: 19/01/2006, 19h22
  4. Réponses: 7
    Dernier message: 09/11/2005, 14h37
  5. [SQL Server 2000] Générer le script SQL des données
    Par Giovanny Temgoua dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 31/03/2005, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo