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
- Messages
- 358
- Excel
- 2003-2007 FR
- Inscrit
- 02/08/2011
- Emploi
- Consultant Test Performance / Audit
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.
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
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.
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