Importer une plage de donnée d'une feuille d'un classeur à un autre

Bonjour à tous,

J'ai un tableau 1 avec une feuille "feuille1".Je souhaite envoyer les données d'une plage de données de "feuille1", disons A1:D200 vers un tableau 2, sur la feuille "feuille2" et dans les colonnes A à D.

2 spécificités :

  1. - Je ne souhaite pas copier les doublons des lignes déjà copiées sur le second tableau.
  2. Je souhaite que ces lignes soient copiées à la dernière ligne non vide de mon tableau.

J'ai un début de code si cela peut vous aider. (Bien qu'il ne doive pas vous être d'une grande utilité ...)

Sub ImportData()
    Dim FileLocation As String

    FileLocation = Application.GetOpenFilename
    If FileLocation = "False" Then
        Beep
        Exit Sub
    End If

    Application.ScreenUpdating = False
    Set ImportWorkbook = Workbooks.Open(Filename:=FileLocation)

    ImportWorkbook.Worksheets("Feuille1").Range("A2:D4").Copy ThisWorkbook.Worksheets("Déclanchat").Range("A:D")
    ImportWorkbook.Close
    Application.ScreenUpdating = True
End Sub

Je vous remercie d'avance pour vos lanternes et dans l'optique de me sortir de cette galère, je vous souhaite une bonne après-midi !

Hello,

Tu as une colonne pour identifier les doublons entre tableau 1 et dans ton tableau 2 ?

Salut Vegéta !

Tout à fait, mes données communes pour les identifier se trouvent dans la colonne B dans le fichier source et la colonne C dans le fichier de destination.

Hello

Voici une proposition qui verifie les doublons/ filtre le tableau source / copie le resultat sous le tableau 2

Il faudra que tu gères la partie import des feuilles mais ça si tu es un vrai sayajin tu sauras faire

Sub CopyRng()
    Dim dict1 As Object, dict2 As Object
    Dim i&
    Dim rngTmp As Range
    Dim varTabTmp As Variant

    ' Identifie la derniere ligne destination
    i = Worksheets(2).Cells(Worksheets(2).Rows.Count, "C").End(xlUp).Row
    varTabTmp = Worksheets(2).Range("C2:C" & i).Value
    Set dict1 = CreateObject("Scripting.Dictionary")
    'Identifie les doublons dans Tab desti
    For i = LBound(varTabTmp) To UBound(varTabTmp)
        If Not dict1.Exists(varTabTmp(i, 1)) Then dict1.Add varTabTmp(i, 1), i
    Next i
    ' Identifie la derniere ligne source
    i = Worksheets(1).Cells(Worksheets(1).Rows.Count, "B").End(xlUp).Row
    varTabTmp = Worksheets(1).Range("B2:B" & i).Value
    Set dict2 = CreateObject("Scripting.Dictionary")
    'Identifie les valeurs non presente dans le dico de doublons du tab Desti
    For i = LBound(varTabTmp) To UBound(varTabTmp)
        If Not dict1.Exists(varTabTmp(i, 1)) And Not dict2.Exists(varTabTmp(i, 1)) Then dict2.Add varTabTmp(i, 1), i
    Next i
    'Filtre la source 
     i = Worksheets(1).Cells(Worksheets(1).Rows.Count, "B").End(xlUp).Row
    Worksheets(1).Range("A1:d" & i).AutoFilter Field:=2, Criteria1:=dict2.keys, Operator:=xlFilterValues
    'Importe la source filtrée dans la desti
    Set rngTmp = Worksheets(1).Range("A2:d" & i).SpecialCells(xlCellTypeVisible)
     i = Worksheets(2).Cells(Worksheets(2).Rows.Count, "C").End(xlUp).Row
    Worksheets(2).Range("A" & i + 1).Resize(rngTmp.Rows.Count, rngTmp.Columns.Count).Value = rngTmp.Value

End Sub

M. Le prince des sayajin Je regarde ça entre 13 et 14H et je te fais un retour d'ici ce soir.
Merci de d'être intéressé au problème en tous cas !

Bien après quelques essais il semble que j'en sois encore au stade Yamcha ...

J'ai essayé d'inclure l'import de mes feuilles sans succès. J'ai bien évidemment réussi en important depuis une feuille déjà présente dans mon classeur de destination, en revanche ça ne vérifiait pas mes doublons puisque je pouvais copier en boucle les mêmes données sans qu'il les écrase (ou ne les colle pas du moins).

J'ai donc essayé de partir d'un fichier tout basique avec ton code mais j'ai un message d'erreur "incompatibilité de type". Il parle de mon incompatibilité à VBA ?

Plus sérieusement j'ai dû louper une étape en sachant que ton code m'est à peu près compréhensible, disons à 40% !

