cs_Juju1988
Messages postés70Date d'inscriptionjeudi 8 janvier 2009StatutMembreDernière intervention21 juin 2011
-
21 sept. 2010 à 15:19
cs_Juju1988
Messages postés70Date d'inscriptionjeudi 8 janvier 2009StatutMembreDernière intervention21 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...
cs_Juju1988
Messages postés70Date d'inscriptionjeudi 8 janvier 2009StatutMembreDernière intervention21 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