Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
J'ai regardé définition de la fonction Array : Renvoie une variable de type Variant contenant un tableau.
C'est exactement comme ça que j'ai défini ma variable ListeOnglets, je ne comprends pas pourquoi je ne peux pas remplacer Array(ListeOnglets(1),ListeOnglets(2)) par ListeOnglets
 

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
157
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…