Masquer des colonnes différentes
Bonjour à toutes et à tous,
j'ai pas pu trouver de problème similaire au mien malgré la générosité des sujets sur le masquage des colonnes ou des lignes.
Aussi je vous sollicite pour trouver une solution.
J'ai un questionnaire dans lequel il faut saisir les informations d'un dossier par ligne.
En fonction du résultat du dossier , colonne F, l'utilisateur doit saisir des informations dans certaines colonnes mais pas dans les autres.
Il y a 4 possibilités de résultat en F à sélectionner dans une liste.
Si 1, alors on doit saisir dans colonnes L à N et pas les autres qu'il faut donc masquer.
Si 2, alors on doit saisir dans colonnes P à Z et pas les autres qu'il faut masquer.
Si 3, alors on doit saisir dans colonnes AA à AB et pas les autres qu'il faut masquer.
Si 4, alors on doit saisir dans colonnes AC à AF et pas les autres qu'il faut masquer.
J'ai réussi à le faire mais ca ne fonctionne que pour la première ligne (6).
Le fait est que le fichier peut contenir beaucoup de lignes... minimum 561, soit autant de dossiers.
Dès que je passe à la seconde ligne ou suivante, ca bug et je ne sais pas quoi utiliser pour dire que ca doit masquer les colonnes au changement de valeurs/résultat en colonne F.
Merci pour votre aide.
Bonjour Dadoche, bonjour le forum,
Pourquoi une boucle puisque tu travaille ligne par ligne ?!... Je ferais plutôt comme ça :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [Range("F6:F566")]) Is Nothing Then
Select Case Target.Value
Case "1 - OK"
Range("O6:AF566").EntireColumn.Hidden = True
Range("L6:N566").EntireColumn.Hidden = False
Case "2 - KO"
Range("L6:N566").EntireColumn.Hidden = True
Range("AA6:AF566").EntireColumn.Hidden = True
Range("O6:Z566").EntireColumn.Hidden = False
Case "3 - attente"
Range("L6:Z566").EntireColumn.Hidden = True
Range("AC6:AF566").EntireColumn.Hidden = True
Range("AA6:AB566").EntireColumn.Hidden = False
Case "4 - autre"
Range("L6:AB566").EntireColumn.Hidden = True
Range("AC6:AF566").EntireColumn.Hidden = False
Case Else
Range("L6:AF566").EntireColumn.Hidden = False
End Select
End If
End Sub
Salut ThauThème,
mille mercis pour ta réponse. Effectivement ta solution est la bonne j'aurai dû utiliser le "select case".
Ca fonctionne bien en ajoutant en objet le nom de la feuille.
Private Sub Worksheet_Change(ByVal Target As Range)
Set LaFeuille = Worksheets("2018")
If Not Intersect(Target, LaFeuille.Range("F6:F566")) Is Nothing Then
Select Case Target.Value
Case "1 - OK"
LaFeuille.Range("O6:AF566").EntireColumn.Hidden = True
LaFeuille.Range("L6:N566").EntireColumn.Hidden = False
Case "2 - KO"
LaFeuille.Range("L6:N566").EntireColumn.Hidden = True
LaFeuille.Range("AA6:AF566").EntireColumn.Hidden = True
LaFeuille.Range("O6:Z566").EntireColumn.Hidden = False
Case "3 - attente"
LaFeuille.Range("L6:Z566").EntireColumn.Hidden = True
LaFeuille.Range("AC6:AF566").EntireColumn.Hidden = True
LaFeuille.Range("AA6:AB566").EntireColumn.Hidden = False
Case "4 - autre"
LaFeuille.Range("L6:AB566").EntireColumn.Hidden = True
LaFeuille.Range("AC6:AF566").EntireColumn.Hidden = False
Case Else
LaFeuille.Range("L6:AF566").EntireColumn.Hidden = False
End Select
End If
End Sub
Si ce peut aider d'autres personnes...
Bonne journée à toi et aux autres.
Re,
Ca fonctionne bien en ajoutant en objet le nom de la feuille.
Difficile de le deviner, cet onglet n'apparaît ni dans ton code ni dans ton fichier !... Toutefois si c'est l'onglet qui contient la macro événementielle Change, cette précision n'est pas nécessaire...
Merci pour la précision. Il me l'a demandé puisque j'ai un autre onglet masqué en fait.
Sur mon fichier officiel j'ai meme protégé la feuille et il faut que je rentre en dure le mdp dans le code...
pas très sécure mais pas le choix.