Coller dans 1 seul fichier des données issus de plusieurs fichie

Résolu
Lalou83 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
 Lalou83 -
Bonjour,


Après avoir essayé (en vain) de faire la macro, je me tourne vers vous.

Je souhaiterais mettre en place une macro qui devra sélectionner des données dans plusieurs fichiers qui auront le même format et avec un nom de fichier similaire sauf à la fin : « Time sheet_2014_xxx» pour les concaténer et les coller dans un seul fichier nommé "KPI_2014".

Les données des colonnes B jusqu'à AF dans l'onglet « TOT » des fichier time sheet devront être copiées et coller dans l'onglet « Data » du fichier « KPI_2014 » à partir de la ligne 5. Pour retrouver une même tâche dans un fichier, utiliser l'identifiant unique : CA + CO

Merci par avance pour votre aide précieuse
A voir également:

11 réponses

Lalou83 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Voici le lien pour voir le fichier "Time sheet" : https://www.cjoint.com/?0IjpCks8KQV
Voici le lien pour voir le fichier "KPI_2014 : https://www.cjoint.com/?0IjpFlT4j6u
0
Lalou83 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Il y aura donc environ une dizaine de fichier time sheet dont les données seront concaténées dans un seul fichier : KPI.

Voici la table de correspondance :
Cellules de la time sheet A coller dans le fichier «KPI _2014»
Colonne B Colonne A
Colonne C Colonne B
Colonne D Colonne C
Colonne E Colonne D
Colonne F Colonne E
Colonne G Colonne F
Colonne H Colonne G
Colonne I Colonne H
Colonne J Colonne I
Colonne K Colonne J
Colonne L Colonne K
Colonne M Colonne L
Colonne N Colonne M
Colonne O Colonne N
Colonne P Colonne O
Colonne Q Colonne P
Colonne R Colonne Q
Colonne S Colonne R
Colonne T Colonne S
Colonne U Colonne T
Colonne V Colonne U
Colonne W Colonne V
Colonne X Colonne W
Colonne Y Colonne X
Colonne Z Colonne Y
Colonne AA Colonne Z
Colonne AB Colonne AA
Colonne AC Colonne AB
Colonne AD Colonne AC
Colonne AE Colonne AD
Colonne AF Colonne AE
0
thev Messages postés 1985 Date d'inscription   Statut Membre Dernière intervention   713
 
ci-dessous macro

Sub consolidation()

'................... constantes ..........................................................
id_fichier_time_sheet = "*time_sheet_2014*"
i_time_sheet_ligne_deb = 3
i_kpi_ligne_deb = 5

'...................assignations feuille/colonnes fichier KPI et chemin .................
chemin_kpi = ActiveWorkbook.Path & "\"
Set sh_kpi = ActiveWorkbook.Sheets(1)
Set id_kpi = sh_kpi.Range("B:E")
Set récap_weeks_kpi = sh_kpi.Range("F:I")
Set weeks_kpi = sh_kpi.Range("K:AH")

'...................traitement..........................................................
nom_fichier_time_sheet = chemin_kpi & id_fichier_time_sheet
nom_fichier = chemin_kpi & Dir(chemin_kpi)
Do Until nom_fichier = chemin_kpi

If LCase(nom_fichier) Like LCase(nom_fichier_time_sheet) Then
'...... ouverture fichier time_sheet
On Error Resume Next
Application.DisplayAlerts = False
Workbooks.Open Filename:=nom_fichier
If Err.Number <> 0 Then MsgBox "erreur ouverture fichier " & nom_fichier

'...... assignation colonnes fichier time_sheet
Set id_time_sheet = Range("G:J")
Set récap_weeks_time_sheet = Range("C:F")
Set weeks_time_sheet = Range("K:AH")

'...... récupération ligne fichier time_sheet
i_time_sheet_ligne_fin = ActiveSheet.UsedRange.Rows.Count
For i_time_sheet_ligne = i_time_sheet_ligne_deb To i_time_sheet_ligne_fin
If Columns("B").Rows(i_time_sheet_ligne).Value = Empty Then Exit For

'...... recherche ligne fichier KPI correspondant à ceele du fichier time_sheet
GoSub rech_kpi_ligne

'...... copie colonnes B et G à J
sh_kpi.Columns("A").Rows(i_kpi_ligne).Value = Columns("B").Rows(i_time_sheet_ligne).Value
id_kpi.Rows(i_kpi_ligne).Value = id_time_sheet.Rows(i_time_sheet_ligne).Value

'...... cumul colonnes C à F
i = 0
For Each champ In récap_weeks_time_sheet.Rows(i_time_sheet_ligne).Columns
i = i + 1
récap_weeks_kpi.Rows(i_kpi_ligne).Columns(i) = récap_weeks_kpi.Rows(i_kpi_ligne).Columns(i) + champ.Value
Next

'...... cumul colonnes K à AH
i = 0
For Each champ In weeks_time_sheet.Rows(i_time_sheet_ligne).Columns
i = i + 1
weeks_kpi.Rows(i_kpi_ligne).Columns(i) = weeks_kpi.Rows(i_kpi_ligne).Columns(i) + champ.Value
Next

Next
ActiveWorkbook.Close
End If

nom_fichier = chemin_kpi & Dir()
Loop

'...................fin traitement ..........................................................
Exit Sub

'********************* sous-procédure ***************************************************************
rech_kpi_ligne:
i_kpi_ligne_fin = sh_kpi.UsedRange.Rows.Count
For i_kpi_ligne = i_kpi_ligne_deb To i_kpi_ligne_fin
If id_kpi.Rows(i_kpi_ligne).Columns(1) = Empty Then Exit For

