Code VBA insertion clé non existante dans une liste

Bonjour,

Je bloque actuellement sur le code d'une macro VBA.

Je dispose d'une feuille "Feuil1" dans laquelle la colonne A contient sur chacune des lignes des clés distinctes, la colonne B contient des valeurs en face de chacune des clés. Je charge ensuite un dictionnaire en VBA avec les clés de la colonne A et les valeurs associées de la colonne B.

Mon but est de recopier sur une autre feuille "Feuil2", ne contenant que la colonne des clés, les valeurs associées dans une autre colonne valeur à côté et sachant que de nouvelles lignes clé/valeur peuvent être ajouté dans "Feuil1".

J'aimerais donc faire un code qui fait une boucle sur l'ensemble des clés du dictionnaire (avec les nouvelles clés) et parcours la colonne des clés sur "Feuil2" et regarde :

  • Si la clé existe parmis la colonne des clés alors recopier la valeur associée
  • Si la clé n'est pas encore dans la colonne des clés alors l'ajouter à la suite de la dernière ligne et recopier la valeur associée.

Merci d'avance

8testkey.xlsx (450.25 Ko)

bonjour,

une solution possible

Sub aargh()
    Set ws1 = Sheets("feuil1")
    Set ws2 = Sheets("feuil2")
    dlws1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
    dlws2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To dlws1
        Set re = ws2.Range("A2:A" & dlws2).Find(ws1.Cells(i, 1), lookat:=xlWhole)
        If re Is Nothing Then
            dlws2 = dlws2 + 1
            j = dlws2
            ws2.Cells(j, 1) = ws1.Cells(i, 1)
        Else
            j = re.Row
        End If
        ws2.Cells(j, 2) = ws1.Cells(i, 2)
    Next i
End Sub

Bonjour,

Merci pour ta réponse rapide

Ton code semble faire une comparaison feuille à feuille de la colonne des clés. C'est effectivement une solution possible même si ce n'est pas exactement la structure de code que je recherche.

J'ai oublié de mettre mon début de code et la structure que j'aimerais avoir :

Sub test()

    Dim dicoo As New scripting.Dictionary
    Dim last_ligne As Integer, last_cell As Integer, j As Integer

    Call Remplir_Dico(dicoo, "Feuil1", "Cle", "Valeur")        ' Je remplis mon dictionnaire

    last_ligne = Range("A1").End(xlDown).Row

    For Each Key In dicoo.Keys
        For j = 1 To last_ligne - 1

        Next j
    Next Key

End Sub

J'aimerais avoir cette structure de code et remplir la partie avec la double boucle. et donc pour chaque clé du dictionnaire parcourir la colonne des clés de "Feuil2" et si la clé existe déjà alors copier la valeur sinon insérer une nouvelle ligne et sa valeur.

Merci encore

bonjour,

une proposition avec un dictionnaire.

Set ws2 = Sheets("feuil2")
    last_ligne = ws2.Range("A1").End(xlDown).Row

    For Each Key In dicoo.Keys
        Set re = ws2.Range("A2:A" & last_ligne).Find(Key, lookat:=xlWhole)
        If re Is Nothing Then
            last_ligne = last_ligne + 1
            j = last_ligne
            ws2.Cells(j, 1) = Key
        Else
            j = re.Row
        End If
        ws2.Cells(j, 2) = dicoo.Item(Key)
    Next Key

Merci beaucoup h2so4 ! Ca fonctionne parfaitement et c'est exactement le résultat que je voulais !

Rechercher des sujets similaires à "code vba insertion cle existante liste"