Boucle sur onglet d'un second classeur

Pierre42

XLDnaute Nouveau
Bonjour,

Je souhaiterai synthétiser des données contenu dans plusieurs dizaines d'onglet d'un "classeur1.xls". Ces données sont toutes situées sur la même plage (E18:E40). J'ai donc créer un onglet "synthèse" dans ce classeur1 et utilisé une boucle avec For ... to et next. Mon code fonctionne très bien, j'aimerai maintenant réaliser ma macro à partir d'un autre classeur : "classeur2.xls". Avec mon niveau débutant en VBA, je n'ai pas trouvé de solution pour récupérer mes données du classeur1 vers le classeur 2.

Pouvez vous m'aider à adapter ce code ?

Code:
Dim i As Long
For i = 6 To Worksheets.Count - 2

'sélectionner la ligne ou coller les données
Sheets("synthese").Select
Dim PremLigne As Long
PremLigne = Range("A" & Rows.Count).End(xlUp).Row + 1

'copier et coller les données
Sheets(i).Select
Range("E18:E40").Select
Selection.Copy
Sheets("synthese").Select
Range("A" & PremLigne).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

Next

Merci
 

jpb388

XLDnaute Accro
Re : Boucle sur onglet d'un second classeur

Bonsoir le forum
ton code devrait resembler a cela (Pas testé)
Code:
Dim i As Long
Dim PremLigne As Long, Wk1 As Workbook, Shs As Worksheet, Wk2 As Workbook
Set Wk1 = ThisWorkbook 'classeur de la macro
Set Wk2 = Workbooks("Classeur2") 'classeur de destination
Set Shs = Sheets("synthese") 'feuille ou s'effectue la copie
For i = 6 To Worksheets.Count - 2

 'sélectionner la ligne ou coller les données
 PremLigne = Wk1.Shs.Range("A" & Rows.Count).End(xlUp).Row + 1

 'copier et coller les données
 Wk2.Sheets(i).Range("E18:E40").Copy
 Wk1.Shs.Range("A" & PremLigne).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

 Next
 

vmatthieu

XLDnaute Occasionnel
Re : Boucle sur onglet d'un second classeur

Bonsoir,
sinon d'une façon un peu moins académique cela pourrait être:
Sub synthèse()


Dim i As Long

Windows("classeur2").Activate
For i = 6 To Worksheets.Count - 2
Windows("classeur2").Activate
'sélectionner la ligne ou coller les données



'copier et coller les données
Sheets(i).Select
Range("E18:E40").Select


Selection.Copy
Windows("classeur1").Activate
Sheets("synthese").Select
Range("A" & Rows.Count).End(xlUp).Select
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

Next
End Sub


mais bon cela devrait marché.
tu peux gagner un peu en temps d'éxécution en rajoutant Application.ScreenUpdating = False au début et
Application.ScreenUpdating = True à la fin

bonne soirée
 

Pierre42

XLDnaute Nouveau
Re : Boucle sur onglet d'un second classeur

Merci pour vos réponses.

La première solution ne fonctionne cependant pas, la macro bloque sur la variable shs. Je n'ai pourtant pas vu d'erreur. Ca fonctionne par contre quand je remplace :

Code:
'sélectionner la ligne ou coller les données
 PremLigne = Wk1.Shs.Range("A" & Rows.Count).End(xlUp).Row + 1

 'copier et coller les données
 Wk2.Sheets(i).Range("E18:E40").Copy
 Wk1.Shs.Range("A" & PremLigne).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

par

Code:
 'sélectionner la ligne ou coller les données
 PremLigne = Wk1.Sheets("synthese").Range("A" & Rows.Count).End(xlUp).Row + 1

 'copier et coller les données
 Wk2.Sheets(i).Range("E18:E40").Copy
 Wk1.Sheets("synthese").Range("A" & PremLigne).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

Une idée d'où pourrait provenir l'erreur ?

Merci vmatthieu ton code fonctionne bien, mais la première solution me semble plus rapide en exécution et en écriture.
 

vmatthieu

XLDnaute Occasionnel
Re : Boucle sur onglet d'un second classeur

Bonsoir,
cela devrait fonctionner comme ça
bonne soirée

Sub mm()
Dim i As Long
Dim PremLigne As Integer, Wk1 As Workbook, Shs As Worksheet, Wk2 As Workbook
Set Wk1 = ThisWorkbook 'classeur de la macro
Set Wk2 = Workbooks("Classeur2") 'classeur de destination
Wk1.Activate
Set Shs = Sheets("synthese") 'feuille ou s'effectue la copie
Wk2.Activate
For i = 6 To Worksheets.Count - 2

'sélectionner la ligne ou coller les données


'copier et coller les données
Wk2.Sheets(i).Range("E18:E40").Copy
With Wk1
PremLigne = Shs.Range("A" & Rows.Count).End(xlUp).Row + 1

Shs.Range("A" & PremLigne).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
End With
Next
End Sub
 

jpb388

XLDnaute Accro
Re : Boucle sur onglet d'un second classeur

bonsoir le forum
Tu met 2 classeurs en disant je veux que tel données de telle feuille de tel classeur aille sur telle cellule de telle feuille sur tel classeur et tu auras une macro vraiment adapté a ton problème (en principe sans source d'erreur de classeur ou d'interprétation)
 

Discussions similaires