Macro import de donnée - classeur fermé

Elodie195

XLDnaute Occasionnel
Bonjour,

Je sollicite votre aide concernant une macro Excel.

J'ai 3 fichiers :

un fichier qui va servir à l'import par le biais d'une macro : import-test.xlsm
et deux autres avec des données (à importer dans le fichier 1)

Dans le fichier 1 j'ai un tableau fixe : les colonnes qui nous intéresse sont les colonnes C (numéro dossier), et les colonnes à partir de H jusqu'à N.
Nous avons les intitulés de colonne en première ligne.

Dans les 2 fichiers à importer, les données qui nous intéresse sont la cellule B23 de l'onglet 1 et les colonnes M et N de l'onglet 2.

Le but de la macro serait de
- écrire le nom du dossier en C3 (qui se trouve en B23 de l'onglet 1 du fichier à importer)
- faire une correspondance entre les en-têtes du fichier import test et ceux de la colonne M de l'onglet 2 du fichier à importer pour importer la valeur numérique qui se trouve en colonne N.
- récupérer ces valeurs sur le fichier import test (sans ouvrir le fichier à importer).

et de même pour le fichier à importer 2.
- écrire le nom du dossier en C4 (qui se trouve en B23 de l'onglet 1 du fichier à importer)
- récupérer les valeurs.

et ainsi de suite.

Au lancement de la macro, l'import doit intégrer l'ensemble des fichiers se trouvant dans le même dossier ou sous dossier que le fichier import-test

Merci d'avance de votre aide.

Bonne journée.
 

Pièces jointes

  • A importer1.xls
    29 KB · Affichages: 41
  • A importer2.xls
    30 KB · Affichages: 49
  • Import-test.xlsm
    9.4 KB · Affichages: 44

don_pets

XLDnaute Occasionnel
Re : Macro import de donnée - classeur fermé

'llo,

Alors pour la première partie de ta demande, je suggère :

Code:
'Import
Dim nom$, WBKSource As Workbook
With Application.FileDialog(msoFileDialogOpen)
   .Title = "Suzanne ouvre toi"
    .Filters.Clear
    .Filters.Add "SuperTableur", "*.xlsX,*.xlsm, *.xls"
    .AllowMultiSelect = False
        If .Show <> 0 Then
        nom = .SelectedItems(1)
            Set WBKSource = Workbooks.Open(nom)
           With WBKSource
                .Worksheets.Copy Before:=ThisWorkbook.Sheets(1)
                .Close False
            End With
        Else
        MsgBox "Heeeey t'as oublié chosequelle ! Qiuiche ", , "dô_Ôb": Exit Sub
        End If
End With

'Copier Coller
Sheets("Sheet1 (2)").Select
Sheets("Sheet1 (2)").Range("b23").Select
Selection.Copy
Sheets("Sheet1").Activate
Sheets("Sheet1").Range("C65536").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

L'idée c'est que :
- 1) Tu sélectionnes le fichier à importer
- 2) l'ensemble des feuilles sont collées dans ton fichier en cours
- 3) tu récupères ta cellule en b23 et tu la colles à la première cellule non rempli de la colonne C

Déja est-ce qu'un truc comme ça, te va ?
Sinon si tu connais les chemins, et les noms de te fes fichiers à importer et qu'il ne bouge pas, il est envisageable de procéder autrement.

Et pour la suite, j'ai besoin d'éclaircissement, nous en reparlerons après, déja ton feed back sur cette première étape

pets
 

Elodie195

XLDnaute Occasionnel
Re : Macro import de donnée - classeur fermé

Bonjour pets,

Merci pour ton aide.
J'aurais aimer supprimer l'action de sélectionner les feuilles à importer.
Par exemple, on a test-import.xlsm dans un dossier et l'ensemble des fichiers à importer dans un dossier "SOURCES" par exemple.

Le chemin du fichier import-test est fixe et les noms des fichiers à importer sont variables.

Bonne journée.
 

don_pets

XLDnaute Occasionnel
Re : Macro import de donnée - classeur fermé

oki,

Alors pour la première partie, je ferais plutôt ceci :

Code:
Dim WbDest As Workbook, WbSource As Workbook
Dim WksNewSheet As Worksheet
Dim NomFichier As String, Chemin As String
Dim I As Long

  Set WbDest = ActiveWorkbook

  Chemin = "Ici ton chemin avec un \ à la fin"
  NomFichier = Dir(Chemin & "*.xls")
 
  Do While NomFichier <> ""
Set WbSource = Workbooks.Open(Chemin & NomFichier)
Set WksNewSheet = WbSource.Sheets(1)
    WksNewSheet.Activate
    WksNewSheet.Select
    WksNewSheet.Range("b23").Select
   Selection.Copy
   WbDest.Activate