If id_time_sheet.Rows(i_time_sheet_ligne).Columns(2).Value = id_kpi.Rows(i_kpi_ligne).Columns(2).Value _
And id_time_sheet.Rows(i_time_sheet_ligne).Columns(3).Value = id_kpi.Rows(i_kpi_ligne).Columns(3).Value Then
Exit For
End If
Next

Return
'***************************************************************************************************



End Sub


--
0
Lalou83
 
Salut Thev,

merci pour ta précieuse aide mais je n'ai pas réussi à le faire marcher et vu mon niveau très nul, je ne sais pas d'où vient le problème...dois-je adapter un truc dans ta macro ?

merci
0
Lalou83
 
Thev,

C'est à ce niveau là que je dois changer qqch ?
'...................traitement..........................................................
nom_fichier_time_sheet = chemin_kpi & id_fichier_time_sheet
nom_fichier = chemin_kpi & Dir(chemin_kpi)

Je dois mettre le chemin pour que la macro recupere automatiquement les différents fichiers "time-sheet" ?
0
thev Messages postés 1985 Date d'inscription   Statut Membre Dernière intervention   713
 
Si le répertoire des fichiers time_sheet n'est pas celui où se trouve le fichier KPI2014, il faut effectivement définir le chemin absolu des fichier.s Exemple :

chemin_kpi = "C:\Users\Utilisateur\Documents\" (ne pas oublier "\" à la fin)
nom_fichier_time_sheet = chemin_kpi & id_fichier_time_sheet
nom_fichier = chemin_kpi & Dir(chemin_kpi)
--
0
Lalou83
 
mecri pour ta réponse

Oui ce sera dans 2 endroits différents. J'ai changé le nom mais ça ne marche pas. Pour info, les time sheets auront toutes une partie commune "Time_sheet_2014_xxx" avec à la fin le trigramme de la personne. Il me semble que la macro ne le prend pas en compte.
0
Lalou83
 
Voici le lien où se trouve mon fichier pour que tu voyes si j'ai bien fait les choses
http://cjoint.com/?0IqjDP8bAl7

merci bcp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thev Messages postés 1985 Date d'inscription   Statut Membre Dernière intervention   713
 
ci-joint fichier rectifié

https://www.cjoint.com/?3Iql2TSvCPJ

--
0
Lalou83
 
Merci beaucoup Thev,

je viens d'essayer le fichier : j'ai ouvert le fichier rectifié, j'ai fait macro => exécuter et rien ne se passe. Comment-ca se fait ?
0
thev Messages postés 1985 Date d'inscription   Statut Membre Dernière intervention   713
 
Il doit y avoir un souci au niveau de la syntaxe du chemin où se trouvent tes fichiers time_sheet

"C:\Users\alaffont\Desktop\Macro\dossier_timesheets\"

Tu peux dérouler l'exécution de la macro pas à pas via la touche F8. Si l'instruction : Do Until nom_fichier = chemin_kpi n'est pas exécutée, cela signifie que le chemin n'existe pas ou qu'il n'y a aucun fichier dans ce chemin.

Pour vérifier si c'est bien le problème, il te suffit
1)de mettre un des fichiers time_sheet dans le même répertoire que celui de KPI_2014
2) de mettre en commentaire l'instruction :
'chemin_kpi = "C:\Users\alaffont\Desktop\Macro\dossier_timesheets\"

--
0
Lalou83
 
merci bcp

T'es trop fort, effectivement là ça marche. Par contre, j'avais bien le fichier time_sheet dans un autre dossier mais avec un trigramme différent. Par contre, la macro ne selectionne qu'un fichier time sheet alors qu'il y a n fichiers time sheets avec comme je disais en haut le même nom sauf à la fin où c'est le trigramme (xxx) de la personne concernée => Time_sheet_2014_xxx.

Pour cela je dois déclarer tous les trigrammes dans la partie constantes ?
0
thev Messages postés 1985 Date d'inscription   Statut Membre Dernière intervention   713
 
Ce n'est pas nécessaire.
id_fichier_time_sheet = "*time_sheet_2014*"
La recherche se fait avec l'instruction LIKE "*time_sheet_2014*". Les 2 astérisques indiquent n'importe quelle chaine de caractères avant ou après la chaine "time_sheet_2014"
Par ailleurs, l'emploi de la fonction Lcase qui convertit en minuscule permet une comparaison avec l'instruction LIKE sans tenir compte de la casse.
l

--
0
Lalou83
 
ah ok, merci pour ta réponse

je viens de tester. J'ai dans mon dossier le fichier KPI 2014 et 3 fichiers times sheet. Le premier fichier se copie très bien, le deuxième il n'y a que la première ligne qui se copie et le 3 ème fichier, il y a seulement la dernière ligne qui se copie. Pourtant, j'ai bien fait attention à l'identifiant unique : CA + CO
...
0
thev Messages postés 1985 Date d'inscription   Statut Membre Dernière intervention   713
 
Le format des 3 fichiers est-il bien identique ? joins-moi les 3 fichiers times sheet

--
0
Lalou83
 
oui, ils sont identiques

voici les liens
http://cjoint.com/?3IsjozX7WEA
http://cjoint.com/?3IsjpeFpPH1
http://cjoint.com/?3IsjpHEF0hG

merci
0
thev Messages postés 1985 Date d'inscription   Statut Membre Dernière intervention   713
 
ci-joint version rectifiée
https://www.cjoint.com/?3IskwUdvVPR

--
0
Lalou83
 
c'est parfait

merci beaucoup pour ton aide, c'est vraiment sympa

bne continaution
0