Copier un nbre de feuilles variable dans un autre classeur

nicolase78

XLDnaute Junior
Bonjour à tous,

J'ai un classeur Excel qui contient des onglets Commande.
Plus la commande est importante, plus le nombre d'onglets Commande est important. On obtient donc dans un classeur un nombre variable d'onglet de la manière suivante :
- Commande1
- Commande2
- Commande3
- ...

Avec une petite fonction j'arrive à déterminer le nombre d'onglets commande, ici 3.

Code:
CompteurOnglet = 0     
For Each Sh In Sheets
        If Left(Sh.Name, 8) = "Commande" Then compteurOnglet = compteurOnglet + 1
Next Sh

Seulement, je sais passer un Array dans mon autre classeur (nommé ici fname) mais de manière fixe, par exemple si je sais que j'ai 3 onglets commande je ferais de la manière suivante :

Code:
Sheets(Array("Commande1", "Commande2","Commande3")).Copy After:=Workbooks(fname & ".xlsx").Sheets(1)

Je sais contourner le problème et faire quelque chose de pas très propre avec une boucle qui parcourt les feuilles et qui copie les bonnes feuilles.
Mais le problème c'est qu'avec cette solution "sale", les formules de la feuille Commande1 font référence aux feuilles de l'ancien classeur, alors qu'avec un array on évite ces problèmes, les formules feraient bien référence aux bons onglets Commande collés.

En fait la question simplifiée c'est : comment faire varier le nombre d'éléments dans un Array je pense..., si c'est possible !

J'espère avoir été clair, je peux mettre un classeur d'exemple bien que je pense que dans ce cas présent cela ne soit pas utile.

Merci pour toutes fois où vous m'avez aider d'ailleurs.

Bonne journée.
 

gilbert_RGI

XLDnaute Barbatruc
Re : Copier un nbre de feuilles variable dans un autre classeur

bonjour

et pourquoi ne pas faire comme ceci

Code:
For Each Sh In Sheets
        If Left(Sh.Name, 8) = "Commande" Then Sheets(Sh.Name).Copy After:=Workbooks(fname & ".xlsx").Sheets(1)
Next Sh

:rolleyes:
 

nicolase78

XLDnaute Junior
Re : Copier un nbre de feuilles variable dans un autre classeur

Merci Gilbert pour ton aide.

En fait il me semblait avoir fait ça mais le fait que la feuille active soit dans le nouveau classeur pose des problèmes lors du parcours de la collection des feuilles. Je vais réessayer par curiosité.

Le fait de passer par un Array permet d'éviter les soucis de lien vers l'ancien classeur. En effet lorsque je vais copier commande1 vers le nouveau classeur. Les formules de Commande1 feront référence aux feuilles commande2, commande3... de l'ancien classeur.
 

gilbert_RGI

XLDnaute Barbatruc
Re : Copier un nbre de feuilles variable dans un autre classeur

voilà
il faut que le fichier receveur existe (ou le créer)

Code:
Sub test()
fname = "tartempion"
Fichier = ThisWorkbook.FullName
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & fname & ".xlsx"
ActiveWindow.ActivateNext
For Each Sh In Sheets
         If Left(Sh.Name, 8) = "Commande" Then Sheets(Sh.Name).Copy After:=Workbooks(fname & ".xlsx").Sheets(1)
         ActiveWindow.ActivateNext
 Next Sh
End Sub

ou celui ci dessous un peu plus complet

Code:
Sub test()
    fname = "tartempion"
    Fichier = ThisWorkbook.FullName
    On Error Resume Next
    Workbooks.Add
    ActiveWorkbook.SaveAs Filename:=fname & ".xlsx"
    Workbooks.Open Filename:=ThisWorkbook.Path & "\" & fname & ".xlsx"
    ActiveWindow.ActivateNext
    For Each Sh In Sheets
        If Left(Sh.Name, 8) = "Commande" Then Sheets(Sh.Name).Copy After:=Workbooks(fname & ".xlsx").Sheets(1)
        ActiveWindow.ActivateNext
    Next Sh
    ActiveWindow.ActivateNext
    With Workbooks(fname & ".xlsx")
        .Save
        .Close
    End With
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 188
Messages
2 086 026
Membres
103 099
dernier inscrit
myseb