• Initiateur de la discussion Initiateur de la discussion DJ FA
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

DJ FA

XLDnaute Occasionnel
Voilà je voudrais savoir comment limiter à un chiffre par case et quand je rentre un chiffre j'aimerais que le curseur se positionne d'office sur la case suivante. merci à vous.
 

Pièces jointes

Re : Case à remplir ?

Bonjour à tous,

Utilisation de :
Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Application.MoveAfterReturn = True
Application.MoveAfterReturnDirection = xlToRight
End Sub

Entre un chiffre et valide par Entrée

A+ à tous
 

Pièces jointes

Re : Case à remplir ?

Bonsoir DJ FA, JCGL,

Autre chose, dans le code de la feuille :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A9:K9,M9:N9")) Is Nothing Or Target.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
Application.EnableEvents = False
Target = Left(Target, 1)
If Target.Address <> "$N$9" Then Target.Offset(0, 1 - (Target.Address = "$K$9")).Select
Application.EnableEvents = True
End Sub

A+
 
Re : Case à remplir ?

Bonsoir à tous 🙂,
Une solution interceptant la saisie. Par contre, ça ne marche qu'avec les chiffres du haut (1 au dessus du &, 2 au dessus du é, ...) mais pas avec le pavé numérique, je n'ai pas trouvé la correspondance pour OnKey 😱.
Bonne nuit 😎
 

Pièces jointes

Re : Case à remplir ?

Re, salut JNP, pas compris tes macros mais bon 🙂,

Il est souhaitable de contrôler que les entrées sont des chiffres, donc utiliser :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A9:K9,M9:N9")) Is Nothing Or Target.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
Application.EnableEvents = False
[COLOR="Red"]If Not IsNumeric(Target) Or Len(Target) > 1 Then Application.Undo: GoTo 1[/COLOR]
If Target.Address <> "$N$9" Then Target.Offset(0, 1 - (Target.Address = "$K$9")).Select
1 Application.EnableEvents = True
End Sub

Bonne nuit.

Edit : DJ FA si l'on veut un message d'alerte, remplacer la ligne en rouge par :

Code:
If Not IsNumeric(Target) Or Len(Target) > 1 Then Application.Undo: MsgBox "Un chiffre et un seul !", 48: GoTo 1

A+
 
Dernière édition:
Re : Case à remplir ?

Re Job75 🙂,
Notre ami souhaite que ce soit la saisie d'un chiffre qui déclenche le passage à la cellule suivante. Or, contrairement aux éléments d'USF, les événementielles de feuilles ne parraissent pas surveiller la saisie, mais uniquement la validation de la cellule, le changement de sélection, etc... D'où l'idée, une fois la sélection faite dans le champs qui nous intéresse, d'affecter à la touche "1" à une macro qui mets "1" et qui active la cellule suivante. Mon problème est que l'affectation de touche marche avec le clavier, mais pas avec le pavé numérique (le code pour ces touches ne figurent pas dans l'aide 😱, et KeyPress utilisé dans un USF renvoi le mëme code ASCII 😕). Maintenant, pour interdire une autre saisie, il faudrait désactiver toutes les touches (bonjour l'angoisse). A moins que la procédure KeyPress puisse être utilisée dans le code de feuille pour annuler la saisie si elle n'est pas celle demandée.
Bonne journée 😎
 
Re : Case à remplir ?

Bonjour DJ FA, le fil, le forum,

Merci JNP pour tes explications.

DJ FA si l'on souhaite protéger la cellule L9, utiliser :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
[COLOR="Red"]Application.EnableEvents = False
If Not Intersect(Target, Range("L9")) Is Nothing Then Range("L9") = "-"[/COLOR]
If Intersect(Target, Range("A9:K9,M9:N9")) Is Nothing Or Target.Count > 1 Then GoTo 1
If Target = "" Then GoTo 1
If Not IsNumeric(Target) Or Len(Target) > 1 Then Application.Undo: MsgBox "Un chiffre et un seul !", 48: [COLOR="Red"]SendKeys "{F2}":[/COLOR] GoTo 1
If Target.Address <> "$N$9" Then Target.Offset(0, 1 - (Target.Address = "$K$9")).Select
1 Application.EnableEvents = True
End Sub

Edit : ajouté SendKeys "{F2}"

A+
 
Dernière édition:
Re : Case à remplir ?

Bonjour DJ FA, JCGL, job75 et JNP, bonjour à toutes et à tous 🙂

Mon problème est que l'affectation de touche marche avec le clavier, mais pas avec le pavé numérique (le code pour ces touches ne figurent pas dans l'aide 😱, et KeyPress utilisé dans un USF renvoi le mëme code ASCII 😕).

Les codes des touches 0 à 9 du pavé numérique vont de vbKeyNumpad0 à vbKeyNumpad9 ou de 0x60 à 0x69.

@+
 
Re : Case à remplir ?

Re, salut nolich,

Enfin DJ FA, cerise sur le gâteau, si l'on veut contrôler qu'une case est remplie seulement si les cases précédentes le sont :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("L9")) Is Nothing Then Range("L9") = "-"
If Intersect(Target, Range("A9:K9,M9:N9")) Is Nothing Or Target.Count > 1 Then GoTo 1
If Target = "" Then GoTo 1
[COLOR="Red"]If Application.CountBlank(Range("A9", Target)) Then Application.Undo: Rows(9).SpecialCells(xlBlanks)(1).Select: SendKeys "{F2}": GoTo 1[/COLOR]
If Not IsNumeric(Target) Or Len(Target) > 1 Then Application.Undo: MsgBox "Un chiffre et un seul !", 48: SendKeys "{F2}": GoTo 1
If Target.Address <> "$N$9" Then [COLOR="Red"]Rows(9).SpecialCells(xlBlanks)(1)[/COLOR].Select
1 Application.EnableEvents = True
End Sub

Edit : attention, pour que SpecialCells(xlBlanks) fonctionne correctement, il faut que la cellule N9 ait bien des bordures, pour qu'elle soit la Dernière cellule prise en compte dans Rows(9).

Petite explication : dans toutes les procédures de recherche, pour gagner du temps, Excel se limite à la zone délimitée par Dernière cellule.

A+
 
Dernière édition:
Re : Case à remplir ?

Bonsoir,

Pour JNP, les codes pour le pavé numérique :
96 => 0
97
98
99
100
101
102
103
104
105 => 9

à saisir : Application.OnKey "{105}", "Test"

Edit : n'avais pas lu le poste de nolich.
 
Dernière édition:
Re : Case à remplir ?

Ca fonctionne assez bien, mais j'ai encore une demande:

Quand je rentre un chiffre dans une case est-ce possible sans appuyer sur entrée que le curseur se place automatiquement sur la case d'à coté ? Et pour l'endroit du trait d'union pareil. Merci
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
184
Réponses
5
Affichages
214
Réponses
43
Affichages
837
Réponses
4
Affichages
339
Retour