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 SubPuis 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 SubEt 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 SubJe 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 SubBonjour 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 subL'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 SubRemarques :
- 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