Meilleure manière de compléter une feuille par une autre feuille

siocnarf

XLDnaute Occasionnel
Bonjour,

Je me perds en conjecture. J'ai un classeur avec deux feuilles (table 1 et table 2). Je souhaite compléter la table 2 avec la colonne B de la table 1 en plaçant à la fin de table 2 les éléments manquants. La table 1 est dynamique et donc peut s'allonger. Pour compliquer le tout, il est possible que deux éléments identique se retrouve en colonne B de la table 1. J'aimerais m'assurer que les items de la colonne B de la table 1 ne se retrouve qu'une fois dans la table 2.

Je veux le faire en VBA mais je me perds sur quelle approche devrait être privilégiée.

J'ai mis un exemple en pièce jointe.

Merci,

François
 

Pièces jointes

  • test.xlsx
    9.2 KB · Affichages: 33
  • test.xlsx
    9.2 KB · Affichages: 35
  • test.xlsx
    9.2 KB · Affichages: 35

Modeste

XLDnaute Barbatruc
Re : Meilleure manière de compléter une feuille par une autre feuille

Bonjour François,

Pas certain du tout d'avoir compris :confused: Pour les doublons, rien de mieux qu'un objet Dictionary!
Code à placer dans le module de la feuille "Table 2": la macro s'exécute chaque fois que la feuille est activée.
VB:
Private Sub Worksheet_Activate()
With Sheets("Table 1")
    Set liste = CreateObject("scripting.dictionary")
    For lig = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
        liste(.Cells(lig, 2).Value) = ""
    Next lig
End With
[B2].Resize(liste.Count) = Application.Transpose(liste.keys)
End Sub
 

siocnarf

XLDnaute Occasionnel
Re : Meilleure manière de compléter une feuille par une autre feuille

Bonjour,

Je vais reformuler.
Il y a deux tables:

1. Je veux intégrer à mon code VBA une manière de faire pour copier les éléments de la table 1 qui sont manquants dans la table 2. Les éléments manquants sont dans la colonne 2 de la table 1.
3. Dans la colonne B de la table 1, vous remarquerez qu'un même item peut apparaître plus d'une fois. Je souhaite que cet item ne soit reporté qu'une fois dans la table 2.
4. J'ai une inquiétude pour le transpose. Est-ce qu'il écrasera ce qui est existant ou ajoutera ce qui est manquant? Il est important de ne pas écraser ce qui est déjà présent dans la table 2.
5. Je ne modifie pas la table 1.

Est-ce plus clair ainsi?

Pour ton code, je vais y jeter un coup d'œil.

Je vais rejoindre ma pièce et ajouter des précisions dans le classeur.

Merci,

François
 

Pièces jointes

  • test2.xlsx
    10.3 KB · Affichages: 26
  • test2.xlsx
    10.3 KB · Affichages: 30
  • test2.xlsx
    10.3 KB · Affichages: 35
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Meilleure manière de compléter une feuille par une autre feuille

Re-bonjour,

Une adaptation du premier essai (dont la dernière instruction écrasait effectivement tout ou partie des valeurs présentes en "Table 2"). Je n'ai plus exploité le Worksheet_Activate, puisque je présume que cette macro tournera en "one shot" ou, à tout le moins, de manière moins systématique??

Coller le code dans un module standard, cette fois:
VB:
Sub ajoutNouveaux()
    Set liste = CreateObject("scripting.dictionary")
    Set liste2 = CreateObject("scripting.dictionary")
    With Sheets("Table 2")
         For lig = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
             liste(.Cells(lig, 2).Value) = ""
         Next lig
    End With
    With Sheets("Table 1")
         For lig = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
             If Not liste.exists(.Cells(lig, 2).Value) Then liste2(.Cells(lig, 2).Value) = ""
         Next lig
    End With
    Sheets("Table 2").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Resize(liste2.Count) = Application.Transpose(liste2.keys)
End Sub
 
Dernière édition:

siocnarf

XLDnaute Occasionnel
Re : Meilleure manière de compléter une feuille par une autre feuille

Bonjour,

J'ai testé le code. Excellent code. Toutefois, j'ai noté que les lignes se copiaient sous Liste au lieu de liste 1. J'ai adapté le code à mes besoins et il fonctionne numéro 1. Je n'aurais jamais imaginé cela.

Merci,

François
 

Discussions similaires

Statistiques des forums

Discussions
312 166
Messages
2 085 899
Membres
103 024
dernier inscrit
rdge