Importer données de plusieurs fichiers dans un seul fichier centralisateur

Bonjour, étant novice en codage VBA, j'aimerais savoir si il est possible d'avoir une macro sur mon fichier "Fichier TR GENERAL" qui aille chercher dans les différents fichiers l'onglet "Recap_ABS_TR" et qui importent les données de cet onglet sur mon fichier Général en supprimant bien entendu les doublons (pour info les fichiers annexe évoluent régulièrement et ne sont pas forcément ouvert lors de l'importation sur le fichier Général).

Encore merci de votre aide

11fichier1.xlsm (39.42 Ko)
11fichier2.xlsm (36.04 Ko)

Bonjour Snowkite, bonjour le forum,

Dans quel dossier se trouvent les fichier annexes. Le même que le fichier Fichier TR GENERAL ?

Qu'est-ce qui caractérise un doublon dans ton cas ?...

Bonjour et merci de prêter attention à mon sujet :

Dans quel dossier se trouvent les fichier annexes. Le même que le fichier Fichier TR GENERAL ?

Non, ils ne sont pas situer au même endroit, c'est en cliquant sur le bouton import, que nous irons chercher un à un les différents fichiers annexes.

Qu'est-ce qui caractérise un doublon dans ton cas ?

Un doublon est caractérisé par le fait d'avoir pour un même mois le même numéro de matricule avec le même code service, ce qui n'est pas possible.

Pour un mois donné, il peut y avoir 2 fois le même matricule avec 2 codes services différents. Mais il ne peut pas y avoir 2 fois le même matricule avec le même code service.

Bonjour à tous,

Bonjour ThauThème

Tu peux aussi t'inspirer de cette application ...https://www.excel-pratique.com/fr/telechargements/utilitaires/dispatcher-compiler-excel-no466 pour la partie recompilation.

S'il y avait des doublons, il est facile après compilation de supprimer les doublons avec la commande excel.

A chaque fois que je click sur compilation, j'ai un bug dans le code VBA de la macro.

Est-il possible avec cette macro d'aller chercher plusieurs fichiers à différents endroits et comment faire

Merci

capture d ecran 2020 04 18 a 16 45 55

Désolé, je n'avais pas vu que tu étais sous mac !

Essaie de supprimer ces 5 lignes et mets en "dur"

MonRepertoire = "C:\_____________\"

en terminant par un antislash

Après, je ne sais pas s'il y aura d'autres incompatibilités avec mac.

Merci

Essaie de supprimer ces 5 lignes et mets en "dur"

, ça fonctionne à condition que tous les fichiers soient situés dans la même valise. Ce qui n'est pas le cas dans mon cas, comment allez chercher les fichiers aux différents endroits.

Bonjour le fil, bonjour le forum,

