Copier des cellules de plusieurs autres fichiers

  • Initiateur de la discussion Initiateur de la discussion Mercutio7
  • 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 !

M

Mercutio7

Guest
Bonjour,

Merci tout d'abord pour ce contenu partagé - il est très enrichissant.

Je vous soumets le problème suivant auquel je pense qu'il existe une solution simple, que j'ignore évidemment 🙂

Je souhaite copier le contenu de plusieurs fichier excel dans un seul.
Ces fichiers sources ont un nom similaire (ex : bidule01.xls, bidule02.xls...) et un contenu qui peut varier (en nombre de lignes uniquement).

J'ai trouvé sur le forum des solutions par vba qui sont difficiles à comprendre pour moi, je cherche donc une manip excel, quitte à faire une part des opérations à la main.

Je pensais mettre en place la solution suivante :
- Lister dans un premier onglet du fichier cible tous les noms des fichiers sources
- A partir de ces noms de fichiers (désormais des chaînes de caractère), aller copier les fichiers sources. Pour l'instant je ne m'occupe pas du nombre de lignes, je pense que je peux gérer. Mais je n'arrive pas à aller chercher une plage de cellules dans un autre fichier à partir du nom du fichier connu dans une cellule voisine...

Je dois passer pour un noob, mais je prends le risque 😀
Auriez-vous cette petite formule magique ?

Bonne journée,
Mercutio
 
Re : Copier des cellules de plusieurs autres fichiers

Re
Et avec ton code remanié, cela donne quoi
Avec ce code, j'arrive bien à lister les fichiers ! C'est une grande étape 🙂
Je vais réutiliser le compte des lignes pour tenter de copier les cellules des fichiers sources.

J'avoue que je capte pas très bien le rôle de la variable NLG et la manipulation de la fonction Range().
Peut-on la combiner avec Cell() pour déterminer une plage, plutôt que de marquer en dur un Range("A1:C10") par exemple ?

Diantre que ça fait du bien de re-coder un peu 😀
 
Re : Copier des cellules de plusieurs autres fichiers

Re

Questions

1) Tes fichiers contiennent combien de feuilles?
(1 feuille par fichier à copier ?)

2) Combien de colonnes? (nombre variables ou pas) ?

3) Le nom des feuilles sont-ils identiques?
 
Re : Copier des cellules de plusieurs autres fichiers

Merci encore messieurs, la copie de cellules de fichiers fonctionne - ce qui va m'éviter de lourdes recopies sur tout le mois d'octobre (non, c'est pas rien) !

Mes questions subsistantes trouveront réponse plus tard, no souc'.
Merci encore !
Mercutio.
 
Re : Copier des cellules de plusieurs autres fichiers

Re

Questions

1) Tes fichiers contiennent combien de feuilles?
(1 feuille par fichier à copier ?)

2) Combien de colonnes? (nombre variables ou pas) ?

3) Le nom des feuilles sont-ils identiques?
So...
1) Une feuille par fichier source, oui.
2) Le nombre de colonnes de varie jamais : 4, dont la première inutile (cette première colonne est souvent vide, la seconde et la troisième sont toujours remplies)
3) Le nom des fichiers est quasiment identique (seule la fin change*). Le nom de LA feuille utile par fichier est toujours Feuil1
* Je pense bien en faire une variable paramétrable dès l'onglet menu, sur le modèle du chemin

Voilou - penses-tu à autre chose ?

Outre l'optimisation de la manipulation des fichiers, il va encore falloir que je croise la liste finale obtenu avec une autre liste (index + titre) dont l'index (ex : BUD-PM-PPA) correspond à une partie d'un champ du fichier que tu m'as aidé à composer (ex : BUD-PM-PPA-01-01).
Tout ça est assez aisé quand je reste dans excel, plus compliqué en vba - mais je m'éclate à replonger dans le dev 🙂

Mercutio.
 
Re : Copier des cellules de plusieurs autres fichiers

Re
Tu peux poster ton code final, stp.
Cela pourrait intéresser d'autres ici.
Merci.
Hello !
Of course. Je posterai aussi le résultat final (.xls) quand j'en aurai terminé.
Attention aux lignes coupées en deux par la taille de cette fenêtre.

Code:
Sub combinerCLASSEURS()
' Déclaration
Dim i%, j%, k%
Dim WBk As Workbook
Dim SRC As Workbook
Dim FF As Worksheet
Dim REP As Range
Dim NBLIMAX As Integer

