bloquer des saisies

DIGGERJACK

XLDnaute Occasionnel
Bonjour le forum

J'ai une zone de saisie C4 : D150
Je voudrais pour chaque ligne interdire la saisie en colonne D tant que les saisies ne sont pas faites en colonne C

Ex : D25 ne peut être saisie si c25 n'est pas renseigné en sachant que les données en D25 seront des dates servant à des calculs

j'ai testé avec données validation mais sans succès
Merci de votre aide
Bonne journée
 

Coriolan

XLDnaute Occasionnel
Re : bloquer des saisies

Bonjour,

Ceci devrait convenir :
A placer dans l'onglet considéré

private sub worksheet_change
ActiveSheet.unprotect 'désactiver la protection
for i = 4 to 150
cells(i,4) locked = isempty(cells(i,3)) ' verrouille la cellule si la cellule en C est vide
next
ActiveSheet.protect ' réactiver la protection
end sub

Prévoir de déverrouiller au préalable les cellules qui doivent rester accessibles, notamment C4:C150

Bon Week End
 
C

Compte Supprimé 979

Guest
Re : bloquer des saisies

Salut Diggerjack,

Je pense que la solution est de passer par le VBA, voici le code qui va bien ;)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
' Teste si une saisie est faite dans la colonne "D"
If Not Intersect(Target, Range("D1:D65536")) Is Nothing Then
  ' Si c'est le cas teste si la cellule 'C' de gauche est remplie
  If Range("C" & Target.Row).Value = "" Then
    MsgBox "Vous ne pouvez pas saisir de valeur dans cette cellule" & vbCrLf _
      & "tant que la cellule de la colonne 'C' n'est pas remplie", _
      vbCritical + vbYesNo, "SAISIE IMPOSSIBLE ..."
    ' Empécher la détection des évènements
    Application.EnableEvents = False
    ' Efface la valeur
    Application.Undo
    Application.EnableEvents = True
  End If
End If
End Sub

A+
 

jp14

XLDnaute Barbatruc
Re : bloquer des saisies

Bonjour

En utilisant une macro evénementielle on peut résoudre le problème.


Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Long
Dim adresse As String
Dim feuille As String

On Error GoTo fin

If Not Application.Intersect(Target, Range("d4:d150")) Is Nothing Then
If Target = "" Then Exit Sub
adresse = Target.Address(0, 0)
lig = Target.Row
feuille = ActiveSheet.Name

If Sheets(feuille).Range(adresse).Offset(0, -1) = "" Then
Call MsgBox("Saisie impossible " _
& vbCrLf & "Vous devez remplir la cellule adjacente" _
& vbCrLf & "" _
, vbCritical, "Erreur")
Target.value=""
Sheets(feuille).Range(adresse).Offset(0, -1).Activate
End If

End If

End Sub
fin:
JP
 
Dernière édition:

DIGGERJACK

XLDnaute Occasionnel
Re : bloquer des saisies

Bonsoir le forum

Merci à jp14, BrunoM45 et Coriolan pour vos réponses

Je vais utiliser celle de jp14 car elle repositionne le curseur dans la colonne à saisir

Les autres idées sont déjà au chaud dans mes archives pour des applications futures

Merci à vous tous et bonne soirée
 

Discussions similaires

Statistiques des forums

Discussions
312 558
Messages
2 089 596
Membres
104 220
dernier inscrit
Fredericchau