Fonctionnalité macro Excel sur ligne insérée

Résolu/Fermé
Eaheru - 23 juin 2010 à 11:14
 Eaheru - 24 juin 2010 à 09:57
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 :)
A voir également:

5 réponses

eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
23 juin 2010 à 13:04
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
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
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
23 juin 2010 à 16:57
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
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
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
Modifié par eriiic le 23/06/2010 à 17:16
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
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
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
23 juin 2010 à 18:00
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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