Call VBA private
K
Bonjour
Je voulais savoir si je fais peux que ma vba
le truc c'est quand je met call sa me marque "Erreur de compilation : argument non facultatif"
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 Subpuisse faire appel a cette vba apres c'est possible ?
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 Submerci
Bonjour,
A remplacer et à tester
Option Explicit
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
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 SubK
Merci deja , désoler je m’étais tromper dans le copier de ma macro j'ai éditer cela ^^' mais du coup m12 je suis désoler c’était pas bon ce que j'ai transmit la les deux macros sont bonne et j'aimerais trouver un moyen de faire que la première quand elle s exécute vérifie les casse X de la deuxième et si X les masque de nouveau ou affiche.
Merci encore
K
j'avais essayer de call en private hier mais sa ne marcher pas et je me sens un peu pommer ^^ la