Case à remplir ?

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

  • Classeur1.xls
    18 KB · Affichages: 90
  • Classeur1.xls
    18 KB · Affichages: 87
  • Classeur1.xls
    18 KB · Affichages: 97

JCGL

XLDnaute Barbatruc
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

  • JC Classeur1(2).zip
    8.1 KB · Affichages: 43

job75

XLDnaute Barbatruc
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+
 

JNP

XLDnaute Barbatruc
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 :eek:.
Bonne nuit :cool:
 

Pièces jointes

  • Chiffre unique.xls
    46 KB · Affichages: 91
  • Chiffre unique.xls
    46 KB · Affichages: 88
  • Chiffre unique.xls
    46 KB · Affichages: 81

job75

XLDnaute Barbatruc
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:

JNP

XLDnaute Barbatruc
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 :eek:, et KeyPress utilisé dans un USF renvoi le mëme code ASCII :confused:). 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 :cool:
 

job75

XLDnaute Barbatruc
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:

nolich

XLDnaute Occasionnel
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 :eek:, et KeyPress utilisé dans un USF renvoi le mëme code ASCII :confused:).

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

@+
 

job75

XLDnaute Barbatruc
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:

JNP

XLDnaute Barbatruc
Re : Case à remplir ?

Re le forum :),
Merci Nolich, du coup, ça fonctionne avec les 2. Fichier corrigé joint.
Bonne journée :)
 

Pièces jointes

  • Chiffre unique.xls
    48 KB · Affichages: 90
  • Chiffre unique.xls
    48 KB · Affichages: 94
  • Chiffre unique.xls
    48 KB · Affichages: 93

Catrice

XLDnaute Barbatruc
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:

DJ FA

XLDnaute Occasionnel
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
 

Statistiques des forums

Discussions
312 488
Messages
2 088 858
Membres
103 978
dernier inscrit
bderradji