[Excel] Forcer l'usager à completer une case

Hello

Ca fait 2 jours que je me gratte la tete sur un problème.
J’ai créé une page Excell pour mon boulot qui sera distribuée à pas mal de monde. Et je ne veux pas que ces personnes puissent modifier n’importe quoi, n’importe comment.

Explications:
J’ai une case disons A1 que je dois completer.
Une fois la valeur entrée dans la case A1, je valide avec ENTER.
Et là, je veux que le curseur passe automatiquement sur la case A2. Normal…

Ensuite, et c’est là que ça devient drôle, je veux que l’utilisateur ne puisse rien faire d’autre que d’entrer une valeur dans la case A2.
Si il ne veux pas insérer de valeur, il doit retourner en arriere en vidant la case A1

Est-ce possible ?
En visual basic ça doit être faisable ça non ?

EDIT: Ortho, titre, etc…

ben au pire des cas tu verrouilles toutes les cases sauf A1 et A2 et tu proteges la feuille

Tu as de la chance, je m’« amuse » à ce genre de chose depuis quelques semaines aux TAF (et je devrais en avoir encore pour quelques mois :stuck_out_tongue: ).

En VBA, tu peux faire à peux prêt ce que tu veux. Comme le dis BadAcid, je te conseille déjà pour simplifier de protéger toutes les cellules que l’utilisateur ne doit pas modifier. Ensuite, si tu connais un peu VBA, regarde la méthode Worksheet_SelectionChange(Target as Range), elle fera ton bonheur, tu pourras tester si par exemple tu veux modifier A2 que A1 est bien rempli et te positionner sur A1 avec un beau ActiveWorksheet.Range(« A1 »).Select.

Ben non justement, je peux pas utiliser le verouillage de la page simplement parce que des cases comme la A1, y en a plein…

Par contre Zgoblin, tsi tu avais un exemple concret, je suis TRES preneur. tu peux attacher un .xls ?

tu mets ce code dans la partie code VBA de ta feuille excel :

[code]Option Explicit

'-- La dérniére cellule séléctionnée
Option Explicit

'-- La dernière cellule sélectionnée
Private LastSelCel As String

Private Sub Worksheet_Activate()
’-- On récupéra la cellule active de la feuille
LastSelCel = ActiveCell.Row & “:” & ActiveCell.Column
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim i			   As Long
Dim v			   As Variant

If (LastSelCel = "") Then
	'-- On sauve la dernière cellule sélectionnée
	LastSelCel = "1:1"
	Cells(1, 1).Select
Else
	'-- On décompose l'adresse de la cellule
	v = Split(LastSelCel, ":")
	'-- On vérifie les colonnes d'abord
	If (Target.Cells.Column = v(1)) Then
		'-- Est ce qu'on descend ou on remonte?
		If (Target.Cells.Row = CLng(v(0))) Then
			'-- Ne rien faire
		ElseIf (Target.Cells.Row - CLng(v(0)) = 1) Then
			'-- On descend, on s'assure que la cellule d'avant est bien remplie
			If Len(Trim(Cells(CLng(v(0)), CLng(v(1))).Value)) = 0 Then
				'-- Sinon : repositionner le curseur
				Cells(CLng(v(0)), CLng(v(1))).Select
			Else
				LastSelCel = Target.Cells.Row & ":" & Target.Cells.Column
			End If
		ElseIf (Target.Cells.Row - CLng(v(0)) = -1) Then
			'-- On remonte
			If Len(Trim(Cells(CLng(v(0)), CLng(v(1))).Value)) <> 0 Then
				Cells(CLng(v(0)), CLng(v(1))).Select
			Else
				LastSelCel = Target.Cells.Row & ":" & Target.Cells.Column
			End If
		Else
			'-- On se déplace n'importe comment
			Cells(CLng(v(0)), CLng(v(1))).Select
		End If
	Else
		'-- On se remet en place
		Cells(CLng(v(0)), CLng(v(1))).Select
	End If
End If

End Sub[/code]

essaies la macro maintenant.