Fonctionnalité macro Excel sur ligne insérée

Résolu
Eaheru -  
 Eaheru -
Bonjour,

Un précèdent sujet posté ici m'a permis d'obtenir la macro suivante : (merci à michel_m :) )

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B2:H2")) Is Nothing Then Exit Sub
If Application.CountA(Range("B2:H2")) = 7 Then
Range("A2") = Now()
Else
Range("A2") = ""
End If
End Sub


Ça marche parfaitement sur la ligne 2. Mais je dois étendre son activité.
Je m'explique : Ce fichier est destiné à être un fichier de demande de congés.
Les opérateurs renseignent donc les cellules de B à H et lorsque tout les renseignements y sont, on valide la date et l'heure de la demande dans la cellule 1 de la ligne en cours.

Le fichier est donc utilisé par plusieurs personnes et les gens y insère des lignes afin de remplir leur prévisions de congés. Lors de l'insert, les liste de choix que j'ai créé suivent bien, mais la macro ci dessus indiquant en "dur" la ligne 2, ne fonctionne pas sur les lignes insérées.

Pour finir est il possible, avec une seconde macro, lors d'une validation (par exemple en cellule I2 avec une valeur Oui/non/vide) on puisse verrouiller les cellules de A2 àH2 ? (bien sur tout comme la macro ci dessus, j'aurais besoin que cette nouvelle fonction soient répercutée sur les lignes insérées.

Merci d'avance pour votre aide :)

5 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim lig As Long
        lig = Target.Row
        If lig = 1 Then Exit Sub    'non actif sur ligne 1
        ActiveSheet.Unprotect
        If Not Intersect(Target, Cells(lig, 2).Resize(1, 7)) Is Nothing Then
            If Application.CountA(Cells(lig, 2).Resize(1, 7)) = 7 Then
                Cells(lig, 1) = Now()
            Else
                Cells(lig, 1) = ""
            End If
        ElseIf Not Intersect(Target, Range("I" & lig)) Is Nothing Then
            Cells(lig, 1).Resize(1, 8).Locked = (Cells(lig, 9) = "oui")
        End If
        ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
        ActiveSheet.EnableSelection = xlUnlockedCells
    End Sub

    Dans ce code la protection inclu la colonne A, et empeche la sélection de cellules verrouillées.
    N'oublie pas de déverrouiller les colonnes A:I

    eric
    0
  2. Eaheru
     
    Merci de ta réponse Éric

    Je viens de la tester et je suis actuellement avec mon onglet, intégrant cette macro, totalement verrouillé.
    La condition "oui/non" n'est pas présente et la ligne n'est pas totalement remplie :(

    Je tente de voir ou est la faille :)
    Ça ne doit pas être loin du compte pourtant.

    Je complète, en fait la ligne 2 est toujours accessible , mais le champ "oui\non" de validation ne l'est plus, tout comme les autres lignes (un résultat inversé ? )
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      non, rien à modifier sauf si je n'ai pas compris qcq chose dans le fonctionnement désiré.
      Tu as peut-être oublié de déverrouiller les cellules des colonnes A:I avant de protéger la feuille.
      Voir exemple
      eric
      0
  3. Eaheru
     
    Effectivement, ton exemple correspond tout a fait au fonctionnement que je souhaite mettre en place.
    pour être tatillon, il me faudrait pouvoir valider (donc verrouiller) une ligne que si elle est remplie complétement :p

    Bon, je regarde ou j'ai fais une bêtise ^^
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      pour être tatillon, il me faudrait pouvoir valider (donc verrouiller) une ligne que si elle est remplie complétement
      alors reverrouille en I les cellules sans 'oui' et ajoute après le .unprotect :
      Cells(lig, 9).Locked = Not (Application.CountA(Cells(lig, 1).Resize(1, 8)) = 8)
      0
  4. Eaheru
     
    Ok j'ai trouvé mon erreur, des lignes non déverrouillées mettaient le bazar.
    L'ajout que tu propose fonctionne parfaitement. :)

    Merci beaucoup pour votre aide précieuse !
    A suivre ! :)
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      A suivre ! :)
      Alors tu devrais t'inscrire sur le site pour suivre plus facilement tes interventions ;-)
      Et n'oublie pas de mettre en résolu...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Eaheru
     
    voila qui est fait ! (inscription + changement de statut de ce sujet).
    0