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

G

gillesj

Guest
Bonjour

Je voudrais copier la feuille 1 de plusieurs classeurs dans un nouveau classeur. Dans ce nouveau classeur, j'ai une feuille "liste" qui récapitule en colonne a tous les classeurs

J'ai bâti le code suivant :
Dim r
r = Range("A65000").End(xlUp).Row

For i = 1 To r
Application.DisplayAlerts = False
ChDir ActiveWorkbook.Path

Sheets("Liste").Select
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & Range("A" & i).Value
Sheets("Feuil1").Select
Sheets("Feuil1").Copy After:=Workbooks("nouveau classeur.xls").Sheets(2)


Windows("nouveauclasseur.xls").Activate
Windows(Range("A" & i) & ".xls").Activate
ActiveWindow.Close SaveChanges:=False
Sheets("Liste").Select

Application.DisplayAlerts = True
Next i


J'ai un souci d'indice sur " Windows(Range("A" & i) & ".xls").Activate " qq'un peut-il m'aider?
 
Re : copie de feuille

Bonjour gillesj, skoobi 😉

Test OK
Condition du test:
• N fichier Xls dans C:\Temp
• un classeur ouvert nommé nouveau classeur.xls
(contenant la macro) et stocké ailleurs que dans C:\Temp

Les feuilles 1 des classeurs de la liste sont bien copiées

Mais il reste un petit souci 😉, que je te laisse découvrir.


Code:
Sub azerty()
[COLOR=Green] 'adapter le nom des feuilles
' en colonne A
' chemin et nom de fichiers:
'ex: C:\Temp\test.Xls[/COLOR]
Dim swbk As Workbook
[B]Dim r
Dim i As Long[/B]
r = Range("A65000").End(xlUp).Row
[B]i = 1[/B]
For i = 1 To r
Application.DisplayAlerts = False
Sheets(1).Select
Set swbk = Workbooks.Open(Filename:=Range("A" & i).Value)
swbk.Sheets(1).Copy After:=Workbooks("nouveau classeur.xls").Sheets(2)
swbk.Close SaveChanges:=False
Sheets(1).Select
Next i
End Sub
 
Dernière édition:
Re : copie de feuille

Merci Stapple..ça marche du tonerre...toutes les feuilles 1 du nouveau classeur étant de même format t'aurais pas un tuyau pour totaliser les données chiffrées sur une feuille de synthèse...j'abuse

Encore merci à toi et à tous ceux qui m'ont répondu
 
Re : copie de feuille

Re


Pourrais-tu poster un fichier exemple, stp ? * (en ayant pris le soin de l'anonymiser mais en laissant sa mise en forme et les formules de calcul s'il y en a)

* je parle d'un exemple de fichier correspondant à ceux qui sont copiées dans nouveau classeur.xls


EDITION :en attendant une version avec un petit plus
(et des commentaires en vert )
Code:
Sub recopie_v2bis()
[COLOR=SeaGreen]'Déclarations des variables[/COLOR]
Dim swbk As Workbook: Dim DWk As Workbook
Dim r As Long: Dim i As Long: Dim rep
[COLOR=SeaGreen]'/////////////////
'Définition du classeur de destination des recopies 
[/COLOR]Set DWk = ThisWorkbook[COLOR=SeaGreen] ' ici le classeur actif[/COLOR]
[COLOR=SeaGreen]'désactivation du rafraichissement de l'affichage[/COLOR]
Application.ScreenUpdating = False
r = DWk.Sheets("liste").Range("A65000").End(xlUp).Row
i = 1
For i = 1 To r
[COLOR=SeaGreen]'ouverture des classeurs de la liste[/COLOR]
Set swbk = _
Workbooks.Open(Filename:=DWk.Sheets("liste").Range("A" & i).Value)
swbk.Sheets(1).Copy After:=Workbooks("nouveau classeur.xls").Sheets("liste")
[COLOR=SeaGreen]'ici on renomme la feuille recopiée avec le nom du classeur source suivi
'du nom de la feuille copiée[/COLOR]
ActiveSheet.Name = _
swbk.Name & "_" & swbk.Sheets(1).Name
swbk.Close SaveChanges:=False
Next i
[COLOR=SeaGreen]'ici le petit plus  ;-)[/COLOR]
rep = _
MsgBox("La recopie des feuilles est achevée, voulez-vous retourner sur la feuille liste?", _
vbInformation + vbYesNo, "Message")
If rep = 6 Then
DWk.Sheets("liste").Select
Else
Cancel = True
End If
'[COLOR=SeaGreen]réactivation du rafraichissement écran[/COLOR]
Application.ScreenUpdating = True
End Sub
 
Dernière édition:
Re : copie de feuille

oui je te poste ça vendredi...

