[VBA Excel] Sélectionner plusieurs onglets par une macro

Sélectionner plusieurs onglets par une macro [VBA Excel] - VB/VBA/VBS - Programmation

Marsh Posté le 30-03-2006 à 16:35:09    

Bonjour,
J'ai une feuille avec plusieurs onglets. Ce nombre de feuille varie. Je voudrais sélectionner toutes les feuilles à partir de la 5ème par une macro.
 
Voici le code que je voudrais simuler en fonction du nombre de feuilles qu'il y a dans mon classeur; n est ce nombre de feuilles :

Code :
  1. Sheets(Array(5, 6)).Select    'Pour un classeur de 7 feuilles
  2. Sheets(Array(5, 6,7)).Select   'Pour un classeur de 8 feuilles
  3. etc...


 
Je pense que ça doit pas être très compliqué, mais je bloque complètement et la seule solution que j'ai trouvé sur Google n'est même plus dans son cache :D

Reply

Marsh Posté le 30-03-2006 à 16:35:09   

Reply

Marsh Posté le 30-03-2006 à 16:37:40    

si tu trouves comment executer une commande VBA a partir d'une chaine, il te suffit de construire ta commande avec une boucle et de la concatenation... Je sais pas si c'est propre mais ca marcherait a coup sur.

Reply

Marsh Posté le 30-03-2006 à 16:42:21    

kennybis a écrit :

si tu trouves comment executer une commande VBA a partir d'une chaine, il te suffit de construire ta commande avec une boucle et de la concatenation... Je sais pas si c'est propre mais ca marcherait a coup sur.


 
Tu veux dire, quelque chose de ce style ?
i = "5, 6, 7"
Sheets(Array(i)).Select
 
Ca ne marche pas :(

Message cité 1 fois
Message édité par format_c le 30-03-2006 à 16:42:44
Reply

Marsh Posté le 30-03-2006 à 16:55:46    

J'ai trouvé !
 
Dim WB1 As Workbook
Dim MyArray() As String
Dim i As Integer, X As Byte
 
Set WB1 = ThisWorkbook
 
    For i = 5 To 7
        ReDim Preserve MyArray(X)
        MyArray(X) = Sheets(i).Name
           X = X + 1
    Next
            WB1.Worksheets(MyArray).Copy

Reply

Marsh Posté le 30-03-2006 à 17:00:22    

format_c a écrit :

Tu veux dire, quelque chose de ce style ?
i = "5, 6, 7"
Sheets(Array(i)).Select
 
Ca ne marche pas :(

Salut format_c
une recherche sur le forum t'aurai permis de trouver au moins ce post
sinon pour corriger ton bout de code et l'adapter à ton besoin ça devrait te donner ceci :

Code :
  1. Sub SelectionFeuille()
  2. Dim i As Integer, MonArray()
  3. ReDim MonArray(Worksheets.Count - 6) '-6 car tu ne prends pas les 4 premières feuilles
  4. 'ni la dernière et l'array commence à l'indice 0
  5. For i = 5 To Worksheets.Count - 1 'Parcours des feuilles
  6.     MonArray(i - 5) = Sheets(i).Name
  7. Next i
  8. Sheets(MonArray).Select    'sélection de l'ensemble
  9. End Sub

@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 30-03-2006 à 17:03:01    

format_c a écrit :

J'ai trouvé !
 
Dim WB1 As Workbook
Dim MyArray() As String
Dim i As Integer, X As Byte
 
Set WB1 = ThisWorkbook
 
    For i = 5 To 7
        ReDim Preserve MyArray(X)
        MyArray(X) = Sheets(i).Name
           X = X + 1
    Next
            WB1.Worksheets(MyArray).Copy

J'avais pas vu avant de repondre ;)


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 30-03-2006 à 17:27:32    

Merci quand même ! :)

Reply

Marsh Posté le 24-11-2011 à 10:59:14    

watashi a écrit :

Salut format_c
une recherche sur le forum t'aurai permis de trouver au moins ce post
sinon pour corriger ton bout de code et l'adapter à ton besoin ça devrait te donner ceci :

Code :
  1. Sub SelectionFeuille()
  2. Dim i As Integer, MonArray()
  3. ReDim MonArray(Worksheets.Count - 6) '-6 car tu ne prends pas les 4 premières feuilles
  4. 'ni la dernière et l'array commence à l'indice 0
  5. For i = 5 To Worksheets.Count - 1 'Parcours des feuilles
  6.     MonArray(i - 5) = Sheets(i).Name
  7. Next i
  8. Sheets(MonArray).Select    'sélection de l'ensemble
  9. End Sub

@+


 
merci pour ce code, même si ça date de 2006 lol
ça m'aura bien servi :)
 
bizarre par contre, le :
wbSource.Sheets(MonArray).Select
ne marche pas, je sais pas pourquoi
 
par contre ce dont j'avais besoin :
wbSource.Sheets(MonArray).Copy Before:=wbCible.Sheets(1)  
marche super, donc vraiment merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed