Masquer certaines colonnes dans plusieurs feuilles
Bonjour,
Pour une manipulation que je dois répéter souvent et sur de nombreux fichiers, j'ai voulu créer une macro... C'est ma première macro, donc soyez indulgents
j'ai fais pas mal de recherches (et enregistré les macros pour voir comment cela fonctionne) pour faire les différentes actions, je pensais avoir fait un truc pas mal
mais le résultat n'est pas probant, les colonnes ne se masquent pas correctement sur toutes les feuilles.
Je met toute la macro ci-dessous, mais ce sont les points "03 Afficher toutes les colonnes" et "05 Masquer les colonnes" qui ne fonctionnent pas.
Le reste semble OK.
Malheureusement le fichier est totalement confidentiel et je ne peux l'envoyer, j'espère que vous pourrez m'aider avec uniquement le code que je vous recopie ci-dessous
Merci d'avance de vos réponses
Nicolas
Sub M01Devis()
' 01 Retirer protections
For n = 1 To Sheets.Count
Sheets(n).Unprotect ("**")
Next n
' 02 Afficher tous les onglets
Dim Onglets As Worksheet
For Each Onglets In Worksheets
Onglets.Visible = True
Next Onglets
' 03 Afficher toutes les colonnes
Sheets(Array("GO", "TO", "MEX", "PL", "CA", "MIN", "SA", "EL", "CH", "CUI", "AB", "FF", "FI", "OPT")).Select
Columns("A:Y").EntireColumn.Hidden = False
' 04 Masquer les lignes vides
Sheets("GO").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("TO").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("MEX").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("PL").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("CA").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("MIN").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("SA").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("EL").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("CH").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("CUI").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("AB").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("FF").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("FI").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
Sheets("OPT").Select
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1
ActiveSheet.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
' 05 Masquer les colonnes
Sheets(Array("GO", "TO", "MEX", "PL", "CA", "MIN", "SA", "EL", "CH", "CUI", "AB", "FF", "FI", "OPT")).Select
Columns("B:B,H:H").EntireColumn.Hidden = True
Sheets("CON").Select
' 06 Remettre protections
For n = 1 To Sheets.Count
Sheets(n).Protect ("**"), DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowInsertingRows:=True, AllowDeletingRows:=True, AllowFiltering:=True
Next n
End Sub
Bonjour ngielen, le forum,
ce sont les points "03 Afficher toutes les colonnes" et "05 Masquer les colonnes" qui ne fonctionnent pas
A tester:
Option Explicit
Dim Feuilles, F
Sub Démasquer() 'point 03
Feuilles = Array("GO", "TO", "MEX", "PL", "CA", "MIN", "SA", "EL", "CH", "CUI", "AB", "FF", "FI", "OPT")
For Each F In Feuilles
Sheets(F).Range("A:Y").EntireColumn.Hidden = False
Next F
End Sub
Sub masquer() 'point 05
Feuilles = Array("GO", "TO", "MEX", "PL", "CA", "MIN", "SA", "EL", "CH", "CUI", "AB", "FF", "FI", "OPT")
For Each F In Feuilles
Sheets(F).Range("B:B,H:H").EntireColumn.Hidden = True
Next F
Sheets("CON").Select
End Sub
Cordialement,
Bonjour,
Essaie ceci et redis moi.
Ton code est un peu confus.
Option Explicit
' 01 Retirer protections
' 02 Afficher tous les onglets
' 03 Afficher toutes les colonnes
' 04 Masquer les lignes vides (filtrer)
' 05 Masquer les colonnes
' 06 Remettre protections
Public Sub M01Devis()
Dim wb As Workbook, ws As Worksheet
Set wb = ActiveWorkbook
For Each ws In wb.Worksheets
' 01
ws.Unprotect ("**")
' 02
ws.Visible = -1
Select Case ws.Name
Case "GO", "TO", "MEX", "PL", "CA", "MIN", "SA", "EL", "CH", "CUI", "AB", "FF", "FI", "OPT":
With ws
' 03
.Columns("A:Y").EntireColumn.Hidden = False
' 04
.Range("$G$1:$G$5000").AutoFilter Field:=1
.Range("$G$1:$G$5000").AutoFilter Field:=1, Criteria1:="<>"
' 05
.Columns("B:B,H:H").EntireColumn.Hidden = True
End With
Case Else:
End Select
Next ws
' 06
For Each ws In wb.Worksheets
ws.Protect ("**"), _
userinterfaceonly:=True, _
AllowFormattingCells:=True, _
AllowFormattingColumns:=True, _
AllowInsertingRows:=True, _
AllowDeletingRows:=True, _
AllowFiltering:=True
Next ws
End SubBonjour ngielen, le forum,
Je te propose ce fichier Excel :
⚠ Le mot de passe est : pwd
Alt F11 pour voir le code VBA, puis revenir sur Excel
Merci de me donner ton avis.
Cordialement,
dhany
Super,
merci à vous 3 !!! des heures que je cherchais!
les 3 solutions semblent marcher!!!
la première est dans le style que j'avais fait et répond parfaitement à ce que je voulais. Merci xorsankukai
la seconde est hyper propre et plus efficace que ma manière de faire. Merci Jean-Eric
et la dernière regroupe ces deux qualités car en tant que débutant, elle améliore la vitesse d'exécution tout en étant plus facilement compréhensible et donc adaptable par moi. Comme j'ai plusieurs macros à faire à partir de cet exemple et afin de me débrouiller un maximum seul, je repars avec cette dernière version. Merci Dhany
Enfin, ce fichier tourne comme je le souhaitais.
Merci pour vos réponses rapides et efficaces!
Nicolas
Merci Nicolas pour ton retour !!!
dhany