Microsoft 365 [VBA] Dupliquer un nombre variable d'onglets

garth_algar

XLDnaute Junior
Bonjour à toutes et à tous,
Je souhaite créer une macro qui copie dans une nouveau classeur un certain nombre d'onglets. Avec ce bout de code je stocke les noms des onglets à copier :
VB:
ReDim ListeOnglets(NbOnglets)
    For i = 1 To NbOnglets
    ListeOnglets(i) = ThisWorkbook.Worksheets("Feuil1").Cells(3 + i, 5).Value
    Next i
Ensuite, pour copier les onglets, j'ai récupéré la syntaxe de l'enregistreur de macro :
VB:
ActiveWorkbook.Sheets(Array(ListeOnglets(1),ListeOnglets(2)).Copy
Ce code marche bien, mon problème est que le nombre d'onglets est variable selon les cas, et
Code:
ActiveWorkbook.Sheets(ListeOnglets).Copy
ne fonctionne pas.
Quelqu'un aurait-il une solution plus optimale que le code ci-dessous ? D'autant que je peux avoir jusqu'à une vingtaine d'onglets...
VB:
If NbOnglets = 1 Then ActiveWorkbook.Sheets(Array(ListeOnglets(1)).Copy
If NbOnglets = 2 Then ActiveWorkbook.Sheets(Array(ListeOnglets(1),ListeOnglets(2)).Copy
If NbOnglets = 3 Then ActiveWorkbook.Sheets(Array(ListeOnglets(1),ListeOnglets(2),ListeOnglets(3)).Copy
...
Merci !
 

garth_algar

XLDnaute Junior
Bonjour,
Merci pour cette proposition, j'ai essayé mais certains onglets font référence à d'autres, et si les onglets sont copiés un par un les formules sont modifiées pour faire référence au fichier d'origine. Dans un second temps je romps les liaisons, mais ça veut dire que les liens entre 2 onglets copiés vont être perdus.
Je pense qu'il faut copier tous les onglets comme un seul bloc.
 
Dernière édition:

garth_algar

XLDnaute Junior
Bonjour, j'ai trouvé la résolution du problème, si jamais quelqu'un en a besoin un jour, les tableaux sont indexés à partir de 0 par défaut, ListeOnglets(0) n'était pas défini, donc impossible de trouver l'onglet correspondant. En redéfinissant le tableau ainsi ça fonctionne !
VB:
ReDim ListeOnglets(1 to NbOnglets)
 

Discussions similaires

Réponses
0
Affichages
137

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth