[Résolu] Macro Masquer colonnes avec boucle et conditions multiples

coco4

XLDnaute Nouveau
Bonjour à tous,

après des heures de recherche dans de nombreux forums, sans trouver de réponse à mon problème, j'ai décidé de sauter le pas et de poster mon premier message sur ce forum.

Dans un fichier Excel, je souhaite masquer via une macro des colonnes sur tous les onglets, nombre et noms imprévisibles et variables, sauf sur 2 d'entre eux, à savoir "Liste" et "Paramétrage".

De plus, selon les points de vue choisis dans l'onglet "Paramétrage", les colonnes à masquer ne sont pas les mêmes.

Au départ, j'avais nommé chaque feuille où le colonnage doît être appliqué dans mon code et celui fonctionnait très bien.
Dans un but de simplication et puisque le nombre d'onglets sera finalement variable, j'ai décidé d'intégrer une boucle.

Problème, la macro ne s'exécute que sur l'onglet actif, voire même sur Paramétrage si je suis positionnée dessus.

Précision pour le code ci-dessous: le nom "Phase" a bien été déclaré dans le fichier via le Gestionnaire de nom.

Merci d'avance pour votre aide.

Code:
Sub Colonnage()

Application.ScreenUpdating = False

Dim Sh As Worksheet

For Each Sh In Worksheets

If Sh.Name <> "Liste" Or Sh.Name <> "Paramétrage" Then

'Colonnes à masquer si PHASE = ""
If Worksheets("Paramétrage").Range("PHASE").Value = "" Then
Call ToutAfficher

'Colonnes à masquer si PHASE = ESTIME
ElseIf Worksheets("Paramétrage").Range("PHASE").Value = "ESTIME" Then
Union(Range("E1"), Range("U1:Z1")).Select
Selection.EntireColumn.Hidden = True

'Colonnes à masquer si PHASE = BUDGET
ElseIf Worksheets("Paramétrage").Range("PHASE").Value = "BUDGET" Then
Union(Range("E1"), Range("O1:Q1"), Range("U1:Z1")).Select
Selection.EntireColumn.Hidden = True

'Colonnes à masquer si PHASE = REEL
ElseIf Worksheets("Paramétrage").Range("PHASE").Value = "REEL" Then
Union(Range("E1"), Range("O1:Z1")).Select
Selection.EntireColumn.Hidden = True

End If
End If
Next Sh

Application.ScreenUpdating = True


End Sub

Sub ToutAfficher()

Dim Sh As Worksheet

For Each Sh In Worksheets

If Sh.Name <> "Liste" Or Sh.Name <> "Paramétrage" Then

Sh.Columns("D:Z").Hidden = False

End If
Next
End Sub
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Macro Masquer colonnes avec boucle et conditions multiples

Bonjour coco4 et bienvenu sur le forum, Une proposition en pièce jointe, il faut utiliser And au lieu de Or pour le choix des feuilles et préciser la feuille ou l'on doit masquer les colonnes. Avec un "Select Case" le code est plus clair. Le code est dans le code de la feuille. Cordialement
 

Pièces jointes

  • Classeur4.xls
    14 KB · Affichages: 104
  • Classeur4.xls
    14 KB · Affichages: 119
  • Classeur4.xls
    14 KB · Affichages: 112
Dernière édition:

coco4

XLDnaute Nouveau
Re : Macro Masquer colonnes avec boucle et conditions multiples

Bonjour Efgé,

que dire à part MERCI et surtout quelle rapidité!

Le code fonctionne parfaitement, je n'ai pourtant pas préciser les feuilles où les colonnes doivent être masquées puisque comme dit précédemment le nombre de feuilles est variable. Toutefois en sachant que la macro doit s'exécuter sur tous les onglets sauf 2 d'entre eux, qui sont bien exclus dans la macro, cela tourne correctement. --> Effectivement le AND est beaucoup logique que le OR!

Sans conteste le code est plus clair, avec le nettoyage des .Select et également le Select Case (que je n'avais jamais utilisé et qui, je pense, me sera bien utile à l'avenir).

Je vois où se posait un des problèmes majeurs: Union(Sh.Range auquel je n'avais pas pensé --> j'avais bien essayé Sh.Union(Range mais cela ne fonctionnait pas.

Merci encore
Bonne fin de journée
 

Discussions similaires

Statistiques des forums

Discussions
312 023
Messages
2 084 716
Membres
102 637
dernier inscrit
TOTO33000