Importer sans doublon des données d'un autre fichier
Bonjour à tous,
Je débute avec VBA mais en parcourant internet j'ai réussi à écrire une dizaine de macros pour le fichier sur lequel je travaille (c'est déjà une belle victoire pour moi ^^)
Mais là je bloque car à partir de mon fichier existant, contenant déjà des données, je cherche à importer depuis un autre fichier que des nouvelles données (sans doublons quoi).
En simplifiant, j'ai un fichier suivi sectoriel (base_suivi_simplifiee) et un fichier contenant tous les secteurs (base_all_simplifiee) qui lui est renseigner tous les jours.
Je souhaite créer une macro dans le fichier base_suivi_simplifiee pour qu'il aille retrouver les numéros d'intervention de base_all_simplifiee dont le code activité est "VER" ET qui ne sont pas encore présent dans mon fichier suivi puis qui les colle à la suite des données déjà présentes dans mon fichier suivi.
Un exemple vaut mieux qu'un long discours, voici en pièces jointes les 2 fichiers.
Avec dans le fichier "base_suivi_simplifiee", le premier onglet : l'état actuel et dans le deuxième ongle le résultat attendu.
Mais c'est juste pour illustrer car je souhaiterais que les nouvelles lignes soient directement intégrer à l'onglet base_suivi
pour le code, j'ai essayé de faire quelque chose (import_sans_doublon), mais c'est pas joli joli et surtout il copie / colle même les numéros d'intervention déjà présent (donc des doublons) ...
Sub import_sans_doublon()
For i = 2 To 102 Step 1
Windows("base_suivi_simplifiee.xlsm").Activate
Test = Cells(i, 2).Value
Windows("base_all_simplifiee.xlsm").Activate
If Cells(i, 8).Value = "VER" Then
If Test <> Cells(i, 1).Value Then Cells(i, 1).Copy _
Workbooks("base_suivi_simplifiee.xlsm").Worksheets("base_suivi").Cells(i + 5, 2)
End If
Next i
Windows("base_suivi_simplifiee.xlsm").Activate
ActiveSheet.ListObjects("Tableau1").Resize Range("$A$1:$M$115")
ActiveWorkbook.Worksheets("base_suivi").ListObjects("Tableau1").Sort.SortFields _
.clear
ActiveWorkbook.Worksheets("base_suivi").ListObjects("Tableau1").Sort.SortFields _
.Add Key:=Range("Tableau1[[#All],[Numéro Intervention]]"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("base_suivi").ListObjects("Tableau1").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End SubMerci par avance pour votre aide.
A +
mita
bonjour,
Une solution en pièce jointe.
Attention J'ai renommé les classeurs
J'ai renommé les feuilles "source" et "cible"
Il conviendra d'ajuster la macro en conséquence (Ligne 5, 9 et 11)
Si tu trouves que c'est un petit peu lent rajouter un petit coup de ScreenUpdating comme indiqué :
If WbIsOpen(NameWbC) Then 'Si le Classeur Cible est ouvert
Application.ScreenUpdating = False 'On crée les références d'objetsA+
Merci beaucoup Galopin,
Ta macro fonctionne nickel, c'est tout à fait ce que je cherchais !
J'avoue je ne connaissais pas comment utiliser les Array.
Je vais pouvoir continuer à compléter le reste du fichier.
Merci beaucoup pour ton aide précieuse !
Aux plaisirs d'un prochain échange sur le forum.
Sincèrement,