Forcer la saisi d'une cellule

Bonjour,

je voudrais faire le contrôle suivant :

Quand je vais saisir dans n'importe qu'elle ligne de la colonne A , un message d'erreur me dis qu'il faut d'abord saisir dans la cellule "B,i" .

est ce que ça se fait?

Merci

Salut,

Oui ca peut se faire avec une macro.

Exemple : Ouvre excel vierge pour faire un test; on se potionne sur la feuil1 (onglet), puis on tape ALT+F11

L'editeur VBA s'ouvre, on click sur Feuil1 (a gauche dans la treeview)

Puis colle le code suivant (ce code peut être amélioré)

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = "1" And IsEmpty(Cells(Target.Row, Target.Column + 1).Value) = True Then 'Si on a modifié une valeur dans la colonne A et que la colonne B est vide alors
    MsgBox "Vous devez saisir la cellule B" & Target.Row
End If
End Sub

Essaye, si tu tapes dans la colonne A et que la B n'est pas saisie tu recevras un message.

Dans l'exemple précedent on ne supprime pas la donnée saisie, si tu veux que lors de la saisie en colonne A si la colonne B est vide alors on supprime la donnée saisie en A en indiquant qu'il faut saisir d'abord en colonne B alors :

Private Sub Worksheet_Change(ByVal Target As Range)
If IsEmpty(Target.Cells.Value) = True Then End
If Target.Column = "1" And IsEmpty(Cells(Target.Row, Target.Column + 1).Value) = True Then    'Si on a modifié une valeur dans la colonne A et que la colonne B est vide alors

    MsgBox "Vous devez saisir la cellule B" & Target.Row
    Target.Cells.Clear
End If
End Sub

Dis moi si c'est ok pour toi.

++

Perfect...


*** un peut plus compliqué:

si j'ai le contenu France dans "A,i" alors je dois saisir d'abord E et F sinon

si je saisi autre chose, je devrais saisir seulement E

Est-ce possible?

Merci à vous

Salut,

Voici ma proposition :

Option Explicit
Public Flag As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Ligne As Long

If Target.Count > 1 Then Exit Sub
If Flag Then Exit Sub

Ligne = Target.Row

    If Not Application.Intersect(Target, Range("A" & Ligne)) Is Nothing Then
        Flag = True
        If Target = "France" Then
            If Target.Offset(0, 4) = "" Or Target.Offset(0, 5) = "" Then
                MsgBox ("Veuillez d'abord saisir les cellules E" & Target.Row & " et F" & Target.Row)
                Target.Activate
                Target.ClearContents
            End If
        Else
        If Target.Offset(0, 4) = "" Then
            MsgBox ("Veuillez d'abord saisir la cellule E" & Target.Row)
            Target.Activate
            Target.ClearContents
        End If
        End If
    Flag = False
    End If

End Sub

Cordialement.

30sparo-10-03.zip (9.73 Ko)

Merci beaucoup, ca marche tres bien!!!

j'ai un petit peut personalisé et ca a donné ce qui suit :

Option Explicit
    Public Flag As Boolean

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Ligne As Long

    If Target.Count > 1 Then Exit Sub
    If Flag Then Exit Sub

    Ligne = Target.Row

        If Not Application.Intersect(Target, Range("C" & Ligne)) Is Nothing Then
            Flag = True
            If Target <> "" Then
                If Target.Offset(0, 1) = "" Or Target.Offset(0, 2) = "" Or Target.Offset(0, 12) = "" Or Target.Offset(0, 35) = "" Then
                    MsgBox ("Infos manquantes")
                    Target.Activate
                    Target.ClearContents

                 End If

           End If

    Flag = False
    End If

End Sub

je voudrais ajouter le cas suivant : Si target<>""

si target offset(0,1)="AAA" sans changer les autres target offset

le but c'est d'ajouter un autre message si "AAA" est inséré dans D et que les autres cellules soient vides!

Merci encore une fois car la vous m'aidez à régler un problème qui traine depuis des mois!!!

Salut,

AAA = boursicotage Voici une solution, si j'ai bien compris ton problème :

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Ligne As Long

    If Target.Count > 1 Then Exit Sub
    If Flag Then Exit Sub

    Ligne = Target.Row

        If Not Application.Intersect(Target, Range("C" & Ligne)) Is Nothing Then
            Flag = True
            If Target <> "" Then
                If Target.Offset(0, 1) = "AAA" Then
                    If Target.Offset(0, 2) = "" Or Target.Offset(0, 12) = "" Or Target.Offset(0, 35) = "" Then
                        MsgBox ("La colonne D comporte la mention AAA. L'une ou l'autre des autres cellules contrôlées est vide")
                        Target.Activate
                        Target.ClearContents
                    End If
                Else
                If Target.Offset(0, 1) = "" Or Target.Offset(0, 2) = "" Or Target.Offset(0, 12) = "" Or Target.Offset(0, 35) = "" Then
                    MsgBox ("Infos manquantes")
                    Target.Activate
                    Target.ClearContents
                 End If
                 End If
           End If
    Flag = False
    End If

End Sub

A te relire.

25sparo-12-03.zip (10.90 Ko)

Tout simplement, merci !!!

Ça marche très bien!

Bonjour,

pour continuer sur ce sujet, j'aimerais qu'il me colorie les cellule qui ne sont pas encore remplies .

Merciiiii

Salut,

Un nouvel essai :

34sparo-20-03.zip (11.02 Ko)

Cordialement.

Rechercher des sujets similaires à "forcer saisi"