Sheets("Sheet1").Activate
Sheets("Sheet1").Range("C65536").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
   Application.CutCopyMode = False
   WbSource.Close
   NomFichier = Dir
 Loop
 WbDest.Activate

Comme ça, pas besoin de sélectionner tes fichiers et peut importe le nom.

Mieux ?

don
 

Elodie195

XLDnaute Occasionnel
Re : Macro import de donnée - classeur fermé

Merci.
Pour la première partie c'est parfait ! :)
J'ai ajusté le chemin comme vous m'avez spécifier.

Pour la seconde partie, le fait de rechercher les intitulés dans les fichiers pour écrire les valeurs correspondantes dans le fichier import, est-ce compliqué ?
 

don_pets

XLDnaute Occasionnel
Re : Macro import de donnée - classeur fermé

Bon donc première étape ok,

Now the second, nan pas compliqué mais en fait je n'ai saisi ce que tu voulais, tu auras toujours les termes de citron, orange, fraise tout ça tout ça, et tu veux juste la correspondance en colonne N, c'est ça ?
 

don_pets

XLDnaute Occasionnel
Re : Macro import de donnée - classeur fermé

Alors voici comment ouame je ferais,

Première étape:
Code:
Private Sub CommandButton2_Click()
Dim WbDest As Workbook, WbSource As Workbook
Dim WksNewSheet As Worksheet
Dim NomFichier As String, Chemin As String
Dim I As Long

  Set WbDest = ActiveWorkbook

  Chemin = "D:\Users\marcel\Documents\Programmation\VB\VBA\Rez_Excel\Import\Source\"
  NomFichier = Dir(Chemin & "*.xls")
 
  Do While NomFichier <> ""
Set WbSource = Workbooks.Open(Chemin & NomFichier)
Set WksNewSheet = WbSource.Sheets(1)
    WksNewSheet.Activate
    WksNewSheet.Select
    WksNewSheet.Range("b23").Select
   Selection.Copy
   WbDest.Activate
Sheets("Sheet1").Activate
Sheets("Sheet1").Range("C65536").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
   Application.CutCopyMode = False
   WbSource.Close
   NomFichier = Dir
 Loop
 WbDest.Activate

 Call la_suite

Ensuite :

Code:
Private Sub la_suite()
Dim WbDest As Workbook, WbSource As Workbook
Dim WksNewSheet As Worksheet
Dim NomFichier As String, Chemin As String
Dim I As Long

  Set WbDest = ActiveWorkbook

  Chemin = "D:\Users\marcel\Documents\Programmation\VB\VBA\Rez_Excel\Import\Source\"
  NomFichier = Dir(Chemin & "*.xls")
 
  Do While NomFichier <> ""
Set WbSource = Workbooks.Open(Chemin & NomFichier)
Set WksNewSheet = WbSource.Sheets(2)
    WksNewSheet.Activate
    WksNewSheet.Select
 With Sheets(2)
    For I = 2 To .Range("K36000").End(xlUp).Row
        If .Cells(I, 13).Value = "Citron" Then
        .Cells(I, 14).Select
        Selection.Copy
         WbDest.Activate
Sheets("Sheet1").Activate
Sheets("Sheet1").Range("H65536").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
   Application.CutCopyMode = False
        End If
    Next I
End With
   Application.CutCopyMode = False
   WbSource.Close
   NomFichier = Dir
 Loop
 WbDest.Activate
 
End Sub

what do you think about it ?
 

Elodie195

XLDnaute Occasionnel
Re : Macro import de donnée - classeur fermé

Merci c'est top !

J'ai pu adapter la macro pour qu'elles prennent l'ensemble des intitulés en modifiant la variable I par une autre lettre et en changeant Range("H65536") par la colonne qui correspondait + bien sur la saisie de l'intitulé de colonne par exemple
If .Cells(I, 13).Value = "Orange" Then

Merci encore de votre aide :)

Bonne soirée.
 

riccardovegas

XLDnaute Junior
Re : Macro import de donnée - classeur fermé

Bonjour Don,
je suis un peu dans le même cas que Elodie, j'ai deux fichiers :
fichier A: F_Import complet.xlsx (qui peut changer de nom) qui se trouvera dans un repertoire par exemple GESTION_LOGISTICS
fichier B: MATRICE IMPORT LOGISTIC.XLSX qui sera mon fichier qui devra recevoir les données qui se trouvera dans un repertoire par exemple GESTION_LOGISTICS

1- mon idée est avant tout de faire un nettoyage de la cellule A1:M1048576 pour m'assurer de nettoyer le fichier de toutes informations précedente.
2-copier sans ouvrir le fichier A /onglet "plan de charge" colonne A1:M1048576
3-coller vers le fichier B / onglet Plan de charge import
 

Pièces jointes

  • F IMPORT COMPLET.xlsx
    19.7 KB · Affichages: 39
  • F IMPORT COMPLET.xlsx
    19.7 KB · Affichages: 46
  • MATRICE IMPORT LOGISTIC.xlsx
    29.6 KB · Affichages: 35

don_pets

XLDnaute Occasionnel
Re : Macro import de donnée - classeur fermé

Éclaire moi un peu sur :

- j'importe tout l'onglet Plan de charge du fichier A
- Je colle ça ou dans le fichier B, onglet feuil11? Plan de charge ?
Je pense évidemment que c'est le deuxième, mais confirme le moi, et par ailleurs je colle à partir de quelle cellule ?

Bref éclaire moi un peu sur qu'est-ce que je prends pour mettre ou

don
 

riccardovegas

XLDnaute Junior
Re : Macro import de donnée - classeur fermé

e suis un peu dans le même cas que Elodie, j'ai deux fichiers :
fichier A: F_Import complet.xlsx (qui peut changer de nom) qui se trouvera dans un repertoire par exemple GESTION_LOGISTICS
fichier B: MATRICE IMPORT LOGISTIC.XLSX qui sera mon fichier qui devra recevoir les données qui se trouvera dans un repertoire par exemple GESTION_LOGISTICS

1- mon idée est avant tout de faire un nettoyage de la cellule A1:M1048576 pour m'assurer de nettoyer le fichier de toutes informations précédente.
2-copier sans ouvrir le fichier A IMPORT COMPLET .... /onglet "plan de charge" colonne A1:M1048576 ET JE COLLE LE TOUT VERS LE FICHIER B-MATRICE IMPORT LOGISTIC' à l'onglet 'plan de charge'


de même je dois recupérer les info de l'onglet wagon du fichier A vers fichier B

jai modifié le fichier B ...
 

Pièces jointes

  • F IMPORT COMPLET.xlsx
    19.7 KB · Affichages: 37
  • MATRICE IMPORT LOGISTIC.xlsm
    51.2 KB · Affichages: 41
  • F IMPORT COMPLET.xlsx
    19.7 KB · Affichages: 43
  • MATRICE IMPORT LOGISTIC.xlsm
    51.2 KB · Affichages: 41

don_pets

XLDnaute Occasionnel
Re : Macro import de donnée - classeur fermé

Pas eu le temps de trop regarder, mais vite fait je te dirais bien ça :
Code:
Dim WbDest As Workbook, WbSource As Workbook
Dim WksNewSheet As Worksheet
Dim NomFichier As String, Chemin As String
Dim I As Long

Range("A2:M" & [M65536].End(xlUp).Row).Select
Selection.ClearContents

  Set WbDest = ActiveWorkbook
 

  Chemin = "D:\Users\marcel\Documents\Programmation\VB\VBA\Rez_Excel\Import3\import\"
  NomFichier = Dir(Chemin & "*.xlsx")
 
  Do While NomFichier <> ""
Set WbSource = Workbooks.Open(Chemin & NomFichier)
Set WksNewSheet = WbSource.Sheets(1)
    WksNewSheet.Activate
    WksNewSheet.Select
    WksNewSheet.Range("b23").Select
   Selection.Copy
   WbDest.Activate
   
Sheets("Plan de charge").Activate
Sheets("Plan de charge").Range("A65536").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
   Application.CutCopyMode = False
   WbSource.Close
   NomFichier = Dir
 Loop
 WbDest.Activate

non ?

don
 

don_pets

XLDnaute Occasionnel
Re : Macro import de donnée - classeur fermé

aaarf attend coquilleessaie ça c'est mieux :

Code:
Dim WbDest As Workbook, WbSource As Workbook
Dim WksNewSheet As Worksheet
Dim NomFichier As String, Chemin As String
Dim I As Long

Range("A2:M" & [M65536].End(xlUp).Row).Select
Selection.ClearContents

  Set WbDest = ActiveWorkbook
 

  Chemin = "D:\Users\marcel\Documents\Programmation\VB\VBA\Rez_Excel\Import3\import\"
  NomFichier = Dir(Chemin & "*.xlsx")
 
  Do While NomFichier <> ""
Set WbSource = Workbooks.Open(Chemin & NomFichier)
Set WksNewSheet = WbSource.Sheets(1)
    WksNewSheet.Activate
    WksNewSheet.Select
    WksNewSheet.Range("A2:M" & [M65536].End(xlUp).Row).Select
   Selection.Copy
   WbDest.Activate
   
Sheets("Plan de charge").Activate
Sheets("Plan de charge").Range("A65536").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
   Application.CutCopyMode = False
   WbSource.Close
   NomFichier = Dir
 Loop
 WbDest.Activate
 

Discussions similaires

Réponses
13
Affichages
262