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

Résolu/Fermé
Lalou83 Messages postés 3 Date d'inscription mardi 9 septembre 2014 Statut Membre Dernière intervention 9 septembre 2014 - Modifié par Lalou83 le 9/09/2014 à 15:17
 Lalou83 - 18 sept. 2014 à 14:58
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 mardi 9 septembre 2014 Statut Membre Dernière intervention 9 septembre 2014
9 sept. 2014 à 15:29
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 mardi 9 septembre 2014 Statut Membre Dernière intervention 9 septembre 2014
Modifié par Lalou83 le 9/09/2014 à 15:33
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 1874 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 1 octobre 2024 688
10 sept. 2014 à 23:04
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
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
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 1874 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 1 octobre 2024 688
15 sept. 2014 à 10:32
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
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
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 1874 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 1 octobre 2024 688
16 sept. 2014 à 11:54
ci-joint fichier rectifié

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

--
0
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 1874 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 1 octobre 2024 688
16 sept. 2014 à 18:50
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
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 1874 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 1 octobre 2024 688
17 sept. 2014 à 16:31
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
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 1874 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 1 octobre 2024 688
18 sept. 2014 à 08:56
Le format des 3 fichiers est-il bien identique ? joins-moi les 3 fichiers times sheet

--
0
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 1874 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 1 octobre 2024 688
18 sept. 2014 à 10:20
ci-joint version rectifiée
https://www.cjoint.com/?3IskwUdvVPR

--
0
c'est parfait

merci beaucoup pour ton aide, c'est vraiment sympa

bne continaution
0