Macro exécution auto spécifique par feuille

Bonjour à tous et merci d'avance pour l'aide que vous pourrez apporter à une néophyte du VBA dans mon genre...

J'ai un tableau excel avec beaucoup de lignes et de colonnes que je dois partager et protéger contre la modification.

Afin de le rendre plus lisible, je souhaite que certaine colonnes et lignes soient masquées par défaut à l'ouverture et à l'enregistrement du fichier. Ainsi, on clique sur un bouton pour afficher le détail si nécessaire et dès que l'on enregistre, on retrouve le tableau avec sa forme condensée initiale.

Je ne peux pas malheureusement pas vous transmettre le fichier car c'est pour mon boulot et qu'il comporte des données confidentielles.

J'ai réussi à faire les boutons pour afficher les colonnes/lignes masquées et masquer les colonnes/lignes de ma première feuille à l'ouverture et l'enregistrement du fichier, mais je n'arrive pas à spécifier les colonnes/lignes à masquer pour ma deuxième feuille (ce ne sont pas les mêmes colonnes/lignes qu'il faut masquer que sur ma première feuille bien sur).

J'ai aussi une page d'accueil sur laquelle on se positionne à chaque ouverture et enregistrement du fichier. Cette dernière ne doit pas avoir de colonnes/lignes maquées comme les autres feuilles.

Donc, j'ai essayé ceci pour la macro à l'enregistrement et le second "With" ne fonctionne pas. Je ne l'utilise probablement pas comme il faudrait. Ci-dessous une partie de code dans "ThisWorkbook".

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim Ws As Worksheet
Application.ScreenUpdating = False
For Each Ws In Worksheets
    Ws.Select

If Ws.FilterMode Then Ws.ShowAllData

    Range("A1").Select

Next Ws

With Sheets("NPD")
    Rows("4:18").Select
    Selection.EntireRow.Hidden = True
    Columns("I:AC").Select
    Selection.EntireColumn.Hidden = True
    Columns("AE:AV").Select
    Selection.EntireColumn.Hidden = True
    Columns("AX:BU").Select
    Selection.EntireColumn.Hidden = True
    Columns("BW:CS").Select
    Selection.EntireColumn.Hidden = True
    Columns("CU:DW").Select
    Selection.EntireColumn.Hidden = True
    Columns("DY:EW").Select
    Selection.EntireColumn.Hidden = True
    Columns("EY:GA").Select
    Selection.EntireColumn.Hidden = True
    Columns("GC:HF").Select
    Selection.EntireColumn.Hidden = True
    Columns("HH:HZ").Select
    Selection.EntireColumn.Hidden = True
End With

With Sheets("PB")
    Rows("6:22").Select
    Selection.EntireRow.Hidden = True
    Columns("G:AB").Select
    Selection.EntireColumn.Hidden = True
End With

    Worksheets("Accueil").Activate

End Sub

J'ai bien cherché partout mais là, je dois avouer que je suis bloquée... HELP!

Tes with ne servent à rien si tu ne mets pas de points!

En gros le premier marche pck c'est la feuille active mais pour les autres pas...

Quand tu veux te reférer à la colonne A du sheet PB tu vas faire:

Sheets("PB").Columns("A:A").select

ou alors

With Sheets("PB")
.Columns("A:A").Select
end with

Donc mets des points comme ceci

With Sheets("PB")
    .Rows("6:22").Select
    Selection.EntireRow.Hidden = True
    .Columns("G:AB").Select
    Selection.EntireColumn.Hidden = True
End With

Bonjour et merci pour ton aide EngueEngue.

J'ai essayé ton conseil et j'obtiens le message d'erreur :

"Erreur d'exécution '1004':

La méthode Select de la classe Range a échoué."

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim Ws As Worksheet
Application.ScreenUpdating = False
For Each Ws In Worksheets
    Ws.Select

If Ws.FilterMode Then Ws.ShowAllData

    Range("A1").Select

Next Ws

With Sheets("NPD")
.Rows("4:18").Select
    Selection.EntireRow.Hidden = True
    .Columns("I:AC").Select
    Selection.EntireColumn.Hidden = True
    .Columns("AE:AV").Select
    Selection.EntireColumn.Hidden = True
    .Columns("AX:BU").Select
    Selection.EntireColumn.Hidden = True
    .Columns("BW:CS").Select
    Selection.EntireColumn.Hidden = True
    .Columns("CU:DW").Select
    Selection.EntireColumn.Hidden = True
    .Columns("DY:EW").Select
    Selection.EntireColumn.Hidden = True
    .Columns("EY:GA").Select
    Selection.EntireColumn.Hidden = True
    .Columns("GC:HF").Select
    Selection.EntireColumn.Hidden = True
    .Columns("HH:HZ").Select
    Selection.EntireColumn.Hidden = True
End With

With Sheets("PB")
    .Rows("6:22").Select
    Selection.EntireRow.Hidden = True
    .Columns("G:AB").Select
    Selection.EntireColumn.Hidden = True
End With

    Worksheets("Accueil").Activate

End Sub

La macro ne fonctionne plus sur la première feuille.

Tu essaies de selectionner quelque chose qui n'est pas actif...

Pour mettre une pomme dans une boite:

Soit tu selectionnes la pomme, tu selectionnes la boite, tu selectionnes la propriété trou de la boite puis tu lui affectes la pomme.

Soit tu prends la pomme et tu la mets dans ta boite.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim Ws As Worksheet
Application.ScreenUpdating = False
For Each Ws In Worksheets
If Ws.FilterMode Then Ws.ShowAllData
Next Ws

With Sheets("NPD")
.Rows("4:18").EntireRow.Hidden = True
 .Columns("I:AC").EntireColumn.Hidden = True
    .Columns("AE:AV").EntireColumn.Hidden = True
    .Columns("AX:BU").EntireColumn.Hidden = True
    .Columns("BW:CS").EntireColumn.Hidden = True
    .Columns("CU:DW").EntireColumn.Hidden = True
    .Columns("DY:EW").EntireColumn.Hidden = True
    .Columns("EY:GA").EntireColumn.Hidden = True
    .Columns("GC:HF").EntireColumn.Hidden = True
    .Columns("HH:HZ").EntireColumn.Hidden = True
End With

With Sheets("PB")
    .Rows("6:22").EntireRow.Hidden = True
    .Columns("G:AB").EntireColumn.Hidden = True
End With

 Worksheets("Accueil").Activate

End Sub

Génial! Ca fonctionne! Merci EngueEngue!

Bonjour,

On peut même supprimer les >EntireRow, EntireColumn

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Ws As Worksheet
Application.ScreenUpdating = False
For Each Ws In Worksheets
If Ws.FilterMode Then Ws.ShowAllData
    Range("A1").Activate

Next Ws
With Sheets("NPD")
    .Rows("4:18").Hidden = True
    .Columns("I:AC").Hidden = True
    .Columns("AE:AV").Hidden = True
    .Columns("AX:BU").Hidden = True
    .Columns("BW:CS").Hidden = True
    .Columns("CU:DW").Hidden = True
    .Columns("DY:EW").Hidden = True
    .Columns("EY:GA").Hidden = True
    .Columns("GC:HF").Hidden = True
    .Columns("HH:HZ").Hidden = True
End With

With Sheets("PB")
    .Rows("6:22").Hidden = True
    .Columns("G:AB").Hidden = True
End With

    Worksheets("Acceuil").Activate

End Sub

A+

Merci galopin01!

Je suis sûre en effet que mon code n'est pas du tout optimisé mais bon j'ai copié des bouts à droite à gauche depuis des forums...

Heureusement que des personnes comme vous partagent leurs connaissances!

Rechercher des sujets similaires à "macro execution auto specifique feuille"