Importer des données de plusieurs fichiers dans un seul

Sandrine123

XLDnaute Nouveau
Bonjour,

Je sollicite votre aide pour une macro Excel.

J'ai 2 fichiers de données : Données1.xls et Données2.xls
Les informations importantes dans ces fichiers sont les numéros de dossier en B5, le produit en colonne B (variable) et sa valeur colonne G (variable).

J'ai également un fichier Classeur1.xlsm. Dans ce fichier je souhaiterais importer par le biais d'une macro les données présentes dans les fichiers "Données".

La subtilité est que la présence des produits est variable.
En effet, j'ai au maximum 3 produits. (c'est toujours Tomate, Salade ou Pomme.)
Mais parfois j'en ai qu'un.

Je souhaiterais que, lorsque le produit est absent du fichier données, cela affecte la valeur 0 à ce produit dans le fichier Classeur1.xlsm.

Dans le fichier Classeur1.xlsm, j'ai mis un onglet avec le résultat à obtenir c'est plus parlant.

Merci d'avance de votre aide.

Bonne fin de journée.
 

Pièces jointes

  • Classeur1.xlsm
    8.8 KB · Affichages: 50
  • données1.xls
    24 KB · Affichages: 36
  • données2.xls
    24 KB · Affichages: 38
  • Classeur1.xlsm
    8.8 KB · Affichages: 44
  • données2.xls
    24 KB · Affichages: 32

job75

XLDnaute Barbatruc
Re : Importer des données de plusieurs fichiers dans un seul

Bonsoir Sandrine123,

Le plus simple est d'utiliser des formules de liaison.

Ouvrez tous les fichiers concernés et dans Classeur1.xlsm entrez :

- en A2 =[données1.xls]Test1!$B$4

- en D2 =SIERREUR(RECHERCHEV(D$1;[données1.xls]Test1!$B$28:$G$30;6;0);0) à tirer vers la droite.

Faites la même chose en ligne 3 en modifiant les noms du fichier et de la feuille.

Vous pouvez ensuite fermer les fichiers sources, les formules s'adapteront aux chemins.

Edit : vous ne pouvez pas utiliser INDIRECT pour tirer les formules de la ligne 2 vers le bas.

Bonne soirée.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Importer des données de plusieurs fichiers dans un seul

Re,

Si vous avez beaucoup de fichiers sources il sera fastidieux de modifier les noms du fichier et de la feuille pour chaque ligne.

Alors procédez comme suit :

- ouvrez un seul fichier source, celui portant le numéro 1

- en ligne 2 entrez les formules comme je vous l'ai dit

- fermez le fichier source

- tirez la plage A2:F2 vers le bas sur autant de lignes qu'il y a de fichiers sources (pas plus)

- créez et lancez cette macro :

Code:
Sub IncrementerFormule()
Dim fichier$, feuille$, t, ncol%, i&, j%
fichier = "données" 'en minuscules, à adapter si nécessaire
feuille = "test" 'en minuscules, à adapter si nécessaire
t = [A1].CurrentRegion.Formula
ncol = UBound(t, 2)
For i = 3 To UBound(t)
  For j = 1 To ncol
    t(i, j) = Replace(LCase(t(i, j)), fichier & 1, fichier & i - 1)
    t(i, j) = Replace(t(i, j), feuille & 1, feuille & i - 1)
Next j, i
[A1].CurrentRegion = t
End Sub
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Importer des données de plusieurs fichiers dans un seul

Bonjour sandrine123, le forum,

Plus simple, cette macro entre toutes les formules :

Code:
Sub EntrerFormules()
Dim chemin$, fichier$, feuille$, cel$, plage$, ncol%
Dim debformule$, finformule$, lig&, fich$, num&, f$
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = "données" 'à adapter
feuille = "Test" 'à adapter
cel = "$B$4" 'à adapter
plage = "$B$28:$G$30" 'à adapter
ncol = Evaluate(plage).Columns.Count
debformule = "=IFERROR(VLOOKUP(D$1,"
finformule = plage & "," & ncol & ",0),0)"
lig = 2
fich = Dir(chemin & fichier & "*.xls*") '1er fichier
While fich <> ""
  num = Val(Mid(fich, Len(fichier) + 1))
  f = "'" & chemin & "[" & fich & "]" & feuille & num & "'!"
  Cells(lig, 1) = "=" & f & cel
  Cells(lig, 4).Resize(, 3) = debformule & f & finformule
  fich = Dir 'fichier suivant
  lig = lig + 1
Wend
End Sub
Mais c'est plus difficile à comprendre :rolleyes:

Nota : chez moi (Excel 2013), quand il n'y a qu'une feuille dans les fichiers sources, les bonnes formules sont entrées même si le nom de la feuille n'est pas correct.

Bonne journée.
 

Discussions similaires

Statistiques des forums

Discussions
314 656
Messages
2 111 609
Membres
111 220
dernier inscrit
Elé0n0re