Masquer Colonnes si cellule contient un mot/ d'après formule
Résolu
dadou
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Suite à de nombreuses recherches je ne trouve pas mon bonheur:
Je souhaite masquer des colonnes si une cellule contient un mot d'apres un formule et non pas en tapant directement le mot.
Par exemple si dans ma cellule A1 le resultat de ma formule me donne oui (par ex : =Si(A2=VRAI;"oui";"non") mes colonnes B C D sont masquées.
J'ai trouvé ce code là mais il marche seulement si je tape oui à la main et non par une formule:
Donc je pense que je suis pas loin non plus..
Suite à de nombreuses recherches je ne trouve pas mon bonheur:
Je souhaite masquer des colonnes si une cellule contient un mot d'apres un formule et non pas en tapant directement le mot.
Par exemple si dans ma cellule A1 le resultat de ma formule me donne oui (par ex : =Si(A2=VRAI;"oui";"non") mes colonnes B C D sont masquées.
J'ai trouvé ce code là mais il marche seulement si je tape oui à la main et non par une formule:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A1")) Is Nothing Then Columns("B:D").Hidden = IIf(Target = "oui", True, False) End If End Sub
Donc je pense que je suis pas loin non plus..
A voir également:
- Masquer Colonnes si cellule contient un mot/ d'après formule
- Formule moyenne excel plusieurs colonnes - Guide
- Formule si et - Guide
- Formule somme excel colonne - Guide
- Formule sheet si contient ✓ - Forum Excel
- Excel cellule couleur si condition texte - Guide
7 réponses
Bonjour,
La procédure ne se déclenche pas car la cellule A1 ne change pas. Elle reste avec sa formule.
Si tu veux, dans ton exemple, que WorkSheet_Change se déclenche, il te faut traiter le changement de cellule, non pas dans A1, mais dans A2...
Comme ceci :
Ou alors utilise un autre événement de ta feuille.
Par exemple :
La procédure ne se déclenche pas car la cellule A1 ne change pas. Elle reste avec sa formule.
Si tu veux, dans ton exemple, que WorkSheet_Change se déclenche, il te faut traiter le changement de cellule, non pas dans A1, mais dans A2...
Comme ceci :
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A2")) Is Nothing Then '<====ICI A2 au lieu de A1 Columns("B:D").Hidden = IIf(Target.Offset(-1, 0) = "oui", True, False) '<== ICI ajout de l'Offset pour "cibler" A1 End If End Sub
Ou alors utilise un autre événement de ta feuille.
Par exemple :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Merci pour ta réponse assez rapide !
Cependant en changeant la 1ere phrase je n'y arrive pas, quel serait ton code en "entier" pour que l'exemple que j'ai donné fonctionne ?
Cependant en changeant la 1ere phrase je n'y arrive pas, quel serait ton code en "entier" pour que l'exemple que j'ai donné fonctionne ?
Je crois que tu est un peu perdu avec Target...
Dans l'événement
A partir de là, ta procédure fonctionne avec le code que je t'ai donné :
Dans l'événement
Ok?
Donc pour ton cas, supposons que la cellule "quittée" est A2, cela donne :
Note : les codes sont identiques car Target est la même. Mais on pourrait également supposer que la Target du second exemple soit B26. Auquel cas :
Dans l'événement
WorkSheet_Change, que tu as choisi, Target est la cellule dont tu changes la valeur par saisie. Autrement dit, avec une formule en A1 : =Si(A2=VRAI;"oui";"non"), la cellule susceptible de changer de valeur par saisie est la cellule A2.
A partir de là, ta procédure fonctionne avec le code que je t'ai donné :
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A2")) Is Nothing Then '<====ICI A2 au lieu de A1 Columns("B:D").Hidden = IIf(Target.Offset(-1, 0) = "oui", True, False) '<== ICI ajout de l'Offset pour "cibler" A1 End If End Sub
Dans l'événement
Worksheet_SelectionChange, Target correspond à la cellule que tu quittes, soit en validant par Entrée, soit par Tab, soit... Elle se déclenche à chaque fois que tu sélectionnes une autre cellule. Et Target est la cellule quittée.
Ok?
Donc pour ton cas, supposons que la cellule "quittée" est A2, cela donne :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A2")) Is Nothing Then '<====ICI A2 au lieu de A1 Columns("B:D").Hidden = IIf(Target.Offset(-1, 0) = "oui", True, False) '<== ICI ajout de l'Offset pour "cibler" A1 End If End Sub
Note : les codes sont identiques car Target est la même. Mais on pourrait également supposer que la Target du second exemple soit B26. Auquel cas :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("B26")) Is Nothing Then '<====ICI B26 au lieu de A1 Columns("B:D").Hidden = IIf(Target.Offset(-25, -1) = "oui", True, False) '<== ICI ajout de l'Offset pour "cibler" A1 End If End Sub
Merci de ton éclairement, j'avais pas vu ton code dans son intégralité.
Cependant, le VRAI correspond à une "case à cocher" donc c'est pas une donner par saisie en faite ... (quand je décoche ça devient donc FAUX)
Au final, mon idée est de masquer les colonnes BCD quand je coche cette case.
Je pensais que faisant une formule SI toute bête et un code VBA ca pouvait le faire ..
Mais au final je n'ai aucune saisie dans mon fichier.
Ca devient compliquer ?
Cependant, le VRAI correspond à une "case à cocher" donc c'est pas une donner par saisie en faite ... (quand je décoche ça devient donc FAUX)
Au final, mon idée est de masquer les colonnes BCD quand je coche cette case.
Je pensais que faisant une formule SI toute bête et un code VBA ca pouvait le faire ..
Mais au final je n'ai aucune saisie dans mon fichier.
Ca devient compliquer ?
PARFAIT !!! Merci beaucoup
On peut avoir plus simple si on le fait avec la cellule A2 où se trouve VRAI ou FAUX en fonction de la case cochée ou non ?
Ca évite de créer une cellule avec une FORMULE SI ?
On peut avoir plus simple si on le fait avec la cellule A2 où se trouve VRAI ou FAUX en fonction de la case cochée ou non ?
Ca évite de créer une cellule avec une FORMULE SI ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ca ne veut pas marcher ! j'avais essayer ...
Pas grave je garde la cellule intermédaire avec la formule SI.
Merci bien, bonne journée.
Pas grave je garde la cellule intermédaire avec la formule SI.
Merci bien, bonne journée.