Hello Chaos !!!

As-tu un fichier avec tes 2 tableaux ?

10yamcha.xlsm (97.13 Ko)
10chaozu.xlsx (10.26 Ko)

J'aurais dû commencer par là peut-être en effet.

Yamcha est le fichier destination, Chaozu est le fichier source.

Ok,

C'est colonne B de Chaozu et C de quelle feuille de Yamcha ?

Tout à fait. La colonne B de Chaozu est celle sur laquelle je dois vérifier mes doublons pour ne pas qu'ils apparaissent dans le C de Yamcha.

Oui mais quelle feuille de Yamcha ? tu en as 3

Ah pardon, la F1.
F2 et F3 ne me servent que pour des indicateurs sans importance pour le moment.

Comme ceci :

Sub CopyRng()
    Dim dict1 As Object, dict2 As Object
    Dim i&
    Dim rngTmp As Range
    Dim varTabTmp As Variant
    Dim strSource$

    ' Ajoute une feuille temporaire au classeur desti
    Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "WksTmpSource"
    'Ouvre la source
    Workbooks.Open "C:\Users\...\chaozu.xlsx", False, True
    'Copie la source dans la feuille temporaire
    ActiveWorkbook.Worksheets("Extraction").UsedRange.Copy ThisWorkbook.Worksheets("WksTmpSource").[A1]
    ActiveWorkbook.Close False

    ' Identifie la derniere ligne destination
    i = Worksheets("F1").Cells(Worksheets("F1").Rows.Count, "C").End(xlUp).Row
    varTabTmp = Worksheets("F1").Range("C8:C" & i).Value
    Set dict1 = CreateObject("Scripting.Dictionary")
    'Identifie les doublons dans Tab desti
    For i = LBound(varTabTmp) To UBound(varTabTmp)
        If Not dict1.Exists(varTabTmp(i, 1)) Then dict1.Add varTabTmp(i, 1), i
    Next i
    ' Identifie la derniere ligne source
    i = Worksheets("WksTmpSource").Cells(Worksheets("WksTmpSource").Rows.Count, "B").End(xlUp).Row
    varTabTmp = Worksheets("WksTmpSource").Range("B2:B" & i).Value
    Set dict2 = CreateObject("Scripting.Dictionary")
    'Identifie les valeurs non presente dans le dico de doublons du tab Desti
    For i = LBound(varTabTmp) To UBound(varTabTmp)
        If Not dict1.Exists(varTabTmp(i, 1)) And Not dict2.Exists(varTabTmp(i, 1)) Then dict2.Add varTabTmp(i, 1), i
    Next i
    'Filtre la source
     i = Worksheets("WksTmpSource").Cells(Worksheets("WksTmpSource").Rows.Count, "B").End(xlUp).Row
    Worksheets("WksTmpSource").Range("A1:d" & i).AutoFilter Field:=2, Criteria1:=dict2.keys, Operator:=xlFilterValues
    'Importe la source filtrée dans la desti
    Worksheets("WksTmpSource").Range("A2:d" & i).SpecialCells(xlCellTypeVisible).Copy Worksheets("F1").Range("A" & Worksheets("F1").Cells(Worksheets("F1").Rows.Count, "C").End(xlUp).Row + 1)

'Supprimme la feuille temporaire
    Application.DisplayAlerts = False
    Worksheets("WksTmpSource").Delete
    Application.DisplayAlerts = True

End Sub

Bonjour !

Je regarde ça, j'essaye de comprendre, je teste et je te fais un retour dans la matinée.

Merci !

Bien, il semble qu'une ligne pose soucis :

        If Not dict1.Exists(varTabTmp(i, 1)) Then dict1.Add varTabTmp(i, 1), i

Puisque ça m'indique "incompatibilité de type".
J'ai testé ligne par ligne et c'est à celle-ci que le soucis semble se produire.

Hello,

Je n'ai pas d'erreur de mon coté.

Dans la colonne C de la feuille F1 tu as quoi comme format ?

Salut !

Écoute je me suis dit que le prince des sayajins n'avait pas pu se lourder quelque part donc je suis reparti des fichiers de base et la copie fonctionne bel et bien.
En revanche cela me copie tout de même la ligne de ma source même si elle existe déjà dans mon fichier de destination.

Je vais jeter un coup d'oeil de plus près dans la journée et je reviendrais clore le sujet si j'y arrive.

Merci pour le bel effort !

Comme promis je viens faire un retour.

J'ai réussi à me dépatouiller et à comprendre ce que tu m'avais donné. Donc je te remercie beaucoup et je recommande ton aide en cas de pépin, c'est très efficace.
Encore bravo et merci !

Rechercher des sujets similaires à "importer plage donnee feuille classeur"