Signaler

Macro Sélectionner onglets pairs ou impairs [Résolu]

Posez votre question Philgood.001 - Dernière réponse le 9 avril 2017 à 18:37 par Philgood.001
Bonjour,

Je cherche désespérément sur Google la fonction suivante, mais sans succès :

Aller au 4è onglet (en partant de la gauche) et sélectionner tous les onglets pairs (par N° d'Index).

L'idée est de faire 3 boutons sur le bandeau Excel :
- 1 bouton pour sélectionner les onglets à l'index pair
- 1 bouton pour sélectionner les onglets à l'index impair
- 1 bouton pour sélectionner tous les onglets

En fait, j'ai des tableaux de reporting répartis sur 2 x 12 mois + idem pour les graphiques correspondants (total 48 onglets + 3 onglets de tests).
(Je ne peux pas mettre les graphiques sur les onglets des tableaux correspondants car il y a une macro d'impression pour les tableaux et l'ajout des graphiques correspondants sur les mêmes onglets parasitent la macro d'impression des tableaux.)
L'objectif est donc d'avoir chaque fois l'onglet de tableaux + l'onglet de graphique à côté, et de pouvoir sélectionner en un clic tous les onglets de l'un ou de l'autre pour appliquer les mêmes modifications en une seule fois.

Je tiens à préciser que je ne veux pas indiquer le nombre d'onglets à inclure dans le code (ou citer les index 1 par 1). Celui-ci doit s'adapter automatiquement au nombre d'onglets au fur et à mesure des variations.
En effet, chaque année je rajouterai 12 nouveaux onglets, et je ne veux pas avoir à modifier chaque fois le code, d'autant plus que mes collègues ne maîtrisent pas du tout le VBA...

J'espère que vous aurez la solution, je suis surpris de ne rien avoir trouvé d'existant...

Bon we.

Merci.
Afficher la suite 
Utile
+0
plus moins
Bonjour
J'ai bien ce code mais la dernière feuille est toujours sélectionnée...Donc peut-être ajouter une feuille bidon et ne pas traiter la dernière ?? Si qqn a mieux...

Sub SelectFeuillImpaire()
Dim Sht As Worksheet
For Each Sht In ActiveWorkbook.Sheets 'tout déselectionner
   Sht.Select Replace:=True
Next
Sheets(Sheets.Count).Select Replace:=True
ind = 1
  For Each Sht In ActiveWorkbook.Sheets
  If ind Mod 2 <> 0 Then 'si impair
    Sht.Select Replace:=False
  End If
  ind = ind + 1
  Next Sht
End Sub
Sub SelectFeuillPaire()
Dim Sht As Worksheet
For Each Sht In ActiveWorkbook.Sheets 'tout déselectionner
   Sht.Select Replace:=True
Next
Sheets(Sheets.Count).Select Replace:=True
ind = 1
  For Each Sht In ActiveWorkbook.Sheets
  If ind Mod 2 = 0 Then 'si pair
    Sht.Select Replace:=False
  End If
  ind = ind + 1
  Next Sht
End Sub
Philgood.001 3Messages postés dimanche 2 avril 2017Date d'inscription 9 avril 2017 Dernière intervention - 2 avril 2017 à 14:17
Bonjour patty5046!

Merci pour ta réponse! Elle est presque parfaite!
En effet comme tu dis, la formule sélectionne systématiquement le dernier onglet, en mode pair comme impair. J'ai trouvé la parade. Voici le résultat :

Sub SELECT_ONGLETS_IMPAIRS()

'ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
'Sheets(1).Select
'Sheets("JANVIER 2016").Select

Dim Sht As Worksheet

For Each Sht In ActiveWorkbook.Sheets 'tout déselectionner
Sht.Select Replace:=True

Next

Sheets(Sheets.Count).Select Replace:=True
ind = 1

For Each Sht In ActiveWorkbook.Sheets

If ind Mod 2 <> 0 Then 'si impair
Sht.Select Replace:=False
End If

ind = ind + 1

Next Sht

End Sub


Sub SELECT_ONGLETS_PAIRS()

'ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
'Sheets(4).Select

Dim Sht As Worksheet

For Each Sht In ActiveWorkbook.Sheets 'tout déselectionner
Sht.Select Replace:=True

Next

Sheets(Sheets.Count).Select Replace:=True
ind = 1

For Each Sht In ActiveWorkbook.Sheets

If ind Mod 2 = 0 Then 'si pair
Sht.Select Replace:=False
End If

ind = ind + 1

Sheets(Sheets.Count - 1).Activate

Next Sht

End Sub


Par contre j'ai un soucis :

Comme précisé dans mon post initial, je voudrais que la sélection commence à partir du 4è onglet, mais j'ai eu beau tenter plusieurs tentatives, impossible de trouver la bonne formule.
Si tu as une idée...

Merci encore à toi.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonsoir
peut-être pas très élégant
rajouter test ind pour tes 2 sélections
If ind Mod 2 <> 0 And ind > 3 Then 'si impair

et
If ind Mod 2 = 0 And ind > 3 Then 'si pair


Bon courage
Donnez votre avis
Utile
+0
plus moins
Excellent Patty5046!!!!

Tu as tout bon depuis le début!!!

C'est exactement ce que je voulais.

Me reste plus qu'à trouver le bouton qui sélectionnera tous les onglets depuis le 4è jusqu'au dernier.
Dès que c'est fini je reviens vers toi pour te l'afficher.

En attendant, voilà ce que donne tes formules :

Sub SELECT_ONGLETS_IMPAIRS()

Dim Sht As Worksheet

For Each Sht In ActiveWorkbook.Sheets 'tout déselectionner
Sht.Select Replace:=True

Next

Sheets(Sheets.Count).Select Replace:=True
ind = 1

For Each Sht In ActiveWorkbook.Sheets

If ind Mod 2 <> 0 And ind > 3 Then 'si impair
Sht.Select Replace:=False
End If

ind = ind + 1

Next Sht

End Sub


Sub SELECT_ONGLETS_PAIRS()

Dim Sht As Worksheet

For Each Sht In ActiveWorkbook.Sheets 'tout déselectionner
Sht.Select Replace:=True

Next

Sheets(Sheets.Count).Select Replace:=True
ind = 1

For Each Sht In ActiveWorkbook.Sheets

If ind Mod 2 = 0 And ind > 3 Then 'si pair
Sht.Select Replace:=False
End If

ind = ind + 1

Sheets(Sheets.Count - 1).Activate

Next Sht

End Sub


Merci encore. Bonne journée. A bientôt!
Donnez votre avis
Utile
+0
plus moins
Bonsoir

Voici ta dernière recherche, à partir de la feuille 4

Sub SelectDepuisQuatre()
Dim Sht As Worksheet
For Each Sht In ActiveWorkbook.Sheets 'tout déselectionner
   Sht.Select Replace:=True
Next
Ind = 0
For Each Sht In ActiveWorkbook.Sheets 'tout selectionner depuis 4
    Ind = Ind + 1
    If Ind > 3 Then
        Sht.Select Replace:=False
    End If
Next
End Sub
Philgood.001- 9 avril 2017 à 09:23
Bonjour Patty5046,

Tu as tout bon! 20/20!!!

Merci pour ton aide, rapide, efficace et sans bla-bla!

Bon we à toi.

Et à bientôt (maintenant que j'ai repéré ton pseudo, je vais pas le lâcher...)!
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour

Ravie d'avoir été utile et merci pour tous ces compliments...
N'oublie pas de marquer le sujet comme résolu.

Bon dimanche
Donnez votre avis
Utile
+0
plus moins
Rebonjour Patty5046,

Voici encore mieux, instantané :

"Bonjour,

Je vous propose le code VBA suivant (pour sélectionner les onglets pairs au dessus de 3):

Sub SelectPair()
Dim i As Integer, iCount As Integer
Dim strSheetSelected() As String

For i = 4 To Sheets.Count
If i Mod 2 = 0 Then ' C'est un index pair
If Sheets(i).Visible = xlSheetVisible Then
ReDim Preserve strSheetSelected(iCount)
strSheetSelected(iCount) = Sheets(i).Name
iCount = iCount + 1
End If
End If
Next i

Sheets(strSheetSelected).Select

End Sub


Pour les onglets impairs changer la condition pour IF i Mod 2 = 1 then.
Pour tous les onglets, enlever le premier IF (IF i Mod 2 = 0 then).

Voilà,

Francis"

Francis du CFO masqué!!!

Bravo à lui, excellent code!!!
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !