Problème VBA

Bonjour,

Je vous explique mon problème: j'ai un tableau de deux colonne, dans la première il y a des dates et des heures et dans la seconde des articles pouvant apparaître plusieurs fois dans la colonne mais à des dates différentes . Je souhaiterai pour chaque article différent garder seulement la ligne avec la date la plus récente, les autres lignes devront être supprimées, tout ça en appuyant sur un bouton. J'ai donc commencé par trier les colonnes pour que tous les articles identiques soit groupés et c'est à partir de ce moment là je suis bloqué. Il faut savoir que les données du tableau ne sont pas fixes, le nombre de ligne changera à chaque utilisation du fichier, de nouveaux articles peuvent apparaître et d'autres disparaître.

Vous trouverez ci-joint un exemple

Merci d'avance

Bonjour,

Essaie ça :

Sub galopin()
Dim i, k
   With Range("A1").CurrentRegion
    .Sort Key1:=.Range("B1"), Key2:=.Range("A1"), Header:=xlGuess, Orientation:=xlTopToBottom
    i = .Rows.Count
Application.ScreenUpdating = False
For k = 2 To i - 1
   Do While .Cells(k, 2) = .Cells(k + 1, 2)
   Rows(k).Delete
   If .Cells(k, 2) = "" Then Exit For
   Loop
Next
   End With
End Sub

A+

Bonjour Rémy

Une proposition :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TA() As Variant 'déclare la variable TA (Tableau des Articles)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I dui tableau des valeurs TV
    D(TV(I, 2)) = "" 'alimente le dictionnaire avec les éléments ligne I colonne 2 de TV
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublons
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments J du tableau temporaire TMP
    K = 0: Erase TA 'réinitialise la variable K, efface le tableau des articles TA
    For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
        If TV(I, 2) = TMP(J) Then 'condition : si la donnée ligne I colonne 2 de TV est égale à la valeur de l'élément J de TMP
            ReDim Preserve TA(K) 'redimensionne le tableau des articles TA
            TA(K) = I 'récupère dans la ligne K de TA, le numéro de la ligne I de la boucle 2
            K = K + 1 'incrémente K
        End If 'fin de la condition
    Next I 'prichaine ligne de la boucle 2
    For L = UBound(TA) To 1 Step -1 'boucle 3 : boucle inversée sur tous les éléments de TA sauf le premier (du dernier au second)
        O.Rows(TA(L)).Delete 'supprime la ligne de lélément TA de la boucle
    Next L 'prochain élément de la boucle 3
    TV = O.Range("A1").CurrentRegion 'redéfinit la tableau des valeurs TV
Next J 'prochain élément de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

[Édition]

Bonjour Galopin, nos post se sont croisés. Franchement je ne te comprends pas... Pourquoi faire si simple alors qu'on peut faire beaucoup plus compliqué !...

Merci Beaucoup !!! Ca marche super bien

ThauThème a écrit :

Franchement je ne te comprends pas... Pourquoi faire si simple alors qu'on peut faire beaucoup plus compliqué !...

Re,

Merci pour le thé. C'est peu mais ça corrige ma honte...

Rechercher des sujets similaires à "probleme vba"