Fusion de données de 2 fichiers différents dans un nouveau.

nicosb21

XLDnaute Nouveau
Bonjour à tous et merci d'avance pour votre aide et votre temps,

J'ai besoin de vous pour une macro qui me permettre de fusionner 2 fichiers planning en 1.

Je reçois 2 fichiers par 2 services différents et je souhaite transmettre un fichier avec une fusion des 2 premiers.

Dans chaque fichier, c'est pareil: 12 feuilles (JANV,FEV,MARS,....) et sur chaque feuille il y une colonne avec les noms et ensuite les jours.
(fichiers d'exemples en pièces jointes)

Particularité des cellules peuvent être fusionnées (comme dans l'exemple).

Merci d'avance.

Salutations
 

Pièces jointes

  • Service 1.xls
    49 KB · Affichages: 21
  • Service 2.xls
    49 KB · Affichages: 21
  • Synthèse.xls
    57 KB · Affichages: 17
  • Service 1.xls
    49 KB · Affichages: 25
  • Synthèse.xls
    57 KB · Affichages: 21
  • Service 1.xls
    49 KB · Affichages: 24
  • Synthèse.xls
    57 KB · Affichages: 20

Robert

XLDnaute Barbatruc
Repose en paix
Re : Fusion de données de 2 fichiers différents dans un nouveau.

Bonsoir Nicosb21 et bienvenu(e), bonsoir le forum,

Peut-être avec ce code à placer dans le classeur Synthèse.xls :

Code:
Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim S1 As Workbook 'déclare la variable S1 (classeur  Service 1)
Dim S2 As Workbook 'déclare la variable S2 (classeur  Service 2)
Dim I As Byte 'déclare la variable I (Incrément)
Dim OS As Object 'déclare la variable OS (Onglet Source)
Dim OD As Object 'déclare la variable OD (Onglet Destination)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set CD = ThisWorkbook 'définit la classeur destination CD
CH = CD.Path & "\" 'définit le chemin CH
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set S1 = Workbooks("Service 1.xls") 'définit le classeur S1 (génère une erreur si le classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'efface l'erreur
    Workbooks.Open (CH & "Service 1.xls") 'ouvre le classeur "Service 1.xls"
    Set S1 = ActiveWorkbook 'définit la classeur S1
End If 'fin de la condition
Set S2 = Workbooks("Service 2.xls") 'définit le classeur S2 (génère une erreur si le classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'efface l'erreur
    Workbooks.Open (CH & "Service 2.xls") 'ouvre le classeur "Service 2.xls"
    Set S2 = ActiveWorkbook 'définit la classeur S2
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs

For I = 1 To 12 'boucle sur les 12 mois
    Set OD = CD.Sheets(I) 'définit l'onglet destination OD
    Set OS = S1.Sheets(I) 'définit l'onglet source OS
    
    '*****************************
    'suppression anciennes données
    '*****************************
    OD.Rows(6 & ":" & Application.Rows.Count).Delete 'supprime toutes les lignes de l'onglet destination à partir de la ligne 6
    OD.Rows(6 & ":" & Application.Rows.Count).RowHeight = 24 'définit la [hauteur de ligne] de toutes les lignes à partir de la ligne 6
    
    '*********
    'service 1
    '*********
    DL = OS.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet source OS
    Set PL = OS.Range("A4:AF" & DL) 'définit la plage PL (onglet source OS)
    PL.Copy OD.Range("A6") 'copie la plage PL et la colle dans la cellule A6 de l'onglet destination OD
    
    '*********
    'service 2
    '*********
    LI = OD.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 'définit la ligne Li (première ligne vide de la colonne A de l'onglet destination OD
    OD.Range("B5:AF5").Copy OD.Cells(LI, 2).Resize(1, 31) 'copie la ligne fusionnée du "Service n°1" et la colle
    OD.Range(OD.Cells(LI, 2), OD.Cells(LI, 32))(1).Value = "Service n°2" 'définit la valeur de la ligne collée
    OD.Rows(LI).RowHeight = 30 'définit la [hauteur de ligne] de la ligne copiée
    Set OS = S2.Sheets(I) 'redéfinit l'onglet source OS
    DL = OS.Cells(Application.Rows.Count, 1).End(xlUp).Row 'redéfinit la dernière ligne éditée de la colonne 1 (=A) de l'onglet source OS
    Set PL = OS.Range("A4:AF" & DL) 'redéfinit la plage PL (onglet source OS)
    PL.Copy OD.Cells(LI + 1, 1) 'copie la plage PL et la colle dans la cellule ligne = Li + 1, colonne = 1 de l'onglet destination OD
    
    '*******************
    'légendes et formats
    '*******************
    Set DEST = OD.Cells(Application.Rows.Count, 1).End(xlUp).Offset(2, 1) 'définit la cellule de destination DEST
    DEST.Offset(-1, 0).RowHeight = 15 'hauteur de ligne de la ligne intermédiare entre le tableau et les légendes
    DEST.Resize(4, 1).HorizontalAlignment = xlCenter 'définit l'alignement horizontalement
    DEST.Resize(4, 2).VerticalAlignment = xlCenter 'définit l'alignement Verticalement
    'placement des légendes
    DEST.Value = "P"
    DEST.Offset(0, 1).Value = "Présent"
    DEST.Offset(1, 0).Value = "A"
    DEST.Offset(1, 1).Value = "Astreinte"
    DEST.Offset(2, 0).Value = "R"
    DEST.Offset(2, 1).Value = "Repos"
    DEST.Offset(3, 0).Value = "V"
    DEST.Offset(3, 1).Value = "Vacances"
    OD.Rows(DEST.Row + 4 & ":" & Application.Rows.Count).RowHeight = 15 'définit la [hauteur de ligne] des lignes après les légendes
Next I 'prochain mois de la boucle
End Sub
Le code commence par effacer les éventuelles anciennes données, puis copie/colle le Service 1, le titre, le Service 2, les légendes et passe au mois suivant...
 

nicosb21

XLDnaute Nouveau
Re : Fusion de données de 2 fichiers différents dans un nouveau.

Bonjour,

Merci beaucoup à Robert pour sa macro qui fonctionne bien et avec la possibilité de copier des lignes supplémentaires ou en retirer sans la moindre modification, c'est vraiment super.

Merci

Salutations
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 571
Messages
2 089 797
Membres
104 275
dernier inscrit
Manu974