VBA : Supprimer doublons mais en choisissant la ligne

Jerome -  
 Jerome -

Bonjour la communauté,

J'essais dans une VBA de faire une suppression de doublon de la colonne P, sauf que les doublon en colonne P ne le sont pas en colonne I car la date est différente

EX: Michiel en P4; P25; P76, mais par contre Michiel en P me donne par Exemple I4 (01/01/2023); I25 (06/01/2023) et I76 (26/01/2023).

Ce que je veux c'est supprimer ceux avec la date les plus récentes pour ne garder que celui qui a la date la plus ancienne (I76 dans l'exemple) sauf que mon code ne fonctionne pas pour cette partie. Pourriez vous m'aider s'il vous plait ? 

Voici l'explication du code

Sur la cellule V2 de la feuille nommée "IEP" : Il faudrait filtrer la colonne D nommée « Libellé Type de Soin - Venue/Passage » sur « HOSPITALISE » et faire :

Dim ws As Worksheet '

Set ws = ThisWorkbook.Sheets("IEP")

' ' Appliquer la formule à partir de la cellule V2 jusqu'à la dernière ligne ws.Range("V2:V" & derligne).Formula = _ "=IF(H2="""",""Pas de date de sortie à vérifier"",IF(OR(I2=H2, I2>H2), ""Totalement facturé mais bloqué en P"", IF(I2="""", ""Non facturé"", ""Reste des jours à facturer"")))"

‘ Ensuite il faut filtrer la colonne D nommée « Libellé Type de soins- Venue/Passage » sur « I.V.G et SEANCES » et vérifier si P2 a des doublons dans la colonne P nommée « IEP - Venue/Passage ». S’il n’y a qu’une ligne sans doublon on la laisse. Par contre, s’il y a des doublons, il faut garder uniquement la ligne qui a dans la colonne J nommée « Date Fin Mvt dd/mm/yyyy » la date la plus vielle et supprimer les autres pour ne pas avoir de doublons.

Ensuite il faut faire sur la cellule V2 : SI(I2=""; "Non facturé"; SI(J2=I2 ou ;I2>J2 "Complètement facturé : pas de nouvelles séances" ; "Reste des séances à facturer"))

Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("IEP")
    
    ' Dernière ligne remplie de la colonne B
    Dim derligneC As Long
    derligneC = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    
    ' Filtrer la colonne D sur "HOSPITALISE"
    ws.Rows(1).AutoFilter Field:=4, Criteria1:="HOSPITALISE"
    
    ' Appliquer la formule à partir de la cellule V2 jusqu'à la dernière ligne
    ws.Range("V2:V" & derligneC).Formula = _
        "=IF(H2="""",""Pas de date de sortie à vérifier"",IF(OR(I2=H2, I2>H2), ""Totalement facturé mais bloqué en P"", IF(I2="""", ""Non facturé"", ""Reste des jours à facturer"")))"
    
    ' Désactiver le filtre
    ws.AutoFilterMode = False
    
    ' Filtrer la colonne D sur "I.V.G" et "SEANCES"
    ws.Rows(1).AutoFilter Field:=4, Criteria1:="I.V.G", Operator:=xlOr, Criteria2:="SEANCES"
    
    ' Supprimer les doublons dans la colonne P
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    
    Dim i As Long
    For i = 2 To lastRow
        If Not dict.Exists(ws.Cells(i, 16).Value) Then
            dict.Add ws.Cells(i, 16).Value, ws.Cells(i, 10).Value
        Else
            If ws.Cells(i, 10).Value < dict(ws.Cells(i, 16).Value) Then
                dict(ws.Cells(i, 16).Value) = ws.Cells(i, 10).Value
            End If
        End If
    Next i
    
    ' Supprimer les lignes en doublon
    For i = lastRow To 2 Step -1
        If dict(ws.Cells(i, 16).Value) <> ws.Cells(i, 10).Value Then
            ws.Rows(i).Delete
        End If
    Next i
    
    ' Appliquer la formule à partir de la cellule V2 jusqu'à la dernière ligne
    ws.Range("V2:V" & derligneC).Formula = _
        "=IF(I2="""",""Non facturé"",IF(OR(J2=I2, I2>J2),""Complètement facturé : pas de nouvelles séances"",""Reste des séances à facturer""))"
    
    ' Désactiver le filtre
    ws.AutoFilterMode = False

Merci pour votre aide
Windows / Chrome 120.0.0.0

1 réponse

Jerome
 

Bonjour à tous,

Après mettre tiré les cheveux dans tous les sens j'ai compris pourquoi ce n'était pas pris en compte... Plus haut dans ma macro je supprimais déjà les doublons donc dans ma deuxième demande il n'y avait plus rien à supprimer... Et donc forcément le critère de la date n'était pas pris

Je n'arrive pas à le passer en résolu si quelqu'un y arrive

Belle journée à tous

0