Utiliser une clé primaire dans VBA pour donner une instruction

Bonjour,

J'ai une base de données contenant les valeurs de revente de différentes actions, ces dernières étant différenciées par leur code ISIN. J'aimerais ne conserver que la ligne ayant la date la plus récente par code ISIN (donc que l'ISIN soit une clé pour donner l'instruction).

J'ai dans un onglet "Feuil1" tous mes ISIN. Dans mon onglet "Base source", j'ai toutes les valeurs historiques (l'ISIN apparaît donc plusieurs fois).

Je vous joins un fichier simplifié pour que vous ayez l'idée :

11bdd.xlsm (61.79 Ko)

Voilà le code que j'ai commencé à écrire, mais je ne sais pas comment remplir l'intérieur de la boucle For Each (pour lui dire de copier la ligne contenant la date la plus récente par code ISIN et la coller dans l'onglet "Base 2").

Sub BDD()
'ISIN prend toutes les valeurs de la colonne A :
    ISIN = Sheets("Feuil1").Cells(i, 1).Value
'Nombre de lignes non vides de la colonne A (car peut évoluer) :
    nbLig = Application.WorksheetFunction.CountA(Feuil1.Range("$A:$A"))

    For i = 2 To nbLig
        For Each ISIN In Sheets("Base source")

        Next ISIN
    Next i
End Sub

J'ai trié la base par ordre alphabétique d'ISIN puis par date récente, et j'aimerais ne prendre que la première ligne rencontrée par code ISIN. Est-ce faisable ?

Merci beaucoup par avance pour vos réponses

Bonjour Alinoush et

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum.

Concernant votre demande, vous souhaitez supprimer toutes les autre lignes du même ISIN,
ou juste retourner la dernière valeur connue ?

Merci de votre participation

Cordialement

bonjour,

Sub BDD()
     Dim Vide()
     'ISIN prend toutes les valeurs de la colonne A :
     Set dict = CreateObject("scripting.dictionary")     'dictionary comme cahier de brouillon
     dict.CompareMode = vbTextCompare    'ne pas sensible aux majuscules et minuscules

     isin = Sheets("Base Source").Cells(1, 1).CurrentRegion.Resize(, 6).Value2     'value2 !!! (il y a des dates et des currency !!!!

     For i = 2 To UBound(isin)     'boucle de la 2ieme ligne vers derniere ligne
          If Not dict.exists(isin(i, 2)) Then     'est ce isin déjà dans le dictionary
               dict(isin(i, 2)) = Application.Index(isin, i, 0)     'non = ajouter toute la ligne
          Else
               it = dict(isin(i, 2))     'la ligne precedente de cet isin
               If it(2) < isin(i, 3) Then dict(isin(i, 2)) = Application.Index(isin, i, 0)     'si la date precedente est inférieur, prenez cette ligne
          End If
     Next

     i = dict.Count     'nombre de isin different
     If i = 1 Then     'bug s'il n'y a qu'un record dans la dictionary
          ReDim Vide(1 To UBound(isin, 2))
          dict.Add dict.Count, Vide
     End If

     lignes = Evaluate("ROW(1:" & i & ")")     'array ordre croissant 1,2,3, ...,i
     colonnes = Evaluate("{2,1,3,4,5,6}")     'ordre des colonnes PASTE
     With Sheets("feuil1").Range("A1").Resize(i, UBound(isin, 2))
          .Value = Application.Index(dict.items, lignes, colonnes)     'ajouter le contenu des items du dictionary
          .Sort .Range("A1"), Header:=xlNo     'sort on isin
     End With
End Sub
Rechercher des sujets similaires à "utiliser cle primaire vba donner instruction"