VBA calculate masque

Bonjour j'aimerais savoir si il etait possible de faire lorsque que je lance un worksheetchange il ferifie apres les case cocher pour les remasquer ?

Dim OS As Variant
Dim F As Worksheet
Dim I As Byte

Application.ScreenUpdating = False
If Target.Row < 6 Or Target.Row > 65 Then Exit Sub
If Target.Column < 9 Or Target.Column > 19 Then Exit Sub
Cancel = True
Select Case Target.Column
    Case 9
        Set OS = Sheets(Array("HJanvier", "Janvier", "BJanvier"))
    Case 10
        Set OS = Sheets(Array("HFevrier", "Fevrier", "BFevrier"))
    Case 11
        Set OS = Sheets(Array("HMars", "Mars", "BMars"))
    Case 12
        Set OS = Sheets(Array("HAvril", "Avril", "BAvril"))
    Case 13
        Set OS = Sheets(Array("HMai", "Mai", "BMai"))
    Case 14
        Set OS = Sheets(Array("HJuin", "Juin", "BJuin"))
    Case 15
        Set OS = Sheets(Array("HJuillet", "Juillet", "BJuillet"))
    Case 16
        Set OS = Sheets(Array("HAout", "Aout", "BAout"))
    Case 16
        Set OS = Sheets(Array("HSetempbre", "Septembre", "BSeptembre"))
    Case 17
        Set OS = Sheets(Array("HOctobre", "Octobre", "BOctobre"))
    Case 18
        Set OS = Sheets(Array("HNovembre", "Novembre", "BNovembre"))
    Case 19
        Set OS = Sheets(Array("HDecembre", "Decembre", "BDecembre"))
End Select
Target.Value = IIf(Target.Value = "X", "", "X")
For Each F In OS
    If F.Range("A6") = "Jours" And F.Range("A8") = Range("X26") Then
        For I = 9 To 65
            If F.Range("A" & I) = Cells(Target.Row, 8).Value Then F.Rows(I).Hidden = Target.Value = "X"
        Next I
    End If
Next F
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim WS As Worksheet
 Application.ScreenUpdating = False
 If Target.Column <> 8 Then Exit Sub
       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", "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", _
         "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"))
            If Not Intersect(Target, Range("H5:H69")) Is Nothing Then
              WS.Unprotect "azerty"
              WS.Range("$A$8:$A$67").Calculate
              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
      Call personnel
 Application.ScreenUpdating = True
 End Sub

merci beaucoup

Bonsoir

Dans le premier code il manque la première ligne. Pouvez-vous la donner ?

Mieux encore serait d'avoir le fichier pour comprendre

Crdlt

Bonjour deja merci d'avoir repondu aussi vite

Private Sub worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim OS As Variant
Dim F As Worksheet
Dim I As Byte

Voila la partie manquante

je joint le fichier par contre je précise c'est une usine a gaz .... mais je doit garder toute les fonctions sur un seul fichier apres je suis pas fermer a des idées pour simplifier et accelerer

Merci encore

Bonjour

Joli fichier !

Je vais regarder votre demande. Toutefois, une chose que vous pouvez changer directement :

Dans chaque feuille nommée B + le mois, vous avez une macro Private sub worksheet_activate.

Afin d'avoir une seule macro pour toutes ces feuilles, vous pouvez les supprimer dans chacune des feuilles dont le nom commence par B et mettre celle ci-dessous dans THISWORKBOOK

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Cel As Range
Application.ScreenUpdating = False
With Sh
    If .Name = "B" & .Range("A1") Then
        For Each Cel In Sh.Range("B8:CA8")
            If Not IsError(Cel) Then Cel.EntireColumn.Hidden = Cel = ""
        Next Cel
    End If
End With
Application.ScreenUpdating = True
End Sub

Pour le contrôle des cases à cocher, il s'agit des cases situées en colonnes Y de la feuille Données ??

