Comment réunir ces 2 macros en double clic
Bonjour le forum
J'ai cette macro (dans un module) en double clic cellule A3 pour afficher / masquer ligne 5
Sub AfficherMasquerDistanceMoisPrecedent()
With ActiveSheet
' .Unprotect
With .Rows(5) 'Ligne N°5
.Hidden = Not .Hidden
End With
.Range("A1").Select
' .Protect
End With
End Sub
Puis dans ThisWorkbook les 2 macros ci-dessous
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim Fe As Worksheet
Cancel = True
If Target.Address(0, 0) = "A3" Then
If Not Target.Comment Is Nothing Then AfficherMasquerDistanceMoisPrecedent
ElseIf Target.Address(0, 0) = "G1" Then
'cache ou affiche toutes les colonnes H de toutes les feuilles du classeur
For Each Fe In Worksheets
Fe.Columns(8).EntireColumn.Hidden = Not Fe.Columns(8).EntireColumn.Hidden
Next Fe
ElseIf Target.Address(0, 0) = "I1" Then
UsfChoix.Show 0
End If
End Sub
Et celle-ci pour afficher / masquer en double clic cellule A2 colonne D
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Columns("A"), Target) Is Nothing Then
Cancel = Not Cancel
Columns("D:D").Hidden = Not Columns("D:D").Hidden
End If
End Sub
Je voudrais double cliquer cellule A2 pour afficher / masquer colonne D
Je voudrais double cliquer cellule A3 pour afficher / masquer ligne 5
Merci à vous pour vos éventuels retours
Cordialement
Cellule A3 fait les 2
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim Fe As Worksheet
Cancel = True
If Target.Address(0, 0) = "A3" Then
If Not Target.Comment Is Nothing Then AfficherMasquerDistanceMoisPrecedent
Cancel = Not Cancel
Columns("D").Hidden = Not Columns("D").Hidden
End If
End Sub
Bonjour al87,
Au cas où, voici une possibilité en passant par un select case, pour l'instant basé sur l'adresse de la cible du double clic :
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
select case Target.Address
case "$A$3": If Not Target.Comment Is Nothing Then AfficherMasquerDistanceMoisPrecedent
case "$A$2": Columns("D:D").Hidden = Not Columns("D:D").Hidden
case "$G$1": MasquerColonneH
case "$I$1": UsfChoix.Show
end select
End Sub
Sub AfficherMasquerDistanceMoisPrecedent()
With ActiveSheet
'.Unprotect
.Rows(5).Hidden = Not .Rows(5).Hidden
.Range("A1").activate
'.Protect
End With
End Sub
sub MasquerColonneH()
For Each ws In Worksheets
ws.Columns(8).EntireColumn.Hidden = Not ws.Columns(8).EntireColumn.Hidden
Next ws
end sub
L'idée étant, si possible, de créer à terme des procédures pour chaque action afin de les appeler simplement à chaque cas, c'est plus simple à maintenir lorsque le besoin évolue (et ça permet aussi d'appeler une même procédure à plusieurs endroits).
Cdlt,
Bonjour…
Une autre proposition (dans ThisWorbook)
Dim Ws As Worksheet
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal R As Range, Cancel As Boolean)
If Sh.Name Like "Feuil4" Then Exit Sub ‘utile si autres onglets présents et non concernés
Cancel = Not Cancel
Sh.Unprotect
If R.Address = "$A$3" Then Rows(5).Hidden = Not Rows(5).Hidden
If Not R.Comment Is Nothing Then Call AfficherMasquerDistanceMoisPrecedent ‘il peut y avoir d’autres cellules commentées
If R.Address = "$G$1" Then
For Each Ws In Sheets ‘boucle d’action pour les autres onglets concernés sinon à l’éviter
Ws.Unprotect
Ws.Columns("H").Hidden = Not Ws.Columns("H").Hidden
Ws.Protect
Next
End If
If R.Address = "$I$1" Then UsfChoix.Show 0 'mode Modal pour éviter de l'ouvrir quand il l'est déjà
Sh.Protect
End Sub
'ici ou ailleurs
Sub AfficherMasquerDistanceMoisPrecedent()
MsgBox "Je ne sais pas !", , "Oups..." 'à développer
End Sub
Remarques :
- la pratique du (0, 0) n’est utile qu’avec des cellules formatées, tout comme 3GB (
- concernant l’utilisation du Not : ce n’est pas parce que ce n’est pas FAUX (<> 0) que c’est VRAI (=1) ce peut être une indécision (=2 ou 3 … ou 9).
Ce n’est par ce qu’on ne se sort pas par la porte qu’on entre par celle-ci. Il peut y avoir d’autres intrus comme Moi
Bonjour à tous les deux
Je vais m'inspirer des deux solutions
Merci à vous deux
Bonne fin de WE
Cordialement