Macro de masquage/démascage de colonne en fonction d'une valeur prise

Le
Chimilmili Blick
Bonjour,

Je souhaiterais, via une macro, pouvoir démasquer/masquer automatiquement=
des colonnes en fonction qu'une valeur est présente en ligne 4 de la col=
onne ou pas.

En d'autres terme et p.ex si la valeur B4 est égale à "", la colonne B =
doit être/se masquer, si par contre la valeur B4 est égale à une vale=
ur (p.ex. "A" ou "6") la colonne doit se démasquer.

Ci-joint un classeur qui permettra peut-être de mieux comprendre ce que j=
e souhaite.

http://cjoint.com/?DIwlqP9ebye 

Mille mercis à celui/celle qui pourra m'aider à trouver le code associ=
é.

Chimilimili
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacky
Le #26310861
Bonjour,
C'est voulu que l'on ne tienne pas compte de la cellule B5 ???
En retour le classeur avec code dans la feuille1
http://cjoint.com/?DIwnkVSDDfE
--
Salutations
JJ


"Chimilmili Blick"
Bonjour,

Je souhaiterais, via une macro, pouvoir démasquer/masquer automatiquement des colonnes en fonction qu'une
valeur est présente en ligne 4 de la colonne ou pas.

En d'autres terme et p.ex si la valeur B4 est égale à "", la colonne B doit être/se masquer, si par contre la
valeur B4 est égale à une valeur (p.ex. "A" ou "6") la colonne doit se démasquer.

Ci-joint un classeur qui permettra peut-être de mieux comprendre ce que je souhaite.

http://cjoint.com/?DIwlqP9ebye

Mille mercis à celui/celle qui pourra m'aider à trouver le code associé.

Chimilimili
Jacky
Le #26310862
Oupsss!!!
C'est l'inverse afficher s'il y a valeur
Modification (tien aussi compte de la colonne L)
http://cjoint.com/?DIwnAV8b6FR
--
Salutations
JJ
Chimilmili Blick
Le #26310907
Le lundi 22 septembre 2014 13:25:22 UTC+2, Jacky a écrit :
Oupsss!!!

C'est l'inverse afficher s'il y a valeur

Modification (tien aussi compte de la colonne L)

http://cjoint.com/?DIwnAV8b6FR

--

Salutations

JJ



Bonjour Jacky,
Merci beaucoup et bravo pour cette réponse. Cela est effectivement exacte ment ce que je recherche. Je dois maintenant pouvoir l'adapter à un class eur plus complexe dont les colonnes à cacher vont de la colonne J à AA.
La cellule vide/nonvide à tester se situe sur la ligne 3.

J'ai essayé d'adapter ton code comme suit :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
Columns("J:AA").Hidden = False
For i = 27 To 10 Step -1
Columns(i).Hidden = Cells(10, i) = ""
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Mais ça bogue ! Comprends-tu pourquoi ?

Merci d'avance pour ton aide.
Cordialement,
Chimilimili
Jacky
Le #26310916
Re...
Ou sont placées les cellules de saisie ?

--
Salutations
JJ


"Chimilmili Blick"
Le lundi 22 septembre 2014 13:25:22 UTC+2, Jacky a écrit :
Oupsss!!!

C'est l'inverse afficher s'il y a valeur

Modification (tien aussi compte de la colonne L)

http://cjoint.com/?DIwnAV8b6FR

--

Salutations

JJ



Bonjour Jacky,
Merci beaucoup et bravo pour cette réponse. Cela est effectivement exactement ce que je recherche. Je dois
maintenant pouvoir l'adapter à un classeur plus complexe dont les colonnes à cacher vont de la colonne J à AA.
La cellule vide/nonvide à tester se situe sur la ligne 3.

J'ai essayé d'adapter ton code comme suit :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
Columns("J:AA").Hidden = False
For i = 27 To 10 Step -1
Columns(i).Hidden = Cells(10, i) = ""
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Mais ça bogue ! Comprends-tu pourquoi ?

Merci d'avance pour ton aide.
Cordialement,
Chimilimili
Jacky
Le #26310946
Re...
Regarde si cela convient.
http://cjoint.com/?DIwsS4GxLnc

