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

18 réponses
Avatar
Chimilmili Blick
Bonjour,

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

En d'autres terme et p.ex si la valeur B4 est =E9gale =E0 "", la colonne B =
doit =EAtre/se masquer, si par contre la valeur B4 est =E9gale =E0 une vale=
ur (p.ex. "A" ou "6") la colonne doit se d=E9masquer.

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

http://cjoint.com/?DIwlqP9ebye=A0

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

Chimilimili

10 réponses

1 2
Avatar
Jacky
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" a écrit dans le message de news:

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
Avatar
Jacky
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
Avatar
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 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
Avatar
Jacky
Re...
Ou sont placées les cellules de saisie ?

--
Salutations
JJ


"Chimilmili Blick" a écrit dans le message de news:

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
Avatar
Jacky
Re...
Regarde si cela convient.
http://cjoint.com/?DIwsS4GxLnc

--
Salutations
JJ


"Chimilmili Blick" a écrit dans le message de news:

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
Avatar
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), 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
Avatar
Jacky
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" a écrit dans le message de news:

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
Avatar
MichD
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
'------------------------------------
Avatar
Chimilimili Blick
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
Avatar
Jacquouille
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
1 2