[Catégorie modifiée .Net --> VBA] Empêcher modification cellule

cs_Juju1988 Messages postés 70 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 juin 2011 - 21 sept. 2010 à 15:19
cs_Juju1988 Messages postés 70 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 juin 2011 - 21 sept. 2010 à 16:05
Je ne sais pas si je suis dans la bonne catégorie, merci de m'indiquer si je me trompe...

J'ai actuellement un lien hypertexte sous plusieurs de mes cellules, lorsque je clique dessus cela me recherche la première cellule vide en ligne 39 et me met à cet endroit la valeur Sieving.
Une fois cette colonne de Sieving remplie j'ai la possibilité de la valider (comparer son résultat entre elle et la cellule où se trouvait le lien hypertexte pour l'envoyer vers un fichier excel tampon).
J'ai actuellement une procédure qui une fois la colonne validée empêche à l'utilisateur toute modification en ligne 39 de la colonne de Sieving.
Cependant lorsque qu'une validation a déjà été faite... La procédure de recherche de première cellule vide ne fonctionne plus à cause de cette ligne dans cette procédure :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Si excel détecte une erreur, aller à l'adresse Sel_Erreur
On Error GoTo Sel_Erreur


Dim Plage As Range, Cel As Range
'On bloque la gestion des évènements
Application.EnableEvents =  False

'Traitement
'Si la sélection contient des cellule de la plage N39:R39, alors
If Not (Intersect(Target, Range("N39:R39")) Is Nothing) Then
    'Pour chaque cellule appartenant à la sélection
    For Each Cel In Target
        'si la cellule n'appartient pas à la plage N39:R39 ou que la cellule à 3 lignes avant
        '(39-3= Ligne 36) ne contient pas une date
        If Intersect(Cel, Range("N39:R39")) Is Nothing Or (Not (IsDate(Cel.Offset(-3, 0)))) Then
            If Plage Is Nothing Then
                Set Plage = Cel
            Else
                Set Plage = Union(Plage, Cel)
            End If
            'On stocke la variable dans Plage...
        Else
        'sinon (cel appartient à N39:R39, et la cellule en ligne 35 est une date)
            If Plage Is Nothing Then
                Set Plage = Cel.Offset(1, 0)
            Else
                 Set Plage = Union(Plage, Cel.Offset(1, 0)) 
            End If
            'stocker la cellule de la ligne au-dessus dans la variable "Plage"
        End If
    Next Cel
    'cellule suivante
    Plage.Select
    'sélectionner Les cellules de "Plage"
End If
'Sortie obligatoire


Sel_Sortie:
    Application.EnableEvents  = True
    'Remettre en route la gestion des évènements
    Exit Sub
    'Sortir de la macro
'Gestion des erreurs
Sel_Erreur:
    MsgBox Err.Description, vbOKOnly, "erreur n°" & Err.Number
    'Boîte d'alerte numéro+description de l'erreur
    Resume Sel_Sortie
    'Continuer la macro en allant à la sortie obligatoire
End Sub


Si vous avez besoin d'autres morceaux de mon code pour vous aidez n'hésitez pas...

Merci d'avance...

1 réponse

cs_Juju1988 Messages postés 70 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 juin 2011
21 sept. 2010 à 16:05
J'ai fait quelque chose comme ça à la place cependant ça bloque ma cellule en écriture et non pas en sélection car mes cellules N39 P39 O39 Q39 Et R39 sont des listes de validation

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Address = "N39" Then
        If Range("N36").Value <> "" Then
            Range("O39").Select
            Range("N39").Locked = True
        End If
    End If
    If Target.Address = "O39" Then
        If Range("NO6").Value <> "" Then
            Range("P39").Select
            Range("P39").Locked = True
        End If
    End If
    If Target.Address = "P39" Then
        If Range("P36").Value <> "" Then
            Range("Q39").Select
            Range("Q39").Locked = True
        End If
    End If
    If Target.Address = "Q39" Then
        If Range("Q36").Value <> "" Then
            Range("R39").Select
            Range("Q39").Locked = True
        End If
    End If
    If Target.Address = "R39" Then
        If Range("R36").Value <> "" Then
            Range("S39").Select
            Range("R39").Locked = True
        End If
    End If
End Sub
0
Rejoignez-nous