Mise en forme conditionnelles

Bonjour à tous

Je n’ai pas trouvé le moyen d’interdire la saisie dans une cellule si la cellule de gauche est vide.

Exemple: B3 vide ; C3 pas de saisie possible.

Merci et bon réveil 😜 à tous

Bonjour LedZep

Si j'ai compris comment ne pas saisir des zones dans un autre post, pour ce cas précis, en collant le code suivant dans la zone code de la feuille ALT+F11 ou (affichage/ code), à essayer

Dim LastCol&, lastRow&, plage As Range, cell As Range, v as string

Private Sub Worksheet_Change(ByVal Target As Range)
    LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    lastRow = Range("A" & Rows.Count).End(xlUp).Row
    Set plage = Range(Cells(3, 13), Cells(lastRow, LastCol))
    v = ActiveCell.Value
    If Not Intersect(Target, plage) Is Nothing Then
        Application.EnableEvents = False
        If Target.Count > 1 Then
            Set plage = Selection
            Application.Undo
            For Each cell In plage
                If cell.offset(0,-1) = "" Then
                    cell.Value = ""
                End If
            Next cell
        End If
    End If
    Application.EnableEvents = True
End Sub

Bonjour tout le monde,

Une autre variante au travers d'un exemple à étudier :

19exemple.xlsm (15.31 Ko)
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    ' Il ne peut pas y avoir de cellule à gauche
    If Target.Column = 1 Then Exit Sub
    ' Il s'agit d'une sélection multiple
    If Target.Count > 1 Then Exit Sub

    ' La colonne de gauche est vide
    Dim colonne As Integer, ligne As Long
    colonne = Target.Column
    ligne = Target.Row
    If Cells(ligne, colonne - 1) = "" Then Target = ""
End Sub

Bonjour à tous

Bonjour Optimix et scraper

Merci d'avoir répondu à ma demande

Désolé, je n'ai pas mis le fichier , mais je voulais avoir une trame pour pouvoir essayer de l'adapter à mon projet.

je préfère essayer de comprendre , que d'avoir la solution du premier coup.

Si je n'y parviens pas d'ici fin de semaine, je dépose mon support et j'espère que j'aurai encore votre aide pour le résoudre

Bonne soirée à tous

Bonsoir,
Une autre interprétation de la question.
Cdlt.

Private Sub Worksheet_Change(ByVal Target As Range)

    On Error GoTo errHandler

    If Target.CountLarge = 1 And Target.Column > 2 And Target.Row > 1 And IsEmpty(Target.Offset(, -1)) Then
        Application.EnableEvents = False
        Target.Value = vbNullString
    End If

exitHandler:
    Application.EnableEvents = True
    Exit Sub

errHandler:
    Resume exitHandler

End Sub

Bonsoir le forum

Bonsoir scraper , Optimix et Jean-Eric

Merci pour vos propositions que j'ai essayé , et que je n'ai pas réussi à mettre en place .

Donc voici mon fichier, avec ma demande plus détaillée.

1- Dans la colonne D à partir de D3 la saisie sera autorisé seulement si C3 n'est pas vide.

2- Si c'est le cas alors passage à la ligne suivante.

3- Ce code sera uniquement appliqué après la feuille "Admin", et prendra aussi en compte l'ajout ou la suppression de feuilles.

Dans le fichier joint, j'ai mis quelques infos en complément.

Il est vrai que ma 1er demande n’était pas si claire que cela, et en plus sans fichier .

si vous pouvez me mettre les commentaires de vos codes cela m'aidera à compléter mon apprentissage.

Merci de votre aide

A bientôt sur le forum

11classeur11.xlsm (22.76 Ko)

Une possibilité . Il faudra mettre le code ci-dessous dans un modèle de feuille et utiliser ce modèle pour construire tous les onglets.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 4 Or Target.Row < 3 Then Exit Sub

    Dim nL As Long, nC As Integer
    nL = Target.Row
    nC = Target.Column
    If Trim(Cells(nL, nC - 1)) = "" Then
        Target.Value = ""
        Cells(nL + 1, nC).Select
    End If
End Sub

Bonjour le forum

Re Optimix

J'ai mis ta proposition comme demandé dans une feuilles (Tbl_1-A) pour essayer.

Ton code s’exécute jusqu’à:

Target.Value = ""

qui produit un incident

capture

quand je clic sur débogage fermeture du fichier

Pour l'instant je n'ai pas trouver la solution

Si tu as une solution

Merci

Bonsoir le forum

Après plusieurs essais voici ce que j'ai fait

Option Explicit

Private Sub Worksheet_Activate()
   Range("B3").Activate   'Repositionner le tableau
End Sub

    'PROCEDURE SI COLONNE C VIDE ALORS D VIDE

Private Sub Worksheet_Change(ByVal Target As Range)

 Dim nL As Long, nC As Integer
    If Target.Column <> 4 Or Target.Row < 3 Then Exit Sub 'SI colonne et Ligne hors cible sort procedure

        Application.EnableEvents = False    'Mise au repos de la  Gestion de l'événement--> Eviter que la macro se boucle à l'infini
            nL = Target.Row                'ligne
            nC = Target.Column              ' Colonne
            If Trim(Cells(nL, nC - 1)) = vbNullString Then       'Regarde à gauche si vide
                Target.Value = vbNullString                 'Si vide -> ne rien mettre
                Cells(nL + 1, nC).Activate            'Active Ligne suivante
            End If
        Application.EnableEvents = True
End Sub

Ce code permet de ne pas pouvoir écrire dans la colonne "D" si "C" est vide et passe à la cellule suivante.

Ce que je souhaite maintenant:

Si ( "C") est vide, Ne pas pouvoir écrire dans ("D:I") et passe à la cellule suivante.

12classeur1.xlsm (19.59 Ko)

Merci de vos suggestions

Bonne soirée à tous

Rechercher des sujets similaires à "mise forme conditionnelles"