[Résolu]Comment masquer une ligne sous VBA?

Neo37

XLDnaute Junior
Bonjour,

J'ai élaboré une vrai usine à gaz en fichier Excel pour mon travail. Avec quelques aide du Forum, merci encore au passage :D

Mon soucis est qu'il est entre autre utilisé par plusieurs personnes, en même temps même des fois, et par des gens pas forcément à l'aise en informatique, et faisant des bourdes même sans s'en rendre compte.
Notament en me modifiant des mise en pages, faisant apparaitre des lignes masquées.
Donc à part éradiquer les moins éveillés avec une souris, je suis en quête d'une solution moins radicale.

Donc je suis parti encore en croisade sous VBA, pour remasquer automatiquement mes lignes interdites:
Dans "L'object" de la feuille concernée:

Code:
Sub Worksheet_selectionchange(ByVal Target As Range)

Rows(9).EntireRow.Hidden = True
Rows(10).EntireRow.Hidden = True

End Sub

Seulement voila, la parti "Worksheet_selectionchange" n'est pas vraiment idéal je trouve.
Y a-t-il une fonction qui détecte un changement de mise en forme de la feuille??

Merci d'avance
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Comment masquer une ligne sous VBA?

Bonjour Neo37 :

Avec ceci c'est déjà mieux, on évite un saut d'écran :

Code:
Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not (Rows(9).Hidden And Rows(10).Hidden) Then Rows("9:10").Hidden = True
End Sub
Mais bien sûr si l'on sélectionne les lignes 8:11 et que l'on affiche les lignes on verra les lignes 9:10.

Pour éviter ça on peut protéger la feuille :rolleyes:

Si l'on ne veut pas le faire :

- mettre dans une cellule une formule volatile, comme =MAINTENANT()

- utiliser l'événement Calculate :

Code:
Sub Worksheet_Calculate()
If Not (Rows(9).Hidden And Rows(10).Hidden) Then Rows("9:10").Hidden = True
End Sub
A+
 
Dernière édition:

Neo37

XLDnaute Junior
Re : Comment masquer une ligne sous VBA?

Merci Job75 :D
La seconde solution me convient très bien :)

J'avais tenté de protéger la feuille, mais ça rentrait en conflit avec mes autres macros déjà présentes. J'ai insisté pendant 2h, mais rien n'y faisait. Possible que je ne m'y prenait pas de la bonne façon :p

Merci encore à toi.
 

GIBI

XLDnaute Impliqué
Re : Comment masquer une ligne sous VBA?

Bonjour,

attention le fait de cacher la ligne provoque l'événement, donc toujours commencer par suspendre les événements avant toutes intervention et réactiver après


Application.EnableEvents = False


Application.EnableEvents = True


Sinon le mieux est de protéger la feuille : voici un exemple

en début de chaque macro il suffit d'enlever la protection et la remettre à la fin





Code:
Public Const C_PSW As String = "mot de passe" ' ou null

'**************exemple
sub mamacro1

  deproteger

'
'  mon code
'
  proteger

end sub 


Sub DeProteger()
    WSProt = ActiveSheet.ProtectContents
    ActiveSheet.Unprotect C_PSW
End Sub

Sub Proteger()
    If WSProt = True Then    ' remet la protection
        With ActiveSheet
            .EnableOutlining = True
            .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=C_PSW, _
                     AllowFiltering:=True
        End With
    End If

End Sub
 

job75

XLDnaute Barbatruc
Re : Comment masquer une ligne sous VBA?

Bonjour GIBI,

attention le fait de cacher la ligne provoque l'événement, donc toujours commencer par suspendre les événements avant toutes intervention et réactiver après

Pas besoin des Application.EnableEvents car il n'y a pas de risque de bouclage avec le test :

Code:
If Not (Rows(9).Hidden And Rows(10).Hidden) Then...
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 976
Membres
103 076
dernier inscrit
LoneWolf90