Signaler

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

Posez votre question Philgood.001 - Dernière réponse le 12 mai 2017 à 11:06 par patty5046
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.
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 5Messages postés dimanche 2 avril 2017Date d'inscription 11 mai 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
Utile
+0
plus moins
Bonjour Patty5046,

Voici un code complémentaire à mes demandes précédentes :

Il s'agit là de masquage/démasquage d'onglets pairs ou impairs :

Sub MASQUER_PAIRS()
Dim i As Integer

For i = 5 To Sheets.Count

If i Mod 2 = 0 Then ' C'est un index pair
Sheets(i).Visible = xlSheetHidden
End If

Next i

End Sub

Sub MASQUER_IMPAIRS()
Dim i As Integer

For i = 6 To Sheets.Count

If i Mod 2 = 1 Then ' C'est un index impair
Sheets(i).Visible = xlSheetHidden
End If

Next i

End Sub

Sub TOUT_DEMASQUER()
Dim i As Integer

For i = 1 To Sheets.Count

Sheets(i).Visible = xlSheetVisible

Next i

End Sub


Code fourni par Francis du CFO masqué!

Merci à toi pour toutes tes propositions.

A très bientôt.

Philgood.001.
Donnez votre avis
Utile
+0
plus moins
Re-bonjour Patty 5046,

Avant de clore le sujet, j'ai une dernière requête toujours sur ce classeur :

Sur chaque onglet, j’ai un bouton “Imprimer” (qui avant d’imprimer, cache certaines colonnes puis imprime puis ré-affiche lesdites colonnes).
Du coup j’ai le même code sur 24 onglets (pour l’instant…).
Mais si je veux modifier le code par ex., je dois le faire pour chaque onglet, et ce 24 fois!!!

Y-a-t-il donc une solution qui permette de centraliser la formule d’impression quelque part et de ne créer que des renvois standardisés sur chaque onglet vers la formule générale d’impression?

J’avais pensé mettre la formule dans “ThisWorkBook” et mettre un renvoi dans chaque “Sheets”.
Qu’en penses-tu? Par contre pour le code je ne sais pas faire…

Merci encore à toi.

A bientôt.

Philgood.001.
Donnez votre avis
Utile
+0
plus moins
Re-bonsoir Patty 5046,

Je tiens à préciser que je sais le faire avec un bouton "Imprimer" en mode "Formulaire" en mettant le code dans un Module VBA, mais que pour des raisons esthétiques et pratiques, je préfère utiliser un bouton “ActiveX” dont je pourrai personnaliser la couleur.
Et dans ce cas, ça ne fonctionne pas.
Si tu as une idée...

Merci à toi.

Philgood..001.
Donnez votre avis
Utile
+0
plus moins
Bonjour
Si tu peux envoyer ton fichier, car je suis loin de chez moi et je ne veux pas recréer un fichier complet pour tes tests (trop occupée). Sinon, quelqu'un pourra peut-être te répondre, je te le souhaite.
Bon courage.
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 !