Macro Sélectionner onglets pairs ou impairs

Résolu
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.

10 réponses

  1. 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
    
    0
    1. 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.
      0
  2. 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
    0
    1. 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!
      0
      1. 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
        
        0
        1. 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...)!
          0
      2. Bonjour

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

        Bon dimanche
        0
        1. 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!!!
          0
          1. 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.
            0
            1. 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.
              0
              1. 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.
                0
                1. 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.
                  0