'Initialisation
NBLIMAX = 50
Set WBk = ThisWorkbook
Set FF = WBk.Sheets("RECOPIE")
Set REP = WBk.Sheets("MENU").Range("$B$5")
Chemin = CStr(REP & "\")

Application.ScreenUpdating = False
FF.UsedRange.Clear
With Application.FileSearch
    .LookIn = Chemin
    .Filename = "BUD-PM-BIN-*.xls"
    If .Execute > 0 Then
    For k = 1 To .FoundFiles.Count
        If .FoundFiles(k) <> WBk.FullName Then
            Set SRC = Workbooks.Open(.FoundFiles(k))
            SRC.Sheets(1).Range("B2:D" & NBLIMAX).Copy FF.[B65536].End(xlUp).Offset(1, 0)
            SRC.Close SaveChanges:=False
        End If
        FF.[B65536].End(xlUp).Offset(-1, -1).Value = _
        Split(.FoundFiles(k), "\")(1) & " : " & Split(.FoundFiles(k), "\")(2)
    Next k
    End If
End With
FF.Activate

'Je ne sais pas comment ne pas faire apparaître cette première colonne, donc je la supprime
ThisWorkbook.ActiveSheet.Columns("A:A").Delete
'Ajouter un titre aux colonnes et le mettre en gras
ThisWorkbook.ActiveSheet.Range("A1") = "Nom cas"
ThisWorkbook.ActiveSheet.Range("B1") = "Description cas"
ThisWorkbook.ActiveSheet.Range("C1") = "Résultat attendu"
ThisWorkbook.ActiveSheet.Range("A1:C1").Font.Bold = True

Application.ScreenUpdating = True
End Sub

Bonne journée,
Mercutio.
 
Re : Copier des cellules de plusieurs autres fichiers

Re


Pour ajouter ton titre tu peux aussi utiliser cette syntaxe

Code:
Range("A1:C1") = Array("Nom cas", "Description cas", "Résultat attendu"): Range("A1:C1").Font.Bold = True

ou celle-ci

Code:
Range("A1:C1") = [{"Nom cas", "Description cas", "Résultat attendu"}]: Range("A1:C1").Font.Bold = True
 
Dernière édition:
Re : Copier des cellules de plusieurs autres fichiers

Re
Tu peux poster ton code final, stp.
Cela pourrait intéresser d'autres ici.
Merci.
Cette méthode permet d'additionner plusieurs fichiers excel (fermés) entre eux dans un seul fichier.

Code:
Sub combinerCLASSEURS()
' Déclaration
Dim i%, j%, k%
Dim WBk As Workbook
Dim SRC As Workbook
Dim FF As Worksheet
Dim REP As Range
Dim NBLIMAX As Integer

' Initialisation
NBLIMAX = 50
Set WBk = ThisWorkbook
Set FF = WBk.Sheets("RECOPIE")
Set REP = WBk.Sheets("MENU").Range("$B$5")
Chemin = CStr(REP & "\")

Application.ScreenUpdating = False
FF.UsedRange.Clear
With Application.FileSearch
    .LookIn = Chemin
    .Filename = "BUD-PM-BIN-*.xls"
    If .Execute > 0 Then
    For k = 1 To .FoundFiles.Count
        If .FoundFiles(k) <> WBk.FullName Then
            Set SRC = Workbooks.Open(.FoundFiles(k))
            SRC.Sheets(1).Range("B2:D" & NBLIMAX).Copy FF.[B65536].End(xlUp).Offset(1, 0)
            SRC.Close SaveChanges:=False
        End If
        FF.[B65536].End(xlUp).Offset(-1, -1).Value = _
        Split(.FoundFiles(k), "\")(1) & " : " & Split(.FoundFiles(k), "\")(2)
    Next k
    End If
End With
FF.Activate

'Je ne sais pas comment ne pas faire apparaître cette première colonne, donc je la supprime
ThisWorkbook.ActiveSheet.Columns("A:A").Delete
'Ajouter un titre aux colonnes et le mettre en gras
ThisWorkbook.ActiveSheet.Range("A1:C1") = Array("Nom cas", "Description cas", "Résultat attendu"): Range("A1:C1").Font.Bold = True

Application.ScreenUpdating = True
End Sub
Bon, ça fonctionne très bien mais je n'ai pas bien compris l'utilisation des Split, ce qui m'empêche de de pas ajouter la première colonne (que je supprime donc à posteriori... pas très joli).

Pour le coup j'ai aussi fait dans le même fichier :
- une méthode qui rapatrie un onglet d'un fichier différent,
- une méthode qui crée un nouvel onglet, qui fusionne deux onglets en faisant la correspondance entre les lignes selon un index situé à l'intérieur d'une chaine de caractère (utilisation de la méthode Mid())

Bref, je suis très fier 😀 mais je me contente de peu, c'est vrai 😎
Bonne journée,
Mercutio
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour