XL 2016 Importer des données (+ concaténer) d'un fichier Excel vers un autre

Kurtz

XLDnaute Nouveau
Bonjour à tous,

Je me permets de solliciter votre aide car j'ai une difficulté à laquelle je n'arrive pas à remédier seul.

Me m'explique :
J'ai un fichier "A" (qui m'est fourni, je n'y fais pas de modifications) présentant n onglets et dans chacun de ces onglets se trouvent des tableaux dont j'ai besoin pour procéder à plusieurs opération dans un fichier "B".
Ayant marre de copier/coller tous les onglets du fichier A à chaque fois (environ 45 onglets. :) ), j'aimerais mettre en place une opération permettant d'importer dans mon fichier B, les données se trouvant dans le fichier A.
La problématique complémentaire est que j'ai besoin que tous onglets arrivent dans un seul et même onglet (infos de chaque onglet les unes sous les autres dans le fichier B)

Pour info, les matrices sont de largeur constante, cependant la hauteur est variable.

Merci par avance. Bien cordialement,

Kurtz
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour Kurtz (bienvenue sur XLD :), fanfan38;),

Dans module1, un code un peu générique qui permet l'importation de tableaux à structure identique à partir de plusieurs onglet d'un classeur source vers une feuille d'un autre classeur.

Ce code doit être copié dans un module de votre propre fichier cible:
  • au début de code, il y a 6 constantes à modifier en fonction de votre propre cas
  • les fichiers source et cible doivent être ouverts
Pour lancer la macro, se placer sur la feuille "MaCible" et cliquer sur le bouton "importer".

Rem: pour importer dans le même classeur que le fichier source, il suffit de compléter la constante OngletsSansImport en y incluant le nom de l'onglet cible (voir fichier "Fichier Source et Cible")

NB: on a considéré que les données sources débutaient toujours en ligne 1 (par les en-têtes s'il y en a, par les données à copier s'il n'y a pas d'en-tête - voir la constante avecEntete dans le code).
De même, la concaténation débute toujours à la ligne 1 (soit avec les en-têtes, soit avec la première ligne de données). On peut néanmoins pour la cible choisir la colonne de début pour la copie.

Attention: si vous télécharger plusieurs fois les fichiers depuis XLD, Excel risque de les indexer automatiquement. Dans ce cas, il faut modifier la constante ClasseurSource avec le nom indexé du fichier.
 

Pièces jointes

  • FichierSource.xlsx
    12.8 KB · Affichages: 53
  • FichierCible.xlsm
    20.4 KB · Affichages: 50
  • Fichier Source et Cible.xlsm
    28.8 KB · Affichages: 51
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir Kurtz, fanfan38, mapomme,

Avec des tableaux normalement constitués l'affaire est bien simple :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address <> "$A$1" Then Exit Sub
Dim lig&, w As Worksheet
Cancel = True
lig = 2
Application.ScreenUpdating = False
Rows("2:" & Rows.Count).Delete 'RAZ
With Workbooks("FichierSource.xlsx") 'nom du fichier à adapter
  For Each w In .Worksheets
    With w.[A1].CurrentRegion 'cellule à adapter
      .Offset(1).Copy Cells(lig, 1)
      lig = lig + .Rows.Count - 1
    End With
  Next
End With
End Sub
Fichiers joints - merci mapomme :)

A+
 

Pièces jointes

  • FichierCibleSimple(1).xlsm
    23 KB · Affichages: 48
  • FichierSource.xlsx
    18.6 KB · Affichages: 65

job75

XLDnaute Barbatruc
Re,

A partir d'Excel 2007, si l'on est un peu dans le coup, on organise les tableaux en tableaux Excel.

Alors cette macro ne copie que les valeurs des tableaux :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address <> "$A$1" Then Exit Sub
Dim lig&, w As Worksheet
Cancel = True
lig = 2
Application.ScreenUpdating = False
Rows(2) = "": Rows("3:" & Rows.Count).Delete 'RAZ
With Workbooks("FichierSource.xlsx") 'nom du fichier à adapter
  For Each w In .Worksheets
    With w.[A1].CurrentRegion 'cellule à adapter
      If .Rows.Count > 1 Then
        Cells(lig, 1).Resize(.Rows.Count - 1, .Columns.Count) = .Offset(1).Value 'copie les valeurs
        lig = lig + .Rows.Count - 1
      End If
    End With
  Next
End With
End Sub
Fichiers (2).

Edit : mots clés pour retrouver facilement ce fil : synthèse, consolider, consolidation.

A+
 

Pièces jointes

  • FichierCibleSimple(2).xlsm
    24.4 KB · Affichages: 33
  • FichierSource.xlsx
    26.2 KB · Affichages: 32
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Kurtz, fanfan38, mapomme, le forum,

Les tableaux Excel du fichier source peuvent être n'importe où et comporter des lignes vides excédentaires :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address <> "$A$1" Then Exit Sub
Dim lig&, w As Worksheet
Cancel = True
lig = 2
Application.ScreenUpdating = False
If Me.FilterMode Then Me.ShowAllData 'si la feuille est filtrée
Rows(2) = "": Rows("3:" & Rows.Count).Delete 'RAZ
With Workbooks("FichierSource.xlsx") 'nom du fichier à adapter
  For Each w In .Worksheets
    If w.ListObjects.Count Then
      With w.ListObjects(1).Range.CurrentRegion
        If .Rows.Count > 1 Then
          Cells(lig, 1).Resize(.Rows.Count - 1, .Columns.Count) = .Offset(1).Value 'copie les valeurs
          lig = lig + .Rows.Count - 1
        End If
      End With
    End If
  Next
End With
End Sub
Fichiers (3).

Edit 1 : dans le fichier (3 bis) une colonne supplémentaire récupère le nom de chaque feuille.

Edit 2 : ajouté If Me.FilterMode Then Me.ShowAllData 'si la feuille est filtrée

Bonne journée.
 

Pièces jointes

  • FichierCibleSimple(3).xlsm
    25 KB · Affichages: 34
  • FichierCibleSimple(3 bis).xlsm
    25.1 KB · Affichages: 41
  • FichierSource.xlsx
    27.1 KB · Affichages: 31
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Si l'on veut compliquer les choses on utilisera ces fichiers (4) ou (4 bis).

Voyez les codes dans la feuille "Synthèse", ThisWorkbook et Module1.

Il n'est pas nécessaire que le fichier source soit ouvert.

A+
 

Pièces jointes

  • FichierCibleSimple(4).xlsm
    27.7 KB · Affichages: 63
  • FichierCibleSimple(4 bis).xlsm
    27.4 KB · Affichages: 41
  • FichierSource.xlsx
    27.1 KB · Affichages: 38

Discussions similaires

Statistiques des forums

Discussions
312 843
Messages
2 092 748
Membres
105 519
dernier inscrit
faivre-roussel.ivan@orang