Masquer Colonnes si cellule contient un mot/ d'après formule

Résolu/Fermé
dadou - Modifié par pijaku le 18/07/2014 à 13:20
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 21 juil. 2014 à 11:01
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:

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:

7 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
18 juil. 2014 à 13:26
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 :

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)


0
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 ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
18 juil. 2014 à 13:49
Je crois que tu est un peu perdu avec Target...

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
0
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 ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
18 juil. 2014 à 14:37
Tu n'aurais pas pu le dire plus tôt.................


Il suffit d'affecter une macro à ta case à cocher (clic droit sur la case et Affecter une macro)
dont voici le code :
Sub Caseàcocher1_Cliquer()
Columns("B:D").Hidden = IIf([A1] = "oui", True, False)
End Sub
0
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
18 juil. 2014 à 14:59
Ben oui.
 Sub Caseàcocher1_Cliquer()
Columns("B:D").Hidden = IIf([A2] = "VRAI", True, False)
End Sub
0
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.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
18 juil. 2014 à 16:06
Pas testé...
Ceci fonctionne :
Sub Caseàcocher1_Cliquer()
Columns("B:D").Hidden = IIf([A2] = True, True, False)
End Sub


Ou plus simple encore :
Sub Caseàcocher1_Cliquer()
Columns("B:D").Hidden = [A2]
End Sub
0
J'ai réussi à le faire pour ma 50aine de case, maintenant je peux créer une case à cocher pour cocher/décocher toutes ces cases ?

J'ai essayé le prendre la plage des 50cases où s'est marqué VRAI/FAUX mais ca décoche uniquement la 1ere case..

Un code VBA ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
21 juil. 2014 à 11:01
Bonjour,

Cette question est ici Hors Sujet.
Il convient de la reformuler, soit en cherchant si elle n'a pas déjà été posée auparavant, soit en créant un nouveau sujet.
0