VBA - Appliquer une macro à toutes les feuilles actives

Bonjour à tous et à toutes,

j'ai deux codes VBA que j'aime utiliser pour grouper et dégrouper des lignes / colonnes.

Cependant, je n'arrive pas à ajouter l'effet : "s'applique à toute les feuilles sélectionnées"

Le code:

Sub GroupageFacile()

Rows("3:4").Select
Selection.Rows.Group
Selection.EntireRow.Hidden = True
'Copier collez les 3 lignes du dessus pour autant de lignes à grouper

Columns("C:E").Select
Selection.Columns.Group
Selection.EntireColumn.Hidden = True
'Copier collez les 3 lignes du dessus pour autant de colonnes à grouper

End Sub

ou encore,

Sub Degroupetout()

Range("A1:XFD1048576").Select
Selection.ClearOutline
'Dégroupe toutes les lignes et les colonnes

End Sub

J'ai rajouter des bouts de code du genre:

ActiveWindow.SelectedSheets

Mais sans effets :/

Auriez vous une idée ?

En vous remerciant par avance,

Creatif

Bonjour

Peut être avec

For i = 1 To Worksheets.Count
Ton Code
Next

Cordialement

J'ai testé:

Sub GroupageFacile()
For i = 1 To Worksheets.Count

Rows("3:4").Select
Selection.Rows.Group
Selection.EntireRow.Hidden = True
'Copier collez les 3 lignes du dessus pour autant de lignes à grouper

Columns("C:E").Select
Selection.Columns.Group
Selection.EntireColumn.Hidden = True
'Copier collez les 3 lignes du dessus pour autant de colonnes à grouper

Next

End Sub

Et ça m'a grouper 7 fois à la suite les colonnes et ligne de ma seule feuille active.

