Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…