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 !

Soleil11

XLDnaute Occasionnel
Bonjour,

Je voudrais modifier la macro ci-dessous , mais je n'arrive pas à obtenir le résultat voulu. En feuille 1 lorsque je fais tourner cette marcro je n'obtiens pas le résultat voulu. En feuille 2 j'ai ajouté le contenu de ce je voudrais obtenir. Pourriez-vous m'aider à obtenir ce résultat. J'ai mis en annexe les fichiers concernés par cette macro. La macro se trouve en classeur1.xls

Macro ci-dessous :

Sub Consolidation()
Dim Temp As String
Dim Ligne As Long, Ligne2 As Long
Temp = Dir("C:\Test" & "\*.xls")
Application.DisplayAlerts = False
Do While Temp <> ""
If Temp <> "Classeur1.xls" Then
Workbooks.Open "C:\Test" & "\" & Temp
Ligne2 = Workbooks(Temp).Sheets(1).Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Count
Workbooks(Temp).Sheets(1).Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
Workbooks("Classeur1.xls").Sheets(1).Activate
Ligne = Sheets(1).Range("A65536").End(xlUp).Row + 1
Range("B" & CStr(Ligne)).Select
ActiveSheet.Paste
Range("A" & CStr(Ligne), "A" & Ligne + Ligne2 - 1).Value = Temp
Workbooks(Temp).Close
End If
Temp = Dir
Loop
Range("A1").Select
Application.DisplayAlerts = True
End Sub

Merci de votre aide.

Soleil11😀
 

Pièces jointes

Re : Aide sur code VBA

Bonsoir


Cela semble OK ainsi

Code:
Sub XConsolidation()
Dim Temp As String, Ligne As Long, Lig As Long, ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
Temp = Dir("C:\Test" & "\*.xls")
Application.ScreenUpdating = False
Do While Temp <> ""
If Temp <> "Classeur1.xls" Then
Workbooks.Open "C:\Test" & "\" & Temp
Lig = Workbooks(Temp).Sheets(1).UsedRange.Rows.Count
Ligne = ws.Range("A65536").End(xlUp).Row
ws.Cells(Ligne + 1, "A").Resize(Lig).Value = Temp
Workbooks(Temp).Sheets(1).UsedRange.Copy _
ws.Range("B" & Ligne + 1)
Workbooks(Temp).Close
End If
Temp = Dir
Loop
Rows(1).Delete
Application.ScreenUpdating = True
End Sub
 
Dernière édition:
Re : Aide sur code VBA

Bonsoir


Cela semble OK ainsi

Code:
Sub XConsolidation()
Dim Temp As String, Ligne As Long, Lig As Long, ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
Temp = Dir("C:\Test" & "\*.xls")
Application.ScreenUpdating = False
Do While Temp <> ""
If Temp <> "Classeur1.xls" Then
Workbooks.Open "C:\Tempa" & "\" & Temp
Lig = Workbooks(Temp).Sheets(1).UsedRange.Rows.Count
Ligne = ws.Range("A65536").End(xlUp).Row
ws.Cells(Ligne + 1, "A").Resize(Lig).Value = Temp
Workbooks(Temp).Sheets(1).UsedRange.Copy _
ws.Range("B" & Ligne + 1)
Workbooks(Temp).Close
End If
Temp = Dir
Loop
Rows(1).Delete
Application.ScreenUpdating = True
End Sub

Bonjour Staple1600,

Cela marche très bien mais j'aimerais juste comprendre ce qui n'était pas correct. Quels étaient les paramètres qui ne jouaient pas ? Est-il possible pour vous de me donner quelques commentaires ainsi je pourrais essayer de m'améliorer. Quel est la différence entre "usedrange" et une selection "Range(Selection, ActiveCell.SpecialCells(xlLastCell))" ?

Merci de m'aider à comprendre.

Soleil11🙂
 
Re : Aide sur code VBA

Bonjour

