A voir également:
- Références relatives des feuilles (2)
- Comment faire un livret avec des feuilles a4 - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Bruler des feuilles de laurier - Guide
- 2 ecran pc - Guide
- Fusionner 2 feuilles excel - Guide
4 réponses
Merci Via,
Ci-dessous le code en question: Le but du code est d'extraire les feuilles d'un planning d'affectation des personnes par sélection de 5 semaines, 1 feuille = 1 semaine.
Sub EnvoiArchives()
Application.ScreenUpdating = False
f = ActiveSheet.Index
n0 = Worksheets(f).Name
N1 = Worksheets(f - 1).Name
n2 = Worksheets(f - 2).Name
n3 = Worksheets(f - 3).Name
n4 = Worksheets(f - 4).Name
n00 = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4)
Sheets(Array(n0, N1, n2, n3, n4)).Copy
SendKeys ("{LEFT}{ENTER}")
ActiveWorkbook.SaveAs Filename:= _
"D:\D-Mes documents\Cs4_GENERALES\EnvoiArchives\" & n00 & "A.xls", _
FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=True, _
CreateBackup:=False
Application.ScreenUpdating = True
ActiveWorkbook.Save
Ci-dessous le code en question: Le but du code est d'extraire les feuilles d'un planning d'affectation des personnes par sélection de 5 semaines, 1 feuille = 1 semaine.
Sub EnvoiArchives()
Application.ScreenUpdating = False
f = ActiveSheet.Index
n0 = Worksheets(f).Name
N1 = Worksheets(f - 1).Name
n2 = Worksheets(f - 2).Name
n3 = Worksheets(f - 3).Name
n4 = Worksheets(f - 4).Name
n00 = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4)
Sheets(Array(n0, N1, n2, n3, n4)).Copy
SendKeys ("{LEFT}{ENTER}")
ActiveWorkbook.SaveAs Filename:= _
"D:\D-Mes documents\Cs4_GENERALES\EnvoiArchives\" & n00 & "A.xls", _
FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=True, _
CreateBackup:=False
Application.ScreenUpdating = True
ActiveWorkbook.Save
Re,
Avec Array je ne vois pas (ou ne sais pas) comment mettre une variable
Ce que tu pourrais faire si par exemple tu veux copier de 1 à 4 feuilles précédant la feuille active c'est :
1) Mettre en debut de macro une demande du nombre de feuille à copier avant style ndf=inputbox("Nbre de feuilles avant ?")
2) tu gardes la suite de la macro mais au lieu d'une seule commande Sheets(Array(.. tu en fais une par possibilité dont le choix se fera avec select case
Select case ndf
case 1
Sheets(Array(n0, N1).Copy
case 2
Sheets(Array(n0, N1, n2)).Copy
etc
terminer par End select
Cdlmnt
Avec Array je ne vois pas (ou ne sais pas) comment mettre une variable
Ce que tu pourrais faire si par exemple tu veux copier de 1 à 4 feuilles précédant la feuille active c'est :
1) Mettre en debut de macro une demande du nombre de feuille à copier avant style ndf=inputbox("Nbre de feuilles avant ?")
2) tu gardes la suite de la macro mais au lieu d'une seule commande Sheets(Array(.. tu en fais une par possibilité dont le choix se fera avec select case
Select case ndf
case 1
Sheets(Array(n0, N1).Copy
case 2
Sheets(Array(n0, N1, n2)).Copy
etc
terminer par End select
Cdlmnt
Re...
Comme tu t'en es peut-être douté j'ai bidouillé mon code en partant de l'enregistreur de macros. Je fais toujours ainsi.
Ta solution ne peut convenir car cela représenterait trop de cas, et serait trop lourde.
Pour préciser les choses: j'ai un classeur de type "Calendrier perpétuel" avec 53 feuilles (1 par semaine) s'enchainant en boucle et non pas de manière fixe de la semaine 1 à la semaine 53. Plus ou moins régulièrement je bascule les feuilles du début vers la fin en les nettoyant des corrections apportées semaines après semaines. Mais je dois garder en archives la trace de ces corrections, aussi je sélectionne un certain paquet de feuilles que je garde à part en copiant/collant dans un nouveau classeur avant de lancer mon opération de nettoyage + bascule. Je le fais environ tous les 4 ou 5 mois ce qui fait un peu plus de 20 feuilles. J'ai un automatisme pour cette dernière opération mais pas pour l'archivage. C'est ce que je cherche.
Si je pouvais écrire un truc du genre: Array(a to n) ou sheets (a to n), je n'aurais plus de problème. Mais ce n'est pas possible. Copier/Coller les feuilles une à une n'est pas possible non plus parce que trop compliqué pour faire comprendre à VBA d'ajouter les feuilles au nouveau classeur et les laisser dans l'ordre.
Voila mon problème de fond.
Cordialement.
Comme tu t'en es peut-être douté j'ai bidouillé mon code en partant de l'enregistreur de macros. Je fais toujours ainsi.
Ta solution ne peut convenir car cela représenterait trop de cas, et serait trop lourde.
Pour préciser les choses: j'ai un classeur de type "Calendrier perpétuel" avec 53 feuilles (1 par semaine) s'enchainant en boucle et non pas de manière fixe de la semaine 1 à la semaine 53. Plus ou moins régulièrement je bascule les feuilles du début vers la fin en les nettoyant des corrections apportées semaines après semaines. Mais je dois garder en archives la trace de ces corrections, aussi je sélectionne un certain paquet de feuilles que je garde à part en copiant/collant dans un nouveau classeur avant de lancer mon opération de nettoyage + bascule. Je le fais environ tous les 4 ou 5 mois ce qui fait un peu plus de 20 feuilles. J'ai un automatisme pour cette dernière opération mais pas pour l'archivage. C'est ce que je cherche.
Si je pouvais écrire un truc du genre: Array(a to n) ou sheets (a to n), je n'aurais plus de problème. Mais ce n'est pas possible. Copier/Coller les feuilles une à une n'est pas possible non plus parce que trop compliqué pour faire comprendre à VBA d'ajouter les feuilles au nouveau classeur et les laisser dans l'ordre.
Voila mon problème de fond.
Cordialement.
Oui effectivement !
Array avec variable ne me semble pas possible comme je le disais précédemment
par contre Sheets(variable) est possible donc ta solution passe peut être par une boucle et une copie feuille par feuille
avec toujours la variable ndf choisie par l'utilisateur
For n= 1 to ndf
sheets(Worksheets(f - 1).Name ).copy
Next n
Cdlmnt
Array avec variable ne me semble pas possible comme je le disais précédemment
par contre Sheets(variable) est possible donc ta solution passe peut être par une boucle et une copie feuille par feuille
avec toujours la variable ndf choisie par l'utilisateur
For n= 1 to ndf
sheets(Worksheets(f - 1).Name ).copy
Next n
Cdlmnt