Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[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

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

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
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

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+
 

GIBI

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

Bonjour Job75,

je sais je suis têtu, mais si la ligne n'est pas caché il y aura bien un événement supplémentaire : met un point d'arrêt tu le constateras.

GIBI
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…