XL 2016 liee deux macro

Keran

XLDnaute Junior
Bonjour :)
Je voulais savoir si je fais peux que ma vba

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim OS As Variant 'déclare le tableau des variables OS
Dim F As Worksheet 'déclare la variable F
Dim I As Byte 'déclare la variable I (Incrément)
Dim WS As Worksheet
Dim wss As Worksheet

    Application.ScreenUpdating = False
For Each WS In Sheets(Array("HJanvier", "HFevrier", "HMars", "HAvril", "HMai", "HJuin", _
                           "HJuillet", "HAout", "HSeptembre", "HOctobre", "HNovembre", "HDecembre", _
                           "BJanvier", "BFevrier", "BMars", "BAvril", "BMai", "BJuin", _
                           "BJuillet", "BAout", "BSeptembre", "BOctobre", "BNovembre", "BDecembre", _
                           "Bilan"))
                         
                    If Not Intersect(Target, Range("H5:H69")) Is Nothing Then
                                               WS.Unprotect "azerty"
                                    WS.Range("$A$8:$A$67").AutoFilter Field:=1, Criteria1:="<>", Visibledropdown:=False
                                   
                                      WS.Protect ("azerty"), DrawingObjects:=True, Contents:=True, Scenarios:=True _
                       , AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowFiltering:=True
                                             
                                             
End If
Next WS
    For Each wss In Sheets(Array("Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", _
                           "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"))
                         
                    If Not Intersect(Target, Range("H5:H69")) Is Nothing Then
                                            wss.Unprotect "azerty"
                                    wss.Range("$A$8:$A$67").AutoFilter Field:=1, Criteria1:="<>", Visibledropdown:=False
                                    wss.Protect ("azerty"), DrawingObjects:=True, Contents:=True, Scenarios:=True _
                       , AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowFiltering:=True
                                   
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim OS As Variant 'déclare le tableau des variables OS
Dim F As Worksheet 'déclare la variable F
Dim I As Byte 'déclare la variable I (Incrément)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
'si la cellule double-cliquée se trouve dans une ligne inférieure à 6 ou supérieure à 65, sort de la procédure
If Target.Row < 6 Or Target.Row > 65 Then Exit Sub
'si la cellule double-cliquée se trouve dans une colonne inférieure à 9 ou supérieure à 16, sort de la procédure
If Target.Column < 9 Or Target.Column > 19 Then Exit Sub
Cancel = True 'annule le mode [Édition] lié au double-clic
Select Case Target.Column 'agit en fonction de la colonne double-cliquée
    Case 9 'cas 9 (=> colonne I)
        Set OS = Sheets(Array("HJanvier", "Janvier", "BJanvier")) 'définit le tableau des onglets OS
    Case 10 'cas 10 (=> colonne J)
        Set OS = Sheets(Array("HFevrier", "Fevrier", "BFevrier")) 'définit le tableau des onglets OS
    Case 11 'cas 11 (=> colonne K)
        Set OS = Sheets(Array("HMars", "Mars", "BMars")) 'définit le tableau des onglets OS
    Case 12 'cas 12 (=> colonne L)
        Set OS = Sheets(Array("HAvril", "Avril", "BAvril")) 'définit le tableau des onglets OS
    Case 13 'cas 13 (=> colonne M)
        Set OS = Sheets(Array("HMai", "Mai", "BMai")) 'définit le tableau des onglets OS
    Case 14 'cas 14 (=> colonne N)
        Set OS = Sheets(Array("HJuin", "Juin", "BJuin")) 'définit le tableau des onglets OS
    Case 15 'cas 15 (=> colonne O)
        Set OS = Sheets(Array("HJuillet", "Juillet", "BJuillet")) 'définit le tableau des onglets OS
    Case 16 'cas 16 (=> colonne P)
        Set OS = Sheets(Array("HAout", "Aout", "BAout")) 'définit le tableau des onglets OS
    Case 16 'cas 16 (=> colonne P)
        Set OS = Sheets(Array("HSetempbre", "Septembre", "BSeptembre")) 'définit le tableau des onglets OS
    Case 17 'cas 17 (=> colonne Q)
        Set OS = Sheets(Array("HOctobre", "Octobre", "BOctobre")) 'définit le tableau des onglets OS
    Case 18 'cas 18 (=> colonne R)
        Set OS = Sheets(Array("HNovembre", "Novembre", "BNovembre")) 'définit le tableau des onglets OS
    Case 19 'cas 19 (=> colonne S)
        Set OS = Sheets(Array("HDecembre", "Decembre", "BDecembre")) 'définit le tableau des onglets OS
