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 ?
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 ).
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.
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