Macro pour copier plusieurs onglets de plusieurs feuilles
Résolu
cooljuly
Messages postés
40
Statut
Membre
-
cooljuly Messages postés 40 Statut Membre -
cooljuly Messages postés 40 Statut Membre -
Bonjour,
j'ai une macro que j'ai besoin d'améliorer car je viens de me rendre compte que certains classeurs avaient plusieurs onglets.
du coup je voudrais intégrer dans le code le fait de remonter tous les onglets du classeurs tant que la cellule A4 n'est pas vide.
Sub syntèseClasseurs()
Dim ClasseurRecap As String, ClassImp As String, NomFeuilleImp As String, DerLigRecap As Long, DerLigImp As Long, Pays As Variant, Code As String
Rows("3:" & Cells(Rows.Count, 2).End(xlUp).Row + 1).Delete
' Détermination du classeur récapitulatif
ClasseurRecap = ThisWorkbook.Name
DerLigRecap = Cells(Rows.Count, 2).End(xlUp).Row
' Détermination DernièreLigne
If DerLigRecap <= 2 Then
DerLigRecap = 3
End If
'Set maitre = ActiveWorkbook
Repertoire = ThisWorkbook.Path
ClassImp = Dir(Repertoire & "\*.xls") ' premier fichier
Do While ClassImp <> ""
If ClassImp <> ThisWorkbook.Name Then
Workbooks.Open Filename:=Repertoire & "\" & ClassImp
NomFeuilleImp = Workbooks(ClassImp).ActiveSheet.Name
DerLigImp = Workbooks(ClassImp).Worksheets(NomFeuilleImp).Cells(Rows.Count, 2).End(xlUp).Row
Rows("4:" & DerLigImp).Copy
Pays = Range("A1").Value
Windows(ClasseurRecap).Activate
Rows(DerLigRecap).Select
ActiveSheet.Paste
Range("AA" & DerLigRecap & ":AA" & DerLigRecap + DerLigImp - 4) = Pays
Application.CutCopyMode = False
Windows(ClassImp).Close False
With Worksheets("Table").Range("A1:A" & Worksheets("Table").Cells(Rows.Count, 1).Row)
Set c = .Find(Pays, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
ActiveSheet.Range("AB" & DerLigRecap & ":AB" & DerLigRecap + DerLigImp - 4).Value = c.Offset(0, 1)
ActiveSheet.Range("AC" & DerLigRecap & ":AC" & DerLigRecap + DerLigImp - 4).Value = c.Offset(0, 2)
End If
End With
DerLigRecap = DerLigRecap + DerLigImp - 3
End If
ClassImp = Dir ' fichier suivant
Loop
Range(Cells(3, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 30)).Style = "Style 1"
Columns("A:AD").AutoFit
Rows("1:" & Cells(Rows.Count, 1).End(xlUp).Row).AutoFit
For Each cell In Range("B3:B" & Cells(Rows.Count, 2).End(xlUp).Row)
If cell = "TIT" Then
Code = "G2 TIT"
ElseIf cell = "VI" Then
Code = "G3 VI"
ElseIf cell = "CTR" Then
Code = "G4 CTR"
ElseIf cell = "ADL" Then
Code = "G5 ADL"
Else: Code = ""
End If
Range("AD" & cell.Row) = Code
Next cell
End Sub
merci à ceux qui pourront m'aider
http://www.cjoint.com/c/FDbnFQj2Kxi
j'ai une macro que j'ai besoin d'améliorer car je viens de me rendre compte que certains classeurs avaient plusieurs onglets.
du coup je voudrais intégrer dans le code le fait de remonter tous les onglets du classeurs tant que la cellule A4 n'est pas vide.
Sub syntèseClasseurs()
Dim ClasseurRecap As String, ClassImp As String, NomFeuilleImp As String, DerLigRecap As Long, DerLigImp As Long, Pays As Variant, Code As String
Rows("3:" & Cells(Rows.Count, 2).End(xlUp).Row + 1).Delete
' Détermination du classeur récapitulatif
ClasseurRecap = ThisWorkbook.Name
DerLigRecap = Cells(Rows.Count, 2).End(xlUp).Row
' Détermination DernièreLigne
If DerLigRecap <= 2 Then
DerLigRecap = 3
End If
'Set maitre = ActiveWorkbook
Repertoire = ThisWorkbook.Path
ClassImp = Dir(Repertoire & "\*.xls") ' premier fichier
Do While ClassImp <> ""
If ClassImp <> ThisWorkbook.Name Then
Workbooks.Open Filename:=Repertoire & "\" & ClassImp
NomFeuilleImp = Workbooks(ClassImp).ActiveSheet.Name
DerLigImp = Workbooks(ClassImp).Worksheets(NomFeuilleImp).Cells(Rows.Count, 2).End(xlUp).Row
Rows("4:" & DerLigImp).Copy
Pays = Range("A1").Value
Windows(ClasseurRecap).Activate
Rows(DerLigRecap).Select
ActiveSheet.Paste
Range("AA" & DerLigRecap & ":AA" & DerLigRecap + DerLigImp - 4) = Pays
Application.CutCopyMode = False
Windows(ClassImp).Close False
With Worksheets("Table").Range("A1:A" & Worksheets("Table").Cells(Rows.Count, 1).Row)
Set c = .Find(Pays, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
ActiveSheet.Range("AB" & DerLigRecap & ":AB" & DerLigRecap + DerLigImp - 4).Value = c.Offset(0, 1)
ActiveSheet.Range("AC" & DerLigRecap & ":AC" & DerLigRecap + DerLigImp - 4).Value = c.Offset(0, 2)
End If
End With
DerLigRecap = DerLigRecap + DerLigImp - 3
End If
ClassImp = Dir ' fichier suivant
Loop
Range(Cells(3, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 30)).Style = "Style 1"
Columns("A:AD").AutoFit
Rows("1:" & Cells(Rows.Count, 1).End(xlUp).Row).AutoFit
For Each cell In Range("B3:B" & Cells(Rows.Count, 2).End(xlUp).Row)
If cell = "TIT" Then
Code = "G2 TIT"
ElseIf cell = "VI" Then
Code = "G3 VI"
ElseIf cell = "CTR" Then
Code = "G4 CTR"
ElseIf cell = "ADL" Then
Code = "G5 ADL"
Else: Code = ""
End If
Range("AD" & cell.Row) = Code
Next cell
End Sub
merci à ceux qui pourront m'aider
http://www.cjoint.com/c/FDbnFQj2Kxi
A voir également:
- Macro pour copier plusieurs onglets de plusieurs feuilles
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Comment faire un livret avec des feuilles a4 - Guide
- Regrouper plusieurs feuilles excel en une seule - Guide
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
1 réponse
Bonjour,
Je te propose la modification ainsi :
Je te propose la modification ainsi :
Sub syntèseClasseurs()
Dim ClasseurRecap As String, ClassImp As String, NomFeuilleImp As String, DerLigRecap As Long, DerLigImp As Long, Pays As Variant, Code As String
Dim feu As Worksheet, wcr As Worksheet
Rows("3:" & Cells(Rows.Count, 2).End(xlUp).Row + 1).Delete
' Détermination du classeur récapitulatif
ClasseurRecap = ThisWorkbook.Name
DerLigRecap = Cells(Rows.Count, 2).End(xlUp).Row
Set wcr = ThisWorkbook.ActiveSheet
' Détermination DernièreLigne
If DerLigRecap <= 2 Then
DerLigRecap = 3
End If
'Set maitre = ActiveWorkbook
Repertoire = ThisWorkbook.Path
ClassImp = Dir(Repertoire & "\*.xls") ' premier fichier
While ClassImp <> ""
If ClassImp <> ThisWorkbook.Name Then
Workbooks.Open Filename:=Repertoire & "\" & ClassImp
For Each feu In ActiveWorkbook
If feu.Range("A4").Value <> "" Then
DerLigImp = feu.Cells(Rows.Count, 2).End(xlUp).Row
Pays = Range("A1").Value
Rows("4:" & DerLigImp).Copy
wcr.Rows(DerLigRecap).Paste
wcr.Range("AA" & DerLigRecap & ":AA" & DerLigRecap + DerLigImp - 4) = Pays
DerLigRecap = DerLigRecap + DerLigImp - 3
End If
Next feu
Windows(ClassImp).Close False
With Worksheets("Table").Range("A1:A" & Worksheets("Table").Cells(Rows.Count, 1).Row)
Set c = .Find(Pays, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
ActiveSheet.Range("AB" & DerLigRecap & ":AB" & DerLigRecap + DerLigImp - 4).Value = c.Offset(0, 1)
ActiveSheet.Range("AC" & DerLigRecap & ":AC" & DerLigRecap + DerLigImp - 4).Value = c.Offset(0, 2)
End If
End With
End If
ClassImp = Dir ' fichier suivant
Wend
Application.CutCopyMode = False
Range(Cells(3, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 30)).Style = "Style 1"
Columns("A:AD").AutoFit
Rows("1:" & Cells(Rows.Count, 1).End(xlUp).Row).AutoFit
For Each cell In Range("B3:B" & Cells(Rows.Count, 2).End(xlUp).Row)
If cell = "TIT" Then
Code = "G2 TIT"
ElseIf cell = "VI" Then
Code = "G3 VI"
ElseIf cell = "CTR" Then
Code = "G4 CTR"
ElseIf cell = "ADL" Then
Code = "G5 ADL"
Else: Code = ""
End If
Range("AD" & cell.Row) = Code
Next cell
End Sub
désolée du retard de réponse mais je ne reçois pas les notifications.