End Select 'fin de l'action en fonction de la colonne double-cliquée
Target.Value = IIf(Target.Value = "X", "", "X") 'de'finit la valeur de la cellule double-cliquée (X si vide, vide si X)
For Each F In OS 'boucle sur tous les onglets du tableau des onglets OS
    If F.Range("A6") = "Jours" And F.Range("A8") = Range("X26") Then 'condition 1
        For I = 9 To 65 'boucle sur les ligne 9 à 65
            'si la condition est respectée masque la feuille si la cellule vaut X, sinon la ligne reste affichée
            If F.Range("A" & I) = Cells(Target.Row, 8).Value Then F.Rows(I).Hidden = Target.Value = "X"
        Next I 'prochaine ligne de la boucle
    End If 'fin de la condition
Next F 'prochain onglet de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub


                                             
                                             
End If
Next wss
Application.ScreenUpdating = True

puisse faire appel a cette vba apres c'est possible ?

VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim OS As Variant 'déclare le tableau des variables OS
Dim F As Worksheet 'déclare la variable F
Dim I As Byte 'déclare la variable I (Incrément)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
'si la cellule double-cliquée se trouve dans une ligne inférieure à 6 ou supérieure à 65, sort de la procédure
If Target.Row < 6 Or Target.Row > 65 Then Exit Sub
'si la cellule double-cliquée se trouve dans une colonne inférieure à 9 ou supérieure à 16, sort de la procédure
If Target.Column < 9 Or Target.Column > 19 Then Exit Sub
Cancel = True 'annule le mode [Édition] lié au double-clic
Select Case Target.Column 'agit en fonction de la colonne double-cliquée
    Case 9 'cas 9 (=> colonne I)
        Set OS = Sheets(Array("HJanvier", "Janvier", "BJanvier")) 'définit le tableau des onglets OS
    Case 10 'cas 10 (=> colonne J)
        Set OS = Sheets(Array("HFevrier", "Fevrier", "BFevrier")) 'définit le tableau des onglets OS
    Case 11 'cas 11 (=> colonne K)
        Set OS = Sheets(Array("HMars", "Mars", "BMars")) 'définit le tableau des onglets OS
    Case 12 'cas 12 (=> colonne L)
        Set OS = Sheets(Array("HAvril", "Avril", "BAvril")) 'définit le tableau des onglets OS
    Case 13 'cas 13 (=> colonne M)
        Set OS = Sheets(Array("HMai", "Mai", "BMai")) 'définit le tableau des onglets OS
    Case 14 'cas 14 (=> colonne N)
        Set OS = Sheets(Array("HJuin", "Juin", "BJuin")) 'définit le tableau des onglets OS
    Case 15 'cas 15 (=> colonne O)
        Set OS = Sheets(Array("HJuillet", "Juillet", "BJuillet")) 'définit le tableau des onglets OS
    Case 16 'cas 16 (=> colonne P)
        Set OS = Sheets(Array("HAout", "Aout", "BAout")) 'définit le tableau des onglets OS
    Case 16 'cas 16 (=> colonne P)
        Set OS = Sheets(Array("HSetempbre", "Septembre", "BSeptembre")) 'définit le tableau des onglets OS
    Case 17 'cas 17 (=> colonne Q)
        Set OS = Sheets(Array("HOctobre", "Octobre", "BOctobre")) 'définit le tableau des onglets OS
    Case 18 'cas 18 (=> colonne R)
        Set OS = Sheets(Array("HNovembre", "Novembre", "BNovembre")) 'définit le tableau des onglets OS
    Case 19 'cas 19 (=> colonne S)
        Set OS = Sheets(Array("HDecembre", "Decembre", "BDecembre")) 'définit le tableau des onglets OS
End Select 'fin de l'action en fonction de la colonne double-cliquée
Target.Value = IIf(Target.Value = "X", "", "X") 'de'finit la valeur de la cellule double-cliquée (X si vide, vide si X)
For Each F In OS 'boucle sur tous les onglets du tableau des onglets OS
    If F.Range("A6") = "Jours" And F.Range("A8") = Range("X26") Then 'condition 1
        For I = 9 To 65 'boucle sur les ligne 9 à 65
            'si la condition est respectée masque la feuille si la cellule vaut X, sinon la ligne reste affichée
            If F.Range("A" & I) = Cells(Target.Row, 8).Value Then F.Rows(I).Hidden = Target.Value = "X"
        Next I 'prochaine ligne de la boucle
    End If 'fin de la condition
Next F 'prochain onglet de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

merci :)
 
Dernière édition:

Keran

