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 SubJ'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").selectou alors
With Sheets("PB")
.Columns("A:A").Select
end withDonc 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 WithBonjour 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 SubLa 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 SubGé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 SubA+
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!