Crdlt

Merci ! c'est évident comme fonctionnement mais je n'y est pas penser ... merci !

Re

Pour le contrôle des cases à cocher, il s'agit des cases situées en colonnes Y de la feuille Données ??

Si oui, je vous suggère de supprimer les objets et de mettre un signe de case cochée ou un X dans la cellule.

Vaux mieux éviter les objets sur les feuilles. Cela pose toujours des soucis avec les codes VBA à un moment ou un autre

Possible cela pour vous ?

Crdlt

j'etais justement entrain de bosser sur une macro pour ça XD du coup oui c'est possible pour moi merci de votre aide et patience

Re

Petite question, les cases à cocher sont positionnées des lignes 37 à 60 dans la feuille données

Pouvez-vous confirmer qu'elles restent toujours positionnées entre ces lignes ?

Cordialement

Bonsoir Elles peuvent bouger tant qu'elle reste facile à voir et dans données

I

Bonjour

Heu... je me suis mal exprimé. Je voulais savoir si vous dans l'utilisation les lignes 37 à 60 pourrait bouger ou si les informations que vous avez en regard des cases à cocher sont figées et resteront toujours entre les lignes 37 et 60

Cordialement

Bonjour,

Dans la logique elles restent fixe.

Merci

pour l'instant j'essaye comme cela mais sa ne marche pas encore j'essaye de comprendre .

Private Sub worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim OS As Variant
Dim R As Range
Dim F As Worksheet
Dim I As Byte
Dim WS As Worksheet

Application.ScreenUpdating = False
If Target.Row < 37 Or Target.Row > 60 And Target.Column <> 25 Then
Cancel = True
Select Case Target.Row
    Case 37
        Set OS = Range("AH:AH")
    Case 38
        Set OS = Range("AI:AI")
    Case 39
        Set OS = Range("AJ:AJ")
    Case 40
        Set OS = Range("AL:AL")
    Case 41
        Set OS = Range("AM:AM")
    Case 42
        Set OS = Range("AN:AN")
    Case 43
        Set OS = Range("AP:AP")
    Case 44
        Set OS = Range("AQ:AQ")
    Case 45
        Set OS = Range("AS:AS")
    Case 46
        Set OS = Range("AT:AT")
    Case 47
        Set OS = Range("AU:AU")
    Case 48
        Set OS = Range("AV:AV")
End Select
Target.Value = IIf(Target.Value = "X", "", "X")
For Each WS In Sheets(Array("Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", _
                           "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"))
For Each R In OS
             WS.R.Hidden = Target.Value = "X"
          Next R
    Next WS
Else
If Target.Row < 6 Or Target.Row > 65 Then Exit Sub
If Target.Column < 9 Or Target.Column > 19 Then Exit Sub
Cancel = True
Select Case Target.Column
    Case 9
        Set OS = Sheets(Array("HJanvier", "Janvier", "BJanvier"))
    Case 10
        Set OS = Sheets(Array("HFevrier", "Fevrier", "BFevrier"))
    Case 11
        Set OS = Sheets(Array("HMars", "Mars", "BMars"))
    Case 12
        Set OS = Sheets(Array("HAvril", "Avril", "BAvril"))
    Case 13
        Set OS = Sheets(Array("HMai", "Mai", "BMai"))
    Case 14
        Set OS = Sheets(Array("HJuin", "Juin", "BJuin"))
    Case 15
        Set OS = Sheets(Array("HJuillet", "Juillet", "BJuillet"))
    Case 16
        Set OS = Sheets(Array("HAout", "Aout", "BAout"))
    Case 16
        Set OS = Sheets(Array("HSetempbre", "Septembre", "BSeptembre"))
    Case 17
        Set OS = Sheets(Array("HOctobre", "Octobre", "BOctobre"))
    Case 18
        Set OS = Sheets(Array("HNovembre", "Novembre", "BNovembre"))
    Case 19
        Set OS = Sheets(Array("HDecembre", "Decembre", "BDecembre"))