Je voudrais un groupement par feuille pour toutes mes feuilles sélectionnées (si c'est possible bien sur)

Merci

Pas de solution simple ?

Bonjour,

à tester :

Sub Degroupetout()
    Dim sh As Worksheet
    For Each sh In SelectedSheets
        sh.Range("A1:XFD1048576").Select
        Selection.ClearOutline
        'Dégroupe toutes les lignes et les colonnes
    Next sh
End Sub

eric

eriiic a écrit :

Bonjour,

à tester :

Sub Degroupetout()
    Dim sh As Worksheet
    For Each sh In SelectedSheets
        sh.Range("A1:XFD1048576").Select
        Selection.ClearOutline
        'Dégroupe toutes les lignes et les colonnes
    Next sh
End Sub

eric

Bonjour Eriiic,

J'ai l'erreur d'execution suivante:

424; Objet requis

J'ai testé divers truc sans réussite :/

Oui, petite erreur.

Remplace par :

For Each sh In Windows(1).SelectedSheets

eric

Alors, j'ai testé, et j'obtiens cette erreur:

erreur 1004; La méthode Clearoutline de la classe range a échoué.

Code testé:

Sub Degroupetout()
    Dim sh As Worksheet
    For Each sh In Windows(1).SelectedSheets
        sh.Range("A1:XFD1048576").Select
        Selection.ClearOutline
        'Dégroupe toutes les lignes et les colonnes
   Next sh
End Sub

Merci encore pour ton aide

Ben ça c'est ton code et ce n'est pas la question de départ.

Cette partie est-elle résolue ?

Sinon essaie en sélectionnant la feuille avant sh.select

eric

eriiic a écrit :

Ben ça c'est ton code et ce n'est pas la question de départ.

Cette partie est-elle résolue ?

Sinon essaie en sélectionnant la feuille avant sh.select

eric

Oui et non

En effet, oui ton code permet d'activer un code sur les feuilles actives, mais pas sur un code spécial qui de base ne s'active pas sur plusieurs feuille liée.

Sinon, je suis arrivé à ça (et ça peut aider les autres membres, à garder sous le coude):

Dégroupe tout sur tout les feuilles du classeur:

Sub Degroupetout()
For i = 1 To Worksheets.Count
Worksheets(i).Range("A1:XFD1048576").ClearOutline
'Dégroupe toutes les lignes et les colonnes
Next i
End Sub

Mais je voudrais la même formule, mais uniquement sur les feuilles actives, et ça je n'y arrive pas :s.

Bonne soirée,

Creatif

Bon, ce coup là j'ai testé, c'est bon sur 2003 :

Sub Degroupetout()
    Dim sh As Worksheet
    For Each sh In ActiveWindow.SelectedSheets
        'Dégroupe toutes les lignes et les colonnes
        sh.Cells.ClearOutline
  Next sh
End Sub

eric

eriiic a écrit :

Bon, ce coup là j'ai testé, c'est bon sur 2003 :

Sub Degroupetout()
    Dim sh As Worksheet
    For Each sh In ActiveWindow.SelectedSheets
        'Dégroupe toutes les lignes et les colonnes
        sh.Cells.ClearOutline
  Next sh
End Sub

eric

C'est parfait, exactement ce que je voulais !

Voila, j'ai une dernière requête, n'y réponds que si tu as le temps et l'envie car je buche dessus depuis un certain moment;

pourquoi cette fonction ne fonctionne t'elle pas:

Sub GroupageFacile()

Dim sh As Worksheet
For Each sh In ActiveWindow.SelectedSheets

sh.Rows("3:4").Select
sh.Selection.Rows.Group
sh.Selection.EntireRow.Hidden = True
'Copier collez les 3 lignes du dessus pour autant de lignes à grouper

Next sh
End Sub

J'ai le code erreur suivant: membre de méthode ou données introuvable".

Encore merci, le dégroupe tout est très efficace !

Bonjour,

Ce n'est pas une fonction mais un sub

Manque :

  • ligne en erreur
  • un fichier de test

eric

eriiic a écrit :

Bonjour,

Ce n'est pas une fonction mais un sub

Manque :

  • ligne en erreur
  • un fichier de test

eric

Oui très juste un sub.

Erreur 1004,

c'est la ligne sh.rows("3:4").select qui à l'air de bugé.

Fichier joint en pièce jointe.

Merci encore

Tu ne peux faire un .select que sur une feuille active.

eric

eriiic a écrit :

Tu ne peux faire un .select que sur une feuille active.

eric

Donc ma seconde question est, peut on grouper des lignes ou des colonnes sans .select ?

Cordialement,

Creatif

Bonjour Creatif, bonjour le fil

VBA est une programmation objets, on peut donc les manipuler directement

Sub GroupageFacile()
  Dim sh As Worksheet
  For Each sh In ThisWorkbook.Sheets
    sh.Cells.ClearOutline
    ' Avec l'objet feuille
    With sh
      ' Avec les lignes définies
      With .Rows("3:4")
        .Group
        .EntireRow.Hidden = True
      End With
      ' Avec les colonnes définies
      With .Columns("C:E")
        .Group
        .EntireColumn.Hidden = True
      End With
    End With
  Next sh
End Sub

A+

Cest marrant, 5 secondes avant que tu postes, après 2 jours à travailler dessus, j'ai sorti ça:

Sub GroupageFacile()

Dim i As Worksheet
For Each i In ActiveWindow.SelectedSheets
i.Cells.ClearOutline
'Dégroupe tout ce qu'il y a de grouper
i.Rows("3:4").Group
i.Rows("3:4").Hidden = True
'Copier collez les 2 lignes du dessus pour autant de lignes à grouper
i.Columns("E:G").Group
i.Columns("E:G").Hidden = True
'Copier collez les 2 lignes du dessus pour autant de colonnes à grouper
Next i
End Sub

Mais merci, c'était exactement ce que je voulais ce que tu as dis.

Merci encore à toi et Eric.

Sujet résolu !

Rechercher des sujets similaires à "vba appliquer macro toutes feuilles actives"