--
Salutations
JJ


"Chimilmili Blick"
Le lundi 22 septembre 2014 13:25:22 UTC+2, Jacky a écrit :
Oupsss!!!

C'est l'inverse afficher s'il y a valeur

Modification (tien aussi compte de la colonne L)

http://cjoint.com/?DIwnAV8b6FR

--

Salutations

JJ



Bonjour Jacky,
Merci beaucoup et bravo pour cette réponse. Cela est effectivement exactement ce que je recherche. Je dois
maintenant pouvoir l'adapter à un classeur plus complexe dont les colonnes à cacher vont de la colonne J à AA.
La cellule vide/nonvide à tester se situe sur la ligne 3.

J'ai essayé d'adapter ton code comme suit :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
Columns("J:AA").Hidden = False
For i = 27 To 10 Step -1
Columns(i).Hidden = Cells(10, i) = ""
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Mais ça bogue ! Comprends-tu pourquoi ?

Merci d'avance pour ton aide.
Cordialement,
Chimilimili
Chimilimili Blick
Le #26311127
Le lundi 22 septembre 2014 18:43:41 UTC+2, Jacky a écrit :
Re...

Regarde si cela convient.

http://cjoint.com/?DIwsS4GxLnc



--

Salutations

JJ



Salut Jacky,

Merci pour cette nouvelle solution qui est exactement ce que je recherche. Je n'arrive malheureusement pas à adapter le code a mon classeur source. Je ne peux pas poster ledit classeur car beaucoup trop lourd.
Je ne comprends d'ailleurs pas pourquoi il est si lourd (plus de 12Mo), mai s bon ça c'est un autre problème.
Je dois laisser ce sujet en suspend car j'y ai déjà passé déjà tr op de temps. J'y reviendrai en temps voulu.
Merci infiniment pour ton aide et les solutions proposées.
Cordialement,
Chimilimili
Jacky
Le #26311133
Re...
...Je ne comprends d'ailleurs pas pourquoi il est si lourd (plus de 12Mo)...
Pour faire maigrir un classeur, exécuter la macro proposée ici
http://jacxl.free.fr/cours_xl/cours_xl_jac.html#menage

--
Salutations
JJ


"Chimilimili Blick"
Le lundi 22 septembre 2014 18:43:41 UTC+2, Jacky a écrit :
Re...

Regarde si cela convient.

http://cjoint.com/?DIwsS4GxLnc



--

Salutations

JJ



Salut Jacky,

Merci pour cette nouvelle solution qui est exactement ce que je recherche. Je n'arrive malheureusement pas à
adapter le code a mon classeur source. Je ne peux pas poster ledit classeur car beaucoup trop lourd.
Je ne comprends d'ailleurs pas pourquoi il est si lourd (plus de 12Mo), mais bon ça c'est un autre problème.
Je dois laisser ce sujet en suspend car j'y ai déjà passé déjà trop de temps. J'y reviendrai en temps voulu.
Merci infiniment pour ton aide et les solutions proposées.
Cordialement,
Chimilimili
MichD
Le #26311139
Bonjour,

Pour la lourdeur de ton fichier, tu peux utiliser cette macro :


'------------------------------------
Sub test()
Dim Sh As Worksheet, DerLig As Long, DerCol As Integer
Dim ModeCalcul As String

Application.ScreenUpdating = False
ModeCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
On Error Resume Next
For Each Sh In ThisWorkbook.Worksheets
With Sh
If Not IsEmpty(.UsedRange) Then
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
.Range(.Cells(1, DerCol + 1), .Cells(.Rows.Count, .Columns.Count)).Clear
.Range(.Cells(1, DerCol + 1), .Cells(.Rows.Count, .Columns.Count)).Delete
.Range(.Cells(DerLig + 1, 1), .Cells(.Rows.Count, .Columns.Count)).Clear
.Range(.Cells(DerLig + 1, 1), .Cells(.Rows.Count, .Columns.Count)).Delete
End If
End With
If Err <> 0 Then Err = 0
Next
Application.Calculation = ModeCalcul
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
'------------------------------------
Chimilimili Blick
Le #26311316
Le mardi 23 septembre 2014 16:08:02 UTC+2, MichD a écrit :
Bonjour,



