Copie automatique de données entre plusieurs fichiers variables

panpipes

XLDnaute Nouveau
Bonjour à tous,

Je rencontre actuellement un problème sur Excel et n'ayant pas vu (ou su identifier) une solution au sein d'une autre discussion, je me permet d'en créer une nouvelle.

Je vais essayer d'expliquer le problème clairement.

Je reçois chaque mois une vingtaine de fichiers excel concernant un report d'activité, de format et mise en page identiques, mais avec des informations différentes.
(ces fichiers sont représentés par DocumentSource1.xlsx dans les fichiers ci dessous)

Dans ces fichiers, seuls quelques informations m'intéressent, et je voudrais les rassembler au sein d'un autre document.
(ce document estreprésenté par DocumentRecapitulatif.xlsx dans les fichiers ci dessous)

Ce que je voudrais réaliser ici dans le DocumentRecapitulatif est un bouton/une macro permettant d'afficher par exemple une boite de commande dans laquelle je spécifie le nom du DocumentSourceXXX pour après insérer automatiquement une ligne dans le DocumentRecapitulatif reprenant automatiquement certaines information du DocumentSourceXXX.

Je souhaiterai également pouvoir réaliser cela sans avoir à ouvrir le DocumentSourceXXX.
D'après ce que j'ai pu voir, je suis obligé de passer par du code VBA.

Je me permet de vous joindre deux pièces jointes (modifiées) en exemple ci dessous.

Je vous remercie par avance pour votre aide ou le temps que vous consacrerez à cette discussion!

Bonne journée!
 

Pièces jointes

  • DocumentRecapitulatif.xlsx
    11.5 KB · Affichages: 51
  • DocumentSource1.xlsx
    12.4 KB · Affichages: 49

Robert

XLDnaute Barbatruc
Repose en paix
Re : Copie automatique de données entre plusieurs fichiers variables

Bonsoir PanPipes et bienvenu, bonsoir le forum,

Sans ouvrir les fichiers je ne sais pas faire... Voici donc une proposition où les fichiers sont ouverts puis refermés aussitôt sans que l'utilisateur ne s'en aperçoive (ou si peu...).
Ce code ne fonctionnera que si tous les fichiers se trouvent dans la même dossier que le classeur source DocumentRecapitulatif.xlsm. Il faut aussi que les fichiers commencent par DocumentSource... Sinon tu adapteras le code est commenté.

En cliquant sur le bouton Ajouter un document Source la boîte de dialogue Document Sources s'ouvre. Sélectionne les fichiers qui t'intéressent et valide avec Ajouter le(s) Fichier(s). J'ai pensé qu'on pourrait renommer les fichiers déjà ajoutés (en mettant un A_ au début par exemple) pour te permettre de les repérer et de ne pas les ajouter plusieurs fois...
Le fichier :
 

Pièces jointes

  • DocumentRecapitulatif.xlsm
    29.5 KB · Affichages: 45

panpipes

XLDnaute Nouveau
Re : Copie automatique de données entre plusieurs fichiers variables

Bonjour Robert,

Merci pour cette réponse aussi rapide et pour ce code. Il fonctionne très bien et est parfaitement adapté à mon utilisation. :)
Les commentaires laissés à côté m'ont vraiment aidé et permis de comprendre le code et adapter le cas échéant pour les noms de fichiers etc... C'est vraiment super!!!

Il me reste juste un problème (pour ce que je vois pour le moment) que je n'arrive pas à résoudre (et que j'avais mal expliqué & présenté dans les documents de départ).

Une fois que le bouton "Ajouter un Document Source" a été activé, les DocumentSourceXX s'affichent sans problème, et les informations voulues sont rapatriées à nouveau sans problème vers DocumentRecapitulatif.
Mon problème apparaît cependant une fois que je reprends mes documents, car les onglets des DocumentSourceX ne s'appellent pas "Feuil1". Leur nom n'est pas fixe (sinon j'aurai pu le modifier directement dans le code), mais reprend en fait le même nom que son fichier.

Pour être plus clair, le nom de l'onglet du fichier DocumentSource1 sera DocumentSource1, celui du fichier DocumentSource2 sera DocumentSource2, etc.

Je pense que la modification doit se faire au niveau de la ligne identifiée en rouge ci-dessous, mais je n'arrive pas à remettre le nom de la variable correcte. Qu'en penses-tu?

Merci pour l'aide déjà apportée en tout cas!

Code:
Private Sub CommandButton1_Click() 'bouton "Ajouter les fichiers"
Dim i As Integer 'déclare la variable i (Incrément)
Dim cs As Workbook 'déclare la variable cs (Classeur Source)
Dim os As Object 'déclare la variable os (Onglet Source)
Dim dest As Range 'déclare la variable det (cellule de DESTination)

Me.Hide 'masque l'UserForm1
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
For i = 0 To Me.ListBox1.ListCount - 1 'boucle sur tous les éléments de la ListBox1
    If Me.ListBox1.Selected(i) = True Then 'condition : si l'élément est sélectionné
        Workbooks.Open (ch & "\" & Me.ListBox1.List(i)) 'ouvre le fichier
        Set cs = ActiveWorkbook 'définit le classeur source cs
        [COLOR="#FF0000"]Set os = cs.Sheets("Feuil1") 'définit l'onglet source os[/COLOR]
        Set dest = od.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination
        dest.Value = Year(Date) 'récupère l'année en cours
        dest.Offset(0, 1).Value = Split(Me.ListBox1.List(i), ".")(0) 'récupère le nom du classeur (sans l'extension)
        dest.Offset(0, 2).Value = os.Range("D3") 'récupère l'info 1
        dest.Offset(0, 3).Value = os.Range("B6") 'récupère l'info 2
        dest.Offset(0, 4).Value = os.Range("B7") 'récupère l'info 3
        dest.Offset(0, 5).Value = os.Range("C9") 'récupère l'info 4
        dest.Offset(0, 6).Value = os.Range("C10") 'récupère l'info 5
        dest.Offset(0, 7).Value = os.Range("F16") 'récupère l'info 6
        dest.Offset(0, 8).Value = os.Range("F23") 'récupère l'info 7
        cs.Close SaveChanges:=False 'ferme le classeur (sans le sauver)
    End If 'fin de la condition
Next i 'prochain élément de la boucle
Unload Me 'vide et ferme l'UserForm1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Copie automatique de données entre plusieurs fichiers variables

Bonjour PanPipes, bonjour le forum,

Deux solutions :
- si l'onglet est toujours le premier du classeur alors :
Code:
Set os = cs.Sheets(1) 'définit l'onglet source os
- sinon :
Code:
Set os = cs.Sheets(Split(Me.ListBox1.List(i), ".")(0)) 'définit l'onglet source os
 

panpipes

XLDnaute Nouveau
Re : Copie automatique de données entre plusieurs fichiers variables

Bonjour Robert, bonjour le forum.

Merci pour cette nouvelle réponse et la rapidité avec laquelle elle a été apportée.

Je viens de l'adapter et de la tester sur mes documents et elle fonctionne parfaitement bien! Ce code va me permettre de gagner pas mal de temps chaque mois!

Merci encore et bonne journée

Panpipes
 

Discussions similaires

Statistiques des forums

Discussions
312 487
Messages
2 088 823
Membres
103 971
dernier inscrit
abdazee