Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Importer plusieurs tableaux

Calvus

XLDnaute Barbatruc
Bonjour le Forum,

Je voulais tenter de me débrouiller pour trouver la solution à mon problème, mais comme d'habitude, les solutions entrevues emmènent vers d'autres questions...
Cf ce sujet.

Mon souhait est le suivant :

J'ai une feuille Origine sur laquelle je veux importer des données d'autres feuilles. Je sais le faire pour un onglet.

Ce que je ne parviens pas à faire, c'est d'importer la 1ère feuille, puis la seconde à la suite, puis une 3ème, etc..

La feuille de destination est Origine.
La copie doit se faire dans les cellules C20:C53, puis C183:C116, etc...
Les cellules concernées sont colorées en bleu dans mon exemple.
Est concernée la colonne G pour les mêmes lignes.

L'onglet à importer se trouve en O40 (liste déroulante).

Les cellules à copier sont dans les feuilles Feuil2, Feuil3, Feuil4
La structure est la même, les cellules à copier sont donc les mêmes. C20:C53, puis C183:C116, etc...

Mais, on ne doit copier que les lignes non vides, et remplir les vides de la feuille Origine, à la suite, et en respectant la structure de la feuille, à savoir qu'il faut omettre les lignes 54 à 82, 117 à 145, etc..

La macro en feuille Origine fonctionne, mais pour un seul onglet.

J'ai inscrit manuellement le résultat souhaité dans la feuille Exemple Voulu.

Dernière chose, j'imagine que l'importation doit se faire en plusieurs étapes, car en réalité mon fichier ouvre d'autres classeurs pour l'importation des données.

Merci de votre aide.
 

Pièces jointes

  • Import plusieurs tableaux.xlsm
    86.1 KB · Affichages: 68

thebenoit59

XLDnaute Accro
Re : Importer plusieurs tableaux

Bonjour Calvus.

Tu m'as posé une colle sur ce coup ...
J'espère que la modification du code, comme ci-dessous, correspondra à tes attentes.

Code:
Sub Extraction()
Dim f1 As Worksheet, f2 As Worksheet
Dim t, t1, t2, t3, t4

'On définit l'onglet à importer
Set f1 = Sheets("Origine")
Set f2 = Sheets(f1.Range("o40").Value)

'Tableau existant
With f1
    t1 = .[C20:G53].Value
    t2 = .[C83:G116].Value
    t3 = .[C146:G179].Value
    t4 = .[C209:G242].Value
    t5 = .[C272:G305].Value
    t6 = .[C335:G368].Value
    'Fusion des tableaux
    temp = MergeArray2DVert(t1, t2)
    temp = MergeArray2DVert(temp, t3)
    temp = MergeArray2DVert(temp, t4)
    temp = MergeArray2DVert(temp, t5)
    temp = MergeArray2DVert(temp, t6)
    temp = Application.Index(temp, Evaluate("Row(" & 1 & ":" & UBound(temp) & ")"), Array(1, 5))
End With
    
'Tableau à importer
'On enregistre les champs dans un tableau
With f2
    t1 = MergeArray2DVert(.[C20:E53].Value, .[C83:E116].Value)
    t1 = Application.Index(t1, Evaluate("Row(" & 1 & ":" & UBound(t1) & ")"), Array(1, 3))
End With

'On fusionne le tableau originel et le tableau à importer
    temp = MergeArray2DVert(temp, t1)
    temp = FiltreArraySupLignes(temp, 1, "")
    temp = Application.Index(temp, Evaluate("Row(" & 1 & ":" & UBound(temp) & ")"), Array(1, 2))
'End If

'On remplit la feuille origine
With f1
    j = 1
    k = 33
    l = 0
    If IsError(temp(2, 1)) Then
    .Cells(20, "C").Value = temp(1, 1)
    .Cells(20, "G").Value = temp(1, 2)
    Exit Sub
    End If
    For i = 20 To 335 Step 63
        If UBound(temp) - l < k Then k = UBound(temp) - l - 1
        If UBound(temp) = l Then Exit For
        .Cells(i, "C").Resize(k + 1).Value = Application.Index(temp, Evaluate("Row(" & j & ":" & j + k & ")"), 1)
        .Cells(i, "G").Resize(k + 1).Value = Application.Index(temp, Evaluate("Row(" & j & ":" & j + k & ")"), 2)
    j = j + k + 1
    l = j - 1
    Next i
End With
End Sub
 

Calvus

XLDnaute Barbatruc
Re : Importer plusieurs tableaux

Bonjour Thebenoit, le forum,

Merci, ça a l'air d'aller correctement.
Je te dirai s'il y a autre chose. Et surtout quelques explications, car même si j'en comprends le principe, je n'arrive pas à voir exactement le fonctionnement du code.

Merci et bonne journée.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…