Références relatives des feuilles (2)

Fermé
Tessel75 - 20 sept. 2014 à 18:15
via55 Messages postés 14406 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 avril 2024 - 21 sept. 2014 à 00:52
Bonjour,
Avec VBA, est-il possible de copier/coller un nombre non-prédéterminé de feuilles sans les nommées toutes mais seulement la 1ère et la dernière?
Je m'explique. La manoeuvre est courante, on sélectionne un certain nombre de ft euilles pour les copier/coller dans un autre classeur en sélectionnant la 1ère et la dernière en maintenant appuyée la touche shift et avec puis click droit "copier dans un nouveau classeur".
J'ai écrit un morceau de code pour exécuter la manoeuvre avec un nombre prédéterminé de feuilles, en utilisant l'index de la feuille à prendre comme feuille de référence, je peux demandé de copier/coller les n feuilles qui précèdent (ou qui suivent) dans un autre classeur. Je voudrais exécuter la même opération mais sans que le nombre de feuille soit fixé d'avance. En espérant avoir été clair dans ma demande.
Avec mes remerciements pour votre aide et votre aide vos suggestions.


A voir également:

4 réponses

via55 Messages postés 14406 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 avril 2024 2 703
20 sept. 2014 à 19:23
Bonjour

Ce serait bien d'avoir un aperçu de ton code !

Cdlmnt
0
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
0
via55 Messages postés 14406 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 avril 2024 2 703
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
0
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.
0
via55 Messages postés 14406 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 avril 2024 2 703
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
0
Merci.
0
via55 Messages postés 14406 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 avril 2024 2 703
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)
0