Copie automatique de données entre plusieurs fichiers variables

  • Initiateur de la discussion Initiateur de la discussion panpipes
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
124
Réponses
2
Affichages
330
Retour