VBA : Supprimer doublons mais en choisissant la ligne
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
- VBA : Supprimer doublons mais en choisissant la ligne
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
1 réponse
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