UsedRange, propriété - Exemple
Cet exemple montre comment sélectionner la plage utilisée dans la feuille Sheet1.
Worksheets("Sheet1").Activate
ActiveSheet.UsedRange.Select
(ceci provient de l'aide de VBA : Dans Excel, faire ALT+F11 puis F1 )

En général, on peut se passer d'utiliser Select, Selection, Activate dans le code d'une macro

Voici une version modifiée et commentée
Code:
Sub X2Consolidation()
[COLOR=Green]'Déclarations[/COLOR]
Dim Ligne As Long, Lig As Long
Dim ws As Worksheet, WBk As Workbook, Temp$, Rep$, Fic$
[COLOR=Green]'////////////////////////////////////////////////////////[/COLOR]
Set ws = ThisWorkbook.Sheets(1) [COLOR=Green]'       <- Feuille de copie des données[/COLOR]
Rep = "C:\Test\": Fic = "*.xls" [COLOR=Green]'      <-Désignation du dossier/type de fichier[/COLOR]
Temp = Dir(Rep & Fic) [COLOR=Green]'                 <- ici on parcourt le dossier[/COLOR]
Application.ScreenUpdating = False [COLOR=Green]'    <- ici on fige l'écran[/COLOR]
    Do While Temp <> ""
        If Temp <> "Classeur1.xls" Then
        Set WBk = Workbooks.Open(Rep & Temp) [COLOR=Green]'<- ici on ouvre le classeur trouvé[/COLOR]
        Lig = WBk.Sheets(1).UsedRange.Rows.Count [COLOR=Green]'<- Nombre de lignes utilisées[/COLOR]
        Ligne = ws.[A65536].End(xlUp).Row [COLOR=Green]'<- ligne dernière cellule non vide[/COLOR]
        ws.Cells(Ligne + 1, "A").Resize(Lig).Value = Temp [COLOR=Green]'<-copie des noms de fichiers[/COLOR]
        WBk.Sheets(1).UsedRange.Copy ws.Range("B" & Ligne + 1)
        [COLOR=Green]'<- copie des données des données sources dans Feuil1[/COLOR]
        WBk.Close[COLOR=Green] '<- fermeture du classeur[/COLOR]
        End If
    Temp = Dir
    Loop
Rows(1).Delete [COLOR=Green]'<- suppression 1ère ligne (esthétique)[/COLOR]
Set WBk = Nothing [COLOR=Green]'<- reset variable WBk[/COLOR]
Application.ScreenUpdating = True [COLOR=Green]'<- ici on défige l'écran[/COLOR]
End Sub
 
Dernière édition:
Re : Aide sur code VBA

Bonjour

(ceci provient de l'aide de VBA : Dans Excel, faire ALT+F11 puis F1 )

En général, on peut se passer d'utiliser Select, Selection, Activate dans le code d'une macro

Voici une version modifiée et commentée
Code:
Sub X2Consolidation()
[COLOR=Green]'Déclarations[/COLOR]
Dim Ligne As Long, Lig As Long
Dim ws As Worksheet, WBk As Workbook, Temp$, Rep$, Fic$
[COLOR=Green]'////////////////////////////////////////////////////////[/COLOR]
Set ws = ThisWorkbook.Sheets(1) [COLOR=Green]'       <- Feuille de copie des données[/COLOR]
Rep = "C:\Test\": Fic = "*.xls" [COLOR=Green]'      <-Désignation du dossier/type de fichier[/COLOR]
Temp = Dir(Rep & Fic) [COLOR=Green]'                 <- ici on parcourt le dossier[/COLOR]
Application.ScreenUpdating = False [COLOR=Green]'    <- ici on fige l'écran[/COLOR]
    Do While Temp <> ""
        If Temp <> "Classeur1.xls" Then
        Set WBk = Workbooks.Open(Rep & Temp) [COLOR=Green]'<- ici on ouvre le classeur trouvé[/COLOR]
        Lig = WBk.Sheets(1).UsedRange.Rows.Count [COLOR=Green]'<- Nombre de lignes utilisées[/COLOR]
        Ligne = ws.[A65536].End(xlUp).Row [COLOR=Green]'<- ligne dernière cellule non vide[/COLOR]
        ws.Cells(Ligne + 1, "A").Resize(Lig).Value = Temp [COLOR=Green]'<-copie des noms de fichiers[/COLOR]
        WBk.Sheets(1).UsedRange.Copy ws.Range("B" & Ligne + 1)
        [COLOR=Green]'<- copie des données des données sources dans Feuil1[/COLOR]
        WBk.Close[COLOR=Green] '<- fermeture du classeur[/COLOR]
        End If
    Temp = Dir
    Loop
Rows(1).Delete [COLOR=Green]'<- suppression 1ère ligne (esthétique)[/COLOR]
Set WBk = Nothing [COLOR=Green]'<- reset variable WBk[/COLOR]
Application.ScreenUpdating = True [COLOR=Green]'<- ici on défige l'écran[/COLOR]
End Sub

Bonjour JM,

Je te remercie cela m'a vraiement aidé, je pourrais sûrement utilisé à nouveau ces codes dans d'autre macros et j'y vois vraiement plus claire....

Soleil11🙂
 
- 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
3
Affichages
923
Réponses
1
Affichages
325
Réponses
10
Affichages
792
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
1 K
Réponses
4
Affichages
756
Réponses
2
Affichages
772
Retour