Le code ci-dessous te propose d'ouvrir les fichiers source un à un. Les doublons sont traités à la fin quand toutes les données ont été importées :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim BDO As FileDialog 'déclare la variable BDO (Boîte de Dialogue d'Ouverture)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim K As Integer 'déclare la variable K (incrément)

Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Recap_ABS_TR") 'définit l'onglet destination OD
ici: 'étiquette
'si "Non au message, va à l'étiquette "fin"
If MsgBox("Vous devez ouvrir un classeur source, voulez-vous le faire ?", vbYesNo, "ATTENTION") = vbNo Then GoTo fin
Set BDO = Application.FileDialog(msoFileDialogOpen) 'définit la boîte de dialogue d'ouverture BDO
BDO.AllowMultiSelect = False 'n'autorise la sélection que d'un seul fichier
BDO.Show 'affiche BDA
If BDO.SelectedItems.Count > 0 Then Workbooks.Open (BDO.SelectedItems(1)) 'ouvre le ficher sélectionné
Set CS = ActiveWorkbook 'définit le classeur source CS
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set OS = CS.Worksheets("Recap_ABS_TR") 'définit l'onglet source OS (génère une erreur si cet onglet n'existe pas)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
    MsgBox "Ce fichier ne contient pas d'onglet nommé " & Chr(34) & "Recap_ABS_TR" & Chr(34) & "!" 'message
    GoTo ici 'va á l'étiquette "ici"
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
'définit la cellule de destination DEST (première cellule vide de la colonne A de l'onglet OD)
Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
OS.Range("A1").CurrentRegion.Offset(1, 0).Copy DEST 'copie les données de l'onglet source et les colle dans DEST
CS.Close False 'ferme le classeur source CS sans enregistrer
GoTo ici 'va à l'étiquette ici

fin: 'étiquette
TV = OD.Range("A1").CurrentRegion 'définit le tablreau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 2) & " " & TV(I, 3) & " " & TV(I, 5)) = "" 'alimente le dictionnaire D avec la concaténation du matricule, du code et de la date
Next I 'prochaine ligne de la boucle
If D.Count = 0 Then Exit Sub 'si le dictionnaire est vide, sort de la procédure
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictoionnaire D asns doublon
For J = 0 To UBound(TMP) 'boucole 1 : sur tous les éléments J du tableau temporaire TMP
K = 0 'initialise la variable K
    For I = UBound(TV, 1) To 2 Step -1 'boucle inversée 2 : sur toutes les lignes I du tableau des valeurs TV (de la dernière à la seconde)
        'si la concaténation matricule, code, date de la boucle 2 est égale à l'élément J de la boucle 1, incrémente K
        If TV(I, 2) & " " & TV(I, 3) & " " & TV(I, 5) = TMP(J) Then K = K + 1
        If K > 1 Then OD.Rows(I).Delete: K = 0 'si K est supérieure à 1, supprime la ligne I, re initialise K
    Next I 'prochaine ligne de la boucle 2
Next J 'prochain élément de la boucle 1
End Sub

Merci

Essaie de supprimer ces 5 lignes et mets en "dur"

, ça fonctionne à condition que tous les fichiers soient situés dans la même valise. Ce qui n'est pas le cas dans mon cas, comment allez chercher les fichiers aux différents endroits.

Alors ThauThème est l'homme de la situation (ma seule proposition aurait été de tout regrouper sous le même dossier comme je le demandais souvent !)

Merci

Essaie de supprimer ces 5 lignes et mets en "dur"

, ça fonctionne à condition que tous les fichiers soient situés dans la même valise. Ce qui n'est pas le cas dans mon cas, comment allez chercher les fichiers aux différents endroits.

Alors ThauThème est l'homme de la situation (ma seule proposition aurait été de tout regrouper sous le même dossier comme je le demandais souvent !)

Merci beaucoup, ton code VBA me servira plus tard pour d'autres développements.

Bonjour Thau thème,

Quand j'exécute la macro1() depuis le fichier général, elle ne va pas chercher le fichier, elle se met en débogue "cf capture écran"

capture d ecran 2020 04 19 a 10 38 27 capture d ecran 2020 04 19 a 10 37 59

Re,

Je n'ai pas ce message chez moi (et je me suis pas aveugle non plus malgré mon âge...). Vérifie s'il ne manque pas des références dans l'éditeur VBE. Menu Outils/Références.... Je ne vois que cette possibilité ou une incompatibilité de mon code avec Mac mais là je ne peux pas t'aider sinon t'envoyer des liens vers magasins qui vendent des PC...

En pièce jointe ton fichier avec la macro qui fonctionne parfaitement chez moi :

En tout cas merci à toi, j'essaierais demain au bureau via un environnement PC, je suis quasiment certain que ton développement VBA est fonctionnel.

Merci, c'est un super boulot

là je ne peux pas t'aider sinon t'envoyer des liens vers magasins qui vendent des PC...

C'est pas que je suis pour windows ou pour mac (mon cœur pencherait plus vers lamp = linux apache mysql php) mais je trouve incongru d'utiliser excel sur mac ... c'est comme rouler à gauche en France !

Rechercher des sujets similaires à "importer donnees fichiers seul fichier centralisateur"