End Select
Target.Value = IIf(Target.Value = "X", "", "X")
For Each F In OS
    If F.Range("A6") = "Jours" And F.Range("A8") = Range("X26") Then
        For I = 9 To 65
            If F.Range("A" & I) = Cells(Target.Row, 8).Value Then F.Rows(I).Hidden = Target.Value = "X"
        Next I
    End If
Next F
End If
Application.ScreenUpdating = True
End Sub

Re

Je suis en train de modifier cette macro

Crdlt

Re

Votre fichier modifié comme suit :

  • Modification de la première partie macro Private Sub worksheet_BeforeDoubleClick dans la feuille Données
  • Suppression des codes checkbox dans la feuille données
  • Ajout d'un module 2 comprenant les codes CD1, CD2 et CD3 qui seront être exécutés lors du click sur les case à cocher. La partie des codes en vert vient de la feuille données et est à supprimer.
  • Dans la colonne Y, suppression des cases à cocher objet. Elles sont remplacées par d'autres cases à cocher types caractères

Le lien -->

Le fichier inclut la modification du code proposé dans mon post précédent

NB : il faudra analyser mais l'enregistrement est très long et on a toujours l'impression d'avoir un code en sous tache. Assez bizarre...

Je continuerai à améliorer les codes si vous le voulez

Cordialement

Alors deja un grand merci , sans vouloir abuser si vous avez une idee pour que lorsque l'on ajoute ou supprime un agent la macro masque apres de nouveau les agents qui sont cocher a coter cf votre premiere macro et je suis pas contre un avis sur le fais de la lenteur

merci vraiment de votre patience et aide

re

sans vouloir abuser si vous avez une idee pour que lorsque l'on ajoute ou supprime un agent la macro masque apres de nouveau les agents qui sont cocher a coter cf votre premiere macro

Pas de soucis mais je n'ai pas compris votre demande

Dites moi si les modifications fonctionnent aussi de manière à ce que je continue sur le fichier que je vous ai envoyé

Crdlt

Edit : en fait je pense que c'est votre code Worksheet_Change(ByVal Target As Range) dans votre feuille Données qui fait "ramer".

Un truc que je ne comprends pas est le pourquoi de faire une boucle avant le If Not Intersect(Target, Range("H5:H69")) Is Nothing Then. Cela devrait être le contraire non ?

En gros, si on change H5 à H69 dans la feuille données, on modifie dans les feuilles. Sinon rien.

Pour ma demande lorsque que l'on ajoute ou supprime un âgent en H, du coup cela rafiche toute les lignes alors qu'elle devait être masquer exemple si À est cocher en j il est donc masqué en janvier mais si on ajoute une lettre en H alors après A qui devrait masqué en janvier réapparaît.

pour les modifications tout fonctionne parfaitement pour moi merci !

pour le h5:h69 c'est possible que je me sois trompé

Re

Dans les feuilles Janvier à décembre, est-ce que vous complétez quelque chose ou est-ce que les données viennent d'une autre feuille.

Cette question, parce que je vois que vous avez une macro type CHANGE dans chaque feuille et que je me demande si l'on ne peut pas en faire une seule pour tout le fichier

Sinon le fichier rame tout de même pas mal. Puis j'ai aussi compris pourquoi cela rame à l'enregistrement. Cela est du au fait que dans les options vous avez coché la case "mode de calcul manuel" mais que lors de l'enregistrement vous demandez à ce qu'excel calcule tout le fichier.

Crdlt

Oui on saisi manuellement ses temps dans les feuilles de janvier décembre. Oui j ai essayé de le faire mais je n'es pas fini et oui je pensais que sa serais mieux mais j'ai peu être fais un mauvais choix.

Rechercher des sujets similaires à "vba calculate masque"