merci de ton aide...j'ai lancé ta nouvelle macro sur d'autres classeurs ...j'ai 2 soucis...comment ignorer les boites de dialogues demandant l'activation ou non des liaisons entre feuilles (j'ai 70 feuilles en moyenne sur les nouveaux classeurs de recopie je voudrais éviter 66 clics)
qq feuilles sur les classeurs sources sont protégés comment les récupérées en mode lecture seule? (si je clic sur lecture seule ..ta macro abouti)...


Merci ...j'ai appris en 1 journée plus qu'en 6 mois de lecture...
 
Re : copie de feuille

Bonjour


Essaye cette nouvelle version

Code:
Sub recopie_v3()
'Déclarations des variables
Dim swbk As Workbook: Dim DWk As Workbook
Dim r As Long: Dim i As Long: Dim rep
'/////////////////
'Définition du classeur de destination des recopies
Set DWk = ThisWorkbook ' ici le classeur actif
'désactivation du rafraichissement de l'affichage
Application.ScreenUpdating = False
r = DWk.Sheets("liste").Range("A65000").End(xlUp).Row
i = 1
For i = 1 To r
'ouverture des classeurs de la liste
Set swbk = _
Workbooks.Open(Filename:=DWk.Sheets("liste").Range("A" & i).Value, [B]UpdateLinks:=False,[/B] [B]ReadOnly:=True[/B])
swbk.Sheets(1).Copy After:=DWk.Sheets("liste")
'ici on renomme la feuille recopiée avec le nom du classeur source suivi
'du nom de la feuille copiée
ActiveSheet.Name = _
swbk.Name & "_" & swbk.Sheets(1).Name
swbk.Close SaveChanges:=False
Next i
'ici le petit plus  ;-)
rep = _
MsgBox("La recopie des feuilles est achevée, voulez-vous retourner sur la feuille liste?", _
vbInformation + vbYesNo, "Message")
If rep = 6 Then
DWk.Sheets("liste").Select
Else
Cancel = True
End If
'réactivation du rafraichissement écran
Application.ScreenUpdating = True
End Sub
 
Re : copie de feuille

merci que d'attentions de ta part c'est très sympa ...petite question l'accès à mes fichiers sources est le suivant

C\bilans\bilan année AAAA\bilan-entité-numéro d'entité.xls ...feuilles 1 à 10comment procéder pour avoir sur les feuilles du classeur cible uniquement le numéro d'entité et le nom de la feuille...
 
Re : copie de feuille

Re


Pour te mettre sur la piste

Code:
Sub test()
Dim x As String
Dim y As String
Dim z As String
x = "C:\bilans\bilan année AAAA\bilan-entité-numéro d'entité.xls"
y = StrReverse(Left(StrReverse(x), InStr(1, StrReverse(x), "-") - 1))
z = Replace(y, ".xls", vbNullString)
MsgBox y
MsgBox z
End Sub
 
Re : copie de feuille

Re



A tester et adapter sur ton poste
Code:
Sub recopie_v4()
'Déclarations des variables
Dim swbk As Workbook: Dim DWk As Workbook
Dim r As Long: Dim i As Long: Dim rep
Dim nf As String
'/////////////////
'Définition du classeur de destination des recopies
Set DWk = ThisWorkbook ' ici le classeur actif
'désactivation du rafraichissement de l'affichage
Application.ScreenUpdating = False
r = _
DWk.Sheets("liste").Range("A65000").End(xlUp).Row
i = 1
For i = 1 To r
'ouverture des classeurs de la liste
Set swbk = _
Workbooks.Open(Filename:=DWk.Sheets("liste").Range("A" & i).Value, _
UpdateLinks:=False, _
ReadOnly:=True)
swbk.Sheets(1).Copy After:=DWk.Sheets("liste")
'ici on renomme la feuille recopiée
'avec le nom du classeur source suivi
'du nom de la feuille copiée
'ActiveSheet.Name = _
'swbk.Name & "_" & swbk.Sheets(1).Name
nf = _
Replace(StrReverse(Left(StrReverse(swbk.Name), _
InStr(1, StrReverse(swbk.Name), "-") - 1)), ".xls", vbNullString)
ActiveSheet.Name = nf & "_" & swbk.Sheets(1).Name
swbk.Close SaveChanges:=False
Next i
'ici le petit plus  ;-)
rep = _
MsgBox("La recopie des feuilles est achevée." & Chr(13) _
& "Voulez-vous retourner sur la feuille liste?", _
vbInformation + vbYesNo, "Message")
If rep = 6 Then
DWk.Sheets("liste").Select
Else
Cancel = True
End If
'réactivation du rafraichissement écran
Application.ScreenUpdating = True
End Sub
 
Dernière édition:
- 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

Réponses
3
Affichages
257
Réponses
5
Affichages
914
Retour