Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Vba Pompages d'une ligne sur 100 ficher

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

Bens7

XLDnaute Impliqué
Bonjours a tous !!
J'ai un dossier avec 100 fichiers excel nomer ainsi : 1 ; 1 (2); 1 (3) ; 1 (4) .... 1 (100)
chaque fichier contient une seul Feuil mais qui n'a pas le meme nom dans chaque fichier

j'aimerais grace a un bouton recuperer la ligne 60 de chacun de ces fichiers et les avoir une a une dans un tableau
Merci a tous ! j'espere que c'est clair lolll....
 
Re : Vba Pompages d'une ligne sur 100 ficher

Re,

Voici un fichier à tester,il fonctionne chez moi en XL 2007

A changer:
-Le répertoire
- J'ai filtré les fichiers sur .xlsx et xlsm, à retirer si trop.
- For NbColonne = 1 To 100 < changer le 100 par le nombre de colonne à copier.
- supprimer la macro test si elle ne sert plus.

Après, il y a moyen d'optimiser je pense mais pas assez spécialiste.
 

Pièces jointes

Re : Vba Pompages d'une ligne sur 100 ficher

(re)Bonsoir Bens7, bbb38, mikachu, à tous,

Un essai dans le fichier joint ( fichier Recup2.xlsm).

Lecode:
VB:
Sub Recuperer60()

Const Repert = "D:\EXCEL\@EXCEL-DOWNLOADS\@TEST\Fact\Facturation"
Const LigneDepart = 2

Dim LesFichiers, i, rep As String
Dim Fichier As String, Ligne As Long

Application.ScreenUpdating = False
ThisWorkbook.Sheets("Lignes60").Activate

If Right(Repert, 1) <> "\" Then rep = Repert & "\" Else rep = Repert

Ligne = LigneDepart
Fichier = Dir(rep & "*.xlsm")

Do While Fichier <> ""
  If Not IsArray(LesFichiers) Then
    ReDim LesFichiers(1 To 1)
  Else
    ReDim Preserve LesFichiers(1 To UBound(LesFichiers) + 1)
  End If
  LesFichiers(UBound(LesFichiers)) = rep & Fichier
  Fichier = Dir
Loop

Ligne = LigneDepart
With ThisWorkbook.Sheets("Lignes60")
  .Range("A" & Ligne & ":A" & .Rows.Count).Clear
  If Not IsArray(LesFichiers) Then Exit Sub
  .Range("A" & Ligne).Resize(UBound(LesFichiers)).Value = Application.Transpose(LesFichiers)
  .Range("A" & Ligne).Resize(UBound(LesFichiers)).Sort key1:=.Range("A" & Ligne), Header:=xlNo
   LesFichiers = .Range("A" & LigneDepart).Resize(UBound(LesFichiers)).Value
  .Range("A" & Ligne & ":A" & .Rows.Count).Clear
End With

For i = 1 To UBound(LesFichiers)
  Workbooks.Open LesFichiers(i, 1)
  ActiveWorkbook.ActiveSheet.Rows(60).Copy
  ThisWorkbook.Sheets("Lignes60").Rows(Ligne).PasteSpecial Paste:=xlPasteValues
  Application.DisplayAlerts = False
  ActiveWorkbook.Close Savechanges:=False
  Application.DisplayAlerts = True
  Ligne = Ligne + 1
Next i

Application.CutCopyMode = False
Application.Goto Range("A" & IIf(LigneDepart = 1, 1, LigneDepart - 1)), True
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

Re : Vba Pompages d'une ligne sur 100 ficher

Bonsoir Bens7 🙂

Je ne me souviens plus très bien mais j'avais éludé le cas où il n'y aurait qu'un seuil fichier .xlsm.
Voici une nouvelle version qui devrait le faire.

Le code:
VB:
Option Explicit
Option Base 1
Sub Recuperer60()

Const Repert = "C:\Fact\Facturation"
Const LigneDepart = 2
Dim i&, k&, Ligne&, rep$, LesFichiers(), Fichier$

Application.ScreenUpdating = False
ThisWorkbook.Sheets("Lignes60").Activate

If Right(Repert, 1) <> "\" Then rep = Repert & "\" Else rep = Repert
Fichier = Dir(rep & "*.xlsm")
Do While Fichier <> ""
  k = k + 1
  ReDim Preserve LesFichiers(1 To k)
  LesFichiers(k) = rep & Fichier
  Fichier = Dir
Loop

With ThisWorkbook.Sheets("Lignes60")
  .Range("A" & LigneDepart & ":A" & .Rows.Count).Clear
  If k = 0 Then Exit Sub
  .Range("A" & LigneDepart).Resize(k).Value = Application.Transpose(LesFichiers)
  If k > 1 Then .Range("A" & LigneDepart).Resize(k).Sort _
            key1:=.Range("A" & LigneDepart), Header:=xlNo
  LesFichiers = .Range("A" & LigneDepart).Resize(k + 1).Value
  .Range("A" & LigneDepart & ":A" & .Rows.Count).Clear

  Ligne = LigneDepart
  For i = 1 To k
    Workbooks.Open LesFichiers(i, 1)
    ActiveWorkbook.ActiveSheet.Rows(60).Copy
    .Rows(Ligne).PasteSpecial Paste:=xlPasteValues
    Application.DisplayAlerts = False
    ActiveWorkbook.Close Savechanges:=False
    Application.DisplayAlerts = True
    Ligne = Ligne + 1
  Next i
End With

Application.CutCopyMode = False
Application.Goto Range("A" & IIf(LigneDepart = 1, 1, LigneDepart - 1)), True
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

- 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
23
Affichages
680
Réponses
3
Affichages
281
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…