Références relatives des feuilles (2)

Tessel75 -  
via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   -
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.

4 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour

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

    Cdlmnt
    0
  2. Tessel75
     
    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
  3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  4. Tessel75
     
    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
    1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      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
    2. Tessel75
       
      Merci.
      0
    3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      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