Importation données avec condition

Résolu/Fermé
DankCanada Messages postés 2 Date d'inscription jeudi 28 décembre 2017 Statut Membre Dernière intervention 2 janvier 2018 - 28 déc. 2017 à 11:21
DankCanada Messages postés 2 Date d'inscription jeudi 28 décembre 2017 Statut Membre Dernière intervention 2 janvier 2018 - 2 janv. 2018 à 14:53
Bonjour,
Je travail sur un projet VBA et je ne suis pas très doué...
J'utilise une macro pour importé mes fichiers excel dans un fichier synthèse créer via la macro. Cependant je souhaiterais maintenant réécrire cette macro pour qu'elle importe les nouveaux fichier dans ce fichier au lieu de m'en créer un à chaque exécution de la macro. Je souhaiterais également que la macro colle les données à la suite et non pas par dessus . De plus il faudrait intégrer un IF qui comparerais les données de la colonne A et si pour une ligne la donnée du classeur de destination est égal à la donné de la source elle efface la ligne et la remplace par la donné de la source .
Voici le code de ma macro initial :

Sub ImportationForecast()
Dim SummarySheet As Worksheet
Dim FolderPath As String
Dim SelectedFiles() As Variant
Dim NRow As Long
Dim FileName As String
Dim NFile As Long
Dim WorkBk As Workbook
Dim SourceRange As Range
Dim DestRange As Range

' Create a new workbook and set a variable to the first sheet.
Set SummarySheet = Workbooks.Add(xlWBATWorksheet).Worksheets(1)

' Modify this folder path to point to the files you want to use.
FolderPath = "C:\Users\JRZD9616\Desktop"

' Set the current directory to the the folder path.
ChDrive FolderPath
ChDir FolderPath

' Open the file dialog box and filter on Excel files, allowing multiple files
' to be selected.
SelectedFiles = Application.GetOpenFilename( _
filefilter:="Microsoft Excel Worksheet(*.xlsm*), *.xlsm*", MultiSelect:=True)

' NRow keeps track of where to insert new rows in the destination workbook.
NRow = 1

' Loop through the list of returned file names
For NFile = LBound(SelectedFiles) To UBound(SelectedFiles)
' Set FileName to be the current workbook file name to open.
FileName = SelectedFiles(NFile)

' Open the current workbook.
Set WorkBk = Workbooks.Open(FileName)

' Set the source range to be C through F.
' Modify this range for your workbooks. It can span multiple rows.
Set SourceRange = WorkBk.Worksheets(3).Range("C:F")

' Set the destination range to start at column A and be the same size as the source range.
Set DestRange = SummarySheet.Range("A" & NRow)
Set DestRange = DestRange.Resize(SourceRange.Rows.Count, _
SourceRange.Columns.Count)

' Copy over the values from the source to the destination.
DestRange.Value = SourceRange.Value

' Increase NRow so that we know where to copy data next.
NRow = NRow + DestRange.Rows.Count

' Close the source workbook without saving changes.
WorkBk.Close savechanges:=False
Next NFile

' Call AutoFit on the destination sheet so that all data is readable.
SummarySheet.Columns.AutoFit
End Sub


Pour la premiere partie de ma question je pense que c'est cette ligne qu'il faut changer:
Set SummarySheet = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
Mais je ne connais pas la syntaxe à utilisé pour indiquer que je veux que summarysheet soit la feuille de mon classeur où j'écris la macro.
Ensuite pour que la macro colle les fichier a la suite je pense que c'est au niveau du NRow qu'il faut changer quelque chose mais encore une fois je ne sais pas quoi ...
Et pour le If je pensais à un truc du genre
If "valeur colonne A destination= valeur colonne A source" Then "supprime la ligne et colle la ligne du fichier source par dessus"
Else '' colle a les données de la source a la suite dans le fichier destination".

Merci de votre attention , tout aide même infime et la bienvenue.

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 2 janv. 2018 à 11:08
Bonjour,

' NRow keeps track of where to insert new rows in the destination workbook.
NRow = 1

à remplacer en adaptant cet exemple (on suppose que la ligne 1 comporte des ent^tes de colonne)

Option Explicit
Dim nrow As Integer

Sub cc()
With ThisWorkbook.ActiveSheet
'1° ligne vide
nrow = .Columns("A").Find(what:="", after:=.Range("A1")).Row
'.......... suite du code
End With
End Sub


Pour le If il manque beaucoup de renseignements pour pouvoir essayer de t'aider

On compare uniquement les égalités de valeurs de la colonne "A" ou de toutes les données entre toutes les colonnes transférées, c.a.d entre quelles colonnes ( A à E, A à Z) ???
Les valeurs de la colonne A sont elles bien uniques style identifiant ?

autres choses + globales

Combien de nouveaux fichiers sont à transférer à chaque appel ?
le dossier "source" ne comporte t il que les nouveaux fichiers ?
Combien de lignes à transférer par fichier ?








 Michel
0
DankCanada Messages postés 2 Date d'inscription jeudi 28 décembre 2017 Statut Membre Dernière intervention 2 janvier 2018
2 janv. 2018 à 14:53
Bonjour,
Merci de ta réponse mais mon problème a été résolu sur un autre forum.
Pour ceux que ça intéresse :
https://forum.excel-pratique.com/excel/macro-excel-importation-plusieurs-fichiers-102456#p606934#p606934

Voila je passe le sujet en résolu.
0