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 SubEssaye, 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 SubDis 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 SubCordialement.
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 Subje 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 SubA 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