XLDnaute Junior
pardon mauvais coller de macro les deux macro sont
VB:
Private Sub Worksheet_Change(ByVal Target As Range)

 Dim OS As Variant 'déclare le tableau des variables OS
 Dim F As Worksheet 'déclare la variable F
 Dim I As Byte 'déclare la variable I (Incrément)
 Dim WS As Worksheet
 Dim wss As Worksheet

 Application.ScreenUpdating = False
       For Each WS In Sheets(Array("HJanvier", "HFevrier", "HMars", "HAvril", "HMai", "HJuin", "HJuillet", "HAout", "HSeptembre", "HOctobre", _
         "HNovembre", "HDecembre", "BJanvier", "BFevrier", "BMars", "BAvril", "BMai", "BJuin", "BJuillet", "BAout", "BSeptembre", "BOctobre", _
         "BNovembre", "BDecembre", "Bilan"))
            If Not Intersect(Target, Range("H5:H69")) Is Nothing Then
              WS.Unprotect "azerty"
              WS.Range("$A$8:$A$67").AutoFilter Field:=1, Criteria1:="<>", Visibledropdown:=False
              WS.Protect ("azerty"), DrawingObjects:=True, Contents:=True, Scenarios:=True _
              , AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowFiltering:=True
            End If
       Next WS

       For Each wss In Sheets(Array("Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", _
         "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"))
            If Not Intersect(Target, Range("H5:H69")) Is Nothing Then
              wss.Unprotect "azerty"
              wss.Range("$A$8:$A$67").AutoFilter Field:=1, Criteria1:="<>", Visibledropdown:=False
              wss.Protect ("azerty"), DrawingObjects:=True, Contents:=True, Scenarios:=True _
              , AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowFiltering:=True
            End If
       Next wss
 Application.ScreenUpdating = True

 End Sub
qui devrais relancer ou du moins faire la meme chose as savoir que quand elle a fini elle doit masquer les ligne en x
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim OS As Variant 'déclare le tableau des variables OS

Dim F As Worksheet 'déclare la variable F

Dim I As Byte 'déclare la variable I (Incrément)


Application.ScreenUpdating = False 'masque les rafraîchissements d'écran

'si la cellule double-cliquée se trouve dans une ligne inférieure à 6 ou supérieure à 65, sort de la procédure

If Target.Row < 6 Or Target.Row > 65 Then Exit Sub

'si la cellule double-cliquée se trouve dans une colonne inférieure à 9 ou supérieure à 16, sort de la procédure

If Target.Column < 9 Or Target.Column > 19 Then Exit Sub

Cancel = True 'annule le mode [Édition] lié au double-clic

Select Case Target.Column 'agit en fonction de la colonne double-cliquée

    Case 9 'cas 9 (=> colonne I)

        Set OS = Sheets(Array("HJanvier", "Janvier", "BJanvier")) 'définit le tableau des onglets OS

    Case 10 'cas 10 (=> colonne J)

        Set OS = Sheets(Array("HFevrier", "Fevrier", "BFevrier")) 'définit le tableau des onglets OS

    Case 11 'cas 11 (=> colonne K)

        Set OS = Sheets(Array("HMars", "Mars", "BMars")) 'définit le tableau des onglets OS

    Case 12 'cas 12 (=> colonne L)

        Set OS = Sheets(Array("HAvril", "Avril", "BAvril")) 'définit le tableau des onglets OS

    Case 13 'cas 13 (=> colonne M)

        Set OS = Sheets(Array("HMai", "Mai", "BMai")) 'définit le tableau des onglets OS

    Case 14 'cas 14 (=> colonne N)

        Set OS = Sheets(Array("HJuin", "Juin", "BJuin")) 'définit le tableau des onglets OS

    Case 15 'cas 15 (=> colonne O)

        Set OS = Sheets(Array("HJuillet", "Juillet", "BJuillet")) 'définit le tableau des onglets OS

    Case 16 'cas 16 (=> colonne P)

        Set OS = Sheets(Array("HAout", "Aout", "BAout")) 'définit le tableau des onglets OS

    Case 16 'cas 16 (=> colonne P)

        Set OS = Sheets(Array("HSetempbre", "Septembre", "BSeptembre")) 'définit le tableau des onglets OS

    Case 17 'cas 17 (=> colonne Q)

        Set OS = Sheets(Array("HOctobre", "Octobre", "BOctobre")) 'définit le tableau des onglets OS

    Case 18 'cas 18 (=> colonne R)

        Set OS = Sheets(Array("HNovembre", "Novembre", "BNovembre")) 'définit le tableau des onglets OS

    Case 19 'cas 19 (=> colonne S)

        Set OS = Sheets(Array("HDecembre", "Decembre", "BDecembre")) 'définit le tableau des onglets OS

End Select 'fin de l'action en fonction de la colonne double-cliquée

Target.Value = IIf(Target.Value = "X", "", "X") 'de'finit la valeur de la cellule double-cliquée (X si vide, vide si X)

For Each F In OS 'boucle sur tous les onglets du tableau des onglets OS

    If F.Range("A6") = "Jours" And F.Range("A8") = Range("X26") Then 'condition 1

        For I = 9 To 65 'boucle sur les ligne 9 à 65

            'si la condition est respectée masque la feuille si la cellule vaut X, sinon la ligne reste affichée

            If F.Range("A" & I) = Cells(Target.Row, 8).Value Then F.Rows(I).Hidden = Target.Value = "X"

        Next I 'prochaine ligne de la boucle

    End If 'fin de la condition

Next F 'prochain onglet de la boucle

Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran

End Sub
 

Discussions similaires

Réponses
18
Affichages
630
Haut Bas