Références relatives des feuilles (2)
Fermé
Tessel75
-
20 sept. 2014 à 18:15
via55 Messages postés 14509 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 2 janvier 2025 - 21 sept. 2014 à 00:52
via55 Messages postés 14509 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 2 janvier 2025 - 21 sept. 2014 à 00:52
A voir également:
- Références relatives des feuilles (2)
- Comment faire un livret avec des feuilles a4 - Guide
- Fusionner 2 feuilles excel - Guide
- 2 ecran pc - Guide
- Word numéro de page 1/2 - Guide
- Bruler des feuilles de laurier - Guide
4 réponses
via55
Messages postés
14509
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 janvier 2025
2 739
20 sept. 2014 à 19:23
20 sept. 2014 à 19:23
Bonjour
Ce serait bien d'avoir un aperçu de ton code !
Cdlmnt
Ce serait bien d'avoir un aperçu de ton code !
Cdlmnt
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
via55
Messages postés
14509
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 janvier 2025
2 739
20 sept. 2014 à 22:03
20 sept. 2014 à 22:03
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.
via55
Messages postés
14509
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 janvier 2025
2 739
20 sept. 2014 à 23:34
20 sept. 2014 à 23:34
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
via55
Messages postés
14509
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 janvier 2025
2 739
21 sept. 2014 à 00:52
21 sept. 2014 à 00:52
Oups erreur dans ma ligne !
il faut bien sur lire sheets(Worksheets(f - n).Name ).copy (et non pas -1, sinon il n'y aurait pas de variable)
il faut bien sur lire sheets(Worksheets(f - n).Name ).copy (et non pas -1, sinon il n'y aurait pas de variable)