Macro Sélectionner onglets pairs ou impairs

Résolu
Philgood.001 -  
patty5046 Messages postés 46 Statut Membre -
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. patty5046 Messages postés 46 Statut Membre 5
     
    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. Philgood.001 Messages postés 8 Statut Membre
       
      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. patty5046 Messages postés 46 Statut Membre 5
     
    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
  3. Philgood.001 Messages postés 8 Statut Membre
     
    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
  4. patty5046 Messages postés 46 Statut Membre 5
     
    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. Philgood.001
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. patty5046 Messages postés 46 Statut Membre 5
     
    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
  7. Philgood.001 Messages postés 8 Statut Membre
     
    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
  8. Philgood.001
     
    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
  9. Philgood.001 Messages postés 8 Statut Membre
     
    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
  10. Philgood.001 Messages postés 8 Statut Membre
     
    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
  11. patty5046 Messages postés 46 Statut Membre 5
     
    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