Pour la lourdeur de ton fichier, tu peux utiliser cette macro :





'------------------------------------

Sub test()

Dim Sh As Worksheet, DerLig As Long, DerCol As Integer

Dim ModeCalcul As String



Application.ScreenUpdating = False

ModeCalcul = Application.Calculation

Application.Calculation = xlCalculationManual

Application.EnableEvents = False

On Error Resume Next

For Each Sh In ThisWorkbook.Worksheets

With Sh

If Not IsEmpty(.UsedRange) Then

DerLig = .Cells.Find(What:="*", _

LookIn:=xlFormulas, _

SearchOrder:=xlByRows, _

SearchDirection:=xlPrevious).Row



DerCol = .Cells.Find(What:="*", _

LookIn:=xlFormulas, _

SearchOrder:=xlByColumns, _

SearchDirection:=xlPrevious).Column

.Range(.Cells(1, DerCol + 1), .Cells(.Rows.Count, .Columns.Co unt)).Clear

.Range(.Cells(1, DerCol + 1), .Cells(.Rows.Count, .Columns.Co unt)).Delete

.Range(.Cells(DerLig + 1, 1), .Cells(.Rows.Count, .Columns.Co unt)).Clear

.Range(.Cells(DerLig + 1, 1), .Cells(.Rows.Count, .Columns.Co unt)).Delete

End If

End With

If Err <> 0 Then Err = 0

Next

Application.Calculation = ModeCalcul

Application.EnableEvents = True

Application.ScreenUpdating = True

End Sub

'------------------------------------



Bonjour MichD,

Waow ! Avec ton précieux code je suis passé de 12.7 Mo à 423k !

Mais où sont passés tout ces kilos de bits ?

Je pourrai poster mon fichier source dès que j'aurai un petit moment pour cela.

Merci infiniment et @+. Bien cordialement,

Chimilimili Blick
Jacquouille
Le #26311327
Comme disait Colombo : "Si ma femme savait cela..." -))

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Chimilimili Blick" a écrit dans le message de groupe de discussion :


Le mardi 23 septembre 2014 16:08:02 UTC+2, MichD a écrit :
Bonjour,



Pour la lourdeur de ton fichier, tu peux utiliser cette macro :





'------------------------------------

Sub test()

Dim Sh As Worksheet, DerLig As Long, DerCol As Integer

Dim ModeCalcul As String



Application.ScreenUpdating = False

ModeCalcul = Application.Calculation

Application.Calculation = xlCalculationManual

Application.EnableEvents = False

On Error Resume Next

For Each Sh In ThisWorkbook.Worksheets

With Sh

If Not IsEmpty(.UsedRange) Then

DerLig = .Cells.Find(What:="*", _

LookIn:=xlFormulas, _

SearchOrder:=xlByRows, _

SearchDirection:=xlPrevious).Row



DerCol = .Cells.Find(What:="*", _

LookIn:=xlFormulas, _

SearchOrder:=xlByColumns, _

SearchDirection:=xlPrevious).Column

.Range(.Cells(1, DerCol + 1), .Cells(.Rows.Count,
.Columns.Count)).Clear

.Range(.Cells(1, DerCol + 1), .Cells(.Rows.Count,
.Columns.Count)).Delete

.Range(.Cells(DerLig + 1, 1), .Cells(.Rows.Count,
.Columns.Count)).Clear

.Range(.Cells(DerLig + 1, 1), .Cells(.Rows.Count,
.Columns.Count)).Delete

End If

End With

If Err <> 0 Then Err = 0

Next

Application.Calculation = ModeCalcul

Application.EnableEvents = True

Application.ScreenUpdating = True

End Sub

'------------------------------------



Bonjour MichD,

Waow ! Avec ton précieux code je suis passé de 12.7 Mo à 423k !

Mais où sont passés tout ces kilos de bits ?

Je pourrai poster mon fichier source dès que j'aurai un petit moment pour
cela.

Merci infiniment et @+. Bien cordialement,

Chimilimili Blick


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Publicité
Poster une réponse
Anonyme