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 :

Gestion de doublons en fonction de conditions et ordres de priorités.


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Gestion de doublons en fonction de conditions et ordres de priorités.
    Bonjour/bonsoir à tous et à toutes,

    Je viens une nouvelle fois m'enquérir de votre aide précieuse en ces jours de fortes chaleurs ! ^^

    Je vous explique la situation, chaque semaine j'ai une requête à effectuer sur une base de donnée. De cette requête je récupère un (très) grand nombre d'information, plus précisément d'opérations en fait. Elles sont caractérisées par un numéro dit "OI" et une spécification, une date..et...un état.

    Jusque là tout va bien. Je trie ensuite moi-même dans différentes fenêtres via des filtres, chaque OI en fonction de son état (REDI, VERI, PRET..) et je commente l'opération en fonction de mes besoins.

    Mon soucis c'est que, la semaine d'après, lors de ma nouvelle requête, je mets à jour mon fichier. Alors quand je me retrouve avec des doublons purs et simples, car d'une semaine à l'autre l'opération est toujours au même état ça ne me pose aucun soucis. Sauf que quand mon OI a changé d'état, c'est carrément la merde.

    Exemple : Le 29 avril, mon OI était à l'état VERI. Okay, je la traite, je la commente, et la range dans la feuille VERI.

    Bam, le 5 mai elle a changé d'état elle passe en PRET, sauf qu'elle apparaît et dans ma feuille VERI et dans ma feuille PRET, après mise à jour de mon fichier. Et si je ne vérifie pas manuellement qu'une OI n'est pas présente dans plusieurs feuilles, je n'ai pas connaissance du fait que l'OI ait changé d'état. Alors il n'y aurait que 20 OI à chaque fois à vérifier, je dis pas à la main ça passe encore, mais quand on en a 6000-7000 ça commence à faire beaucoup.

    Donc ma problématique est la suivante ? Comment gérer le repérage des doublons de numéro (ou identifiant si vous voulez) de l'OI et en fonction de son état, la supprimer ou pas ? Sachant que si j'ai une OI en état VERI et une autre en état PRET, c'est la VERI que je supprime et la PRET que je garde. Si j'en ai une PRET et une FINT, c'est la FINT que je garde et la PRET que je supprime. Vous voyez le problème ?

    J'ai cherché du côté de la fonction RemoveDuplicate mais il ne me semble pas qu'il soit possible de définir un critère de suppression avec une logique bien déterminée (un ordre de priorité je veux dire).

    Si quelqu'un a des pistes à me donner sur comment enclencher cette logique de programmation, se serait super sympa !

    Bien à vous,

    Charly/Arkadian

  2. #2
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonsoir, par 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
    Sub eliminer_doublon()
    Dim i As Integer, j as integer
    Dim DouBlon As Range
     
    ArrWd = Split("pret,veri", ",")
    On Error Resume Next
    For i = 0 To UBound(ArrWd)
        With Sheets(ArrWd(i))
            For j = .Range("a65000").End(xlUp).Row To 1 Step -1
            Set DouBlon = Sheets(ArrWd(i + 1)).Columns(1).Find(Cells(j, 1))
            If Not DouBlon Is Nothing Then .Cells(j, 1).EntireRow.Delete
            Next j
        End With
    Next i
     
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Salut ! Merci de ta réponse Peux-tu détailler un peu ton code en le commentant ? Je ne saisis pas tout ^^' du genre sur quelles colonnes tu te bases, etc...

    Le Split, ça correspond à quoi ? Tes priorités ?
    Concernant ton For en "To 1 Step -1" j'en déduis donc que tu pars de la fin de mes données. Ma question est pourquoi comme ça plutôt que l'inverse ?

    EDIT: J'apporte une précision,

    Chaque opération (OI) peut apparaître plusieurs fois dans mes données de ma feuille si vous voulez. Mais à des états différents. Sauf que je dois garder celle avec "l'état le plus avancé". Le truc, c'est qu'après je peux avoir en ligne 27 une OI 54 admettons, à l'état PRET, et une autre OI 54 en ligne 4568, à l'état VERI. Sauf que c'est l'état PRET le plus avancé, donc c'est celle-ci que je dois garder et l'autre en ligne 4568 que je dois delete. Vous voyez ce que je veux dire ? Et en plus de ça, une OI peut d'un moment A à un moment B, avoir changé de plusieurs états, du genre de VERI à FINT, sachant qu'entre ces deux là il y a (par ordre d'importance et liste non-exhaustive) VERI, REDI, PRET et FINT admettons. Et je dois être en mesure de traiter ce cas là aussi.

    En fait j'ai besoin de virer mes doublons d'OI en gardant les plus récentes et en enlevant celles obsolètes. Et j'ai du mal à m'approprier le code que tu m'as gentiment confectionné ^^' Après je ne demande qu'à comprendre, donc si quelqu'un me donne des pistes ça me va. Je demande pas le truc tout fait, c'est pas le but, et je veux comprendre ce que je fais.

    De mon côté j'ai cherché dans tout les sens et je ne vois pas trop comment faire à part avec des If pour les conditions de suppression m'enfin je vois déjà arriver la taille du truc...

  4. #4
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonsoir

    point A : Ne connaissant rien a l'articulation de ton classeur, j'ai coder sur ce principe
    plusieurs feuilles, chacune appeler PRET, VERI et FINT
    Une cle, sans doute OI, que je recherche depuis la colonne A de PRET dans la feuille VERI. si celle ci est presente en VERI, je la retire de la feuille PRET
    dans la boucle suivante(arrwd) qui me permet de passer d'une feuille a l'autre, je fais pareil en eliminant les cle presentent dansVERI si elle sont presentes en FINT

    losrsque l'on veut eliminer une ligne, partir du bas, c'est comme ça. D'ou le step -1
    lors d'une boucle, on supprime la ligne 45, donc la ligne 46 devient 45 et excel ou vba ou les deux, et moi avec, y perd son latin



    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
    Sub eliminer_doublon()
    Dim i As Integer, j as integer
    Dim DouBlon As Range
     
    ArrWd = Split("PRET,VERI", ",")'met en tableaux les noms des feuilles, l'ordre, l'orthographe, les majuscules sont a respecter
    On Error Resume Next
    For i = 0 To UBound(ArrWd)'boucle sur toutss les feuilles du tableau
        With Sheets(ArrWd(i))
            For j = .Range("a65000").End(xlUp).Row To 1 Step -1'a cause du latin
            Set DouBlon = Sheets(ArrWd(i + 1)).Columns(1).Find(Cells(j, 1))'cherche un doublon dans la feuille suivante(arrwd,i+1)
            If Not DouBlon Is Nothing Then .Cells(j, 1).EntireRow.Delete'supprime la ligne
            Next j
        End With
    Next i
     
    End Sub
    n'hesite pas si cela est insuffisant. Enjoy

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Vraiment un gros merci pour cette réponse ! Je vais voir à adapter ça et t'en dire le retour

Discussions similaires

  1. Tri et gestion de doublons
    Par Ygster dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 26/04/2006, 16h00
  2. Problème de gestion de doublons
    Par EJ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2006, 19h35
  3. Enlever les doublons en fonction de la date
    Par nicko5959 dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2006, 14h13
  4. Doublons et fonction substring-before
    Par dalefou dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 30/09/2005, 14h12
  5. [Débutant] [JComboBox] Gestion de doublons
    Par nounetmasque dans le forum Composants
    Réponses: 2
    Dernier message: 04/05/2005, 15h08

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