Changement de cellule si cellule contient 8 caractères

Fermé
helenec876 Messages postés 3 Date d'inscription mercredi 4 mars 2015 Statut Membre Dernière intervention 5 mars 2015 - 4 mars 2015 à 15:45
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 6 mars 2015 à 11:21
Bonjour,

Je cherche comment programmer un changement de cellule dès que celle ci contient au minimum 8 chiffres.
Exemple : en A1 je tape 45245236, je voudrais passer automatiquement à la cellule du dessous sans avoir a faire "entrée" à chaque fois.

Merci de votre aide,

Cdt,

Helene
A voir également:

6 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
4 mars 2015 à 21:36
Bonsoir
essayez ceci
https://www.cjoint.com/c/ECevUMsKOHK
cdlt
3
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
5 mars 2015 à 16:56
Bonsoir
Voilà la modif
https://www.cjoint.com/c/ECfrhmJHRz9
Cdlt
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 6/03/2015 à 08:30
Bonjour Frenchie, bonjour tout le monde,

J'ajoute +100 au +100 de ThauTheme, se qui place la mise à plus de 200...

Une petite variante en complément de ta procédure, en utilisant une macro paramétrée. OnKey le permet en encadrant le nom et le paramètre de la macro de simple quote ' :
Application.OnKey "{48}",  "'maMacro 48'"

Ce qui nous donne :
Sub auto_open()
    Dim i As Byte
    'désactivation des touches du pavé alphanumérique
    For i = 48 To 57
        Application.OnKey "{" & i & "}", "'Chiffre " & i & "'"
    Next
    'désactivation des touches du pavé numérique
    For i = 96 To 105
        Application.OnKey "{" & i & "}", "'Chiffre " & i & "'"
    Next
End Sub

Sub Chiffre(Num As Byte)
    If Len(ActiveCell) >= 8 Then Exit Sub 'Sécurité supplémentaire pour interdire de pouvoir taper un chiffre dans une cellule déjà pleine
    ActiveCell.Value = ActiveCell.Value & IIf(Num > 57, Chr(Num - 48), Chr(Num))
    If Len(ActiveCell) >= 8 Then ActiveCell.Offset(1, 0).Select
End Sub

Sub Auto_close()
    Dim i As Byte
    'désactivation des touches du pavé alphanumérique
    For i = 48 To 57
        Application.OnKey "{" & i & "}"
    Next
    'désactivation des touches du pavé numérique
    For i = 96 To 105
        Application.OnKey "{" & i & "}"
    Next
End Sub


Nota : Pour passer plusieurs paramètres à une macro paramétrée via Onkey, il convient de séparer les paramètres d'une virgule. Le premier paramètre n'est toutefois séparé du nom de la macro que par un espace. Toujours entouré le tout de '...
Exemple :
Dim i As Byte, p As Byte, q As Byte
Application.OnKey "{48}", "'maMacro " & i & ", " & p & ", " & q & "'"
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
6 mars 2015 à 10:19
Bonjour pijaku
Merci pour l'encouragement ainsi que pour l'amélioration du programme, j'en prends acte pour l'avenir.
Bonne journée
Bien cordialement
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
6 mars 2015 à 10:58
et Un + pour Frank après celui de ce matin pour Frenchie :o))
Discussion plus que précieuse et enrichissante
Bravo à tous les 2
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
6 mars 2015 à 11:21
Merci Michel, ça fait plaisir.
A+
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
4 mars 2015 à 17:27
bonjour Hélène, bonjour le forum,

je crains que ce que tu demandes ne soit pas possible directement dans une cellule. Aucune action ne se fait tant que la cellule n'est pas validée...
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
4 mars 2015 à 22:24
Bonsoir le fil, bonsoir le forum,

Écrit de mon propre sang, sur l'écran de mon PC : Frenchie m'a tué...

Je ne peux que mettre +1 mais ça mérite un +100 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
5 mars 2015 à 03:16
Bonjour
Un petit correctif qui annule et remplace le fichier précédent. (je ne désactivais pas toutes les touches à la fermeture).Voilà qui est fait.
https://www.cjoint.com/c/ECfdygIeYQz
cdlt
0
helenec876 Messages postés 3 Date d'inscription mercredi 4 mars 2015 Statut Membre Dernière intervention 5 mars 2015
5 mars 2015 à 08:14
Bonjour Frenchie,

Merci pour ton aide !!! C'est vraiment super !!!!!
Ca va vraiment me changer la vie !!!!!
Pas contre, peux tu m'expliquer comment tu as fait?
A quoi sert l'activation / desactivation des touches ?
Et ça, c'est quoi ?
Sub Chiffre8()
ActiveCell.Value = ActiveCell.Value & "8"

Pourquoi ça ne marche pas si on met seulement :
Sub Deplacement()
If Len(ActiveCell) = 8 Then ActiveCell.Offset(1, 0).Select


Merci pour tes explications, j'essaye d'apprendre tout douvement le VBA.

Cdt,
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
5 mars 2015 à 08:52
Bonjour
Activation:
Quand on frappe la touche correspondant au code entre parenthèse , on déclenche la macro entre guillemets. ex: .OnKey "{96}", "Chiffre0"
code 96 =0, donc quand action sur la touche 0 le programme va chercher la macro "Sub Chiffre0".
Toutes les touches choisies sont activées dès l'ouverture du fichier.
Que fait la macro "Sub Chiffre0" ?:
elle ajoute un 0 au précédent contenu de la cellule, et le tout est recopié dans la même cellule. c'est la ligne ActiveCell.Value = ActiveCell.Value & "0" qui traite cela.
Après tout ça, il faut vérifier si on a atteint les 8 caractères (c'est le rôle de la macro "Sub déplacement"). Si ce n'est pas le cas, on sort du programme, sinon on passe à la cellule suivante.

Pourquoi ça ne marche pas si on met seulement ?:
Sub Deplacement()
If Len(ActiveCell) = 8 Then ActiveCell.Offset(1, 0).Select

Parce qu'il faut un élément déclencheur, et le déclencheur c'est l'action précédente.
Désactivation:
En fin de programme, il est impératif de revenir au fonctionnement normal des touches (c'est à dire qui ne déclenche aucune action lors d'une frappe). Ceci se fait automatiquement à la fermeture du fichier.
Voilà, est-ce un peu plus clair?
Bonne journée
CDLT
0
helenec876 Messages postés 3 Date d'inscription mercredi 4 mars 2015 Statut Membre Dernière intervention 5 mars 2015
5 mars 2015 à 09:06
Merci pour tes explications, c'est trés clair.
Par contre juste un dernier point : j'ai remarqué que la macro ne fonctionne qu'avec le pavé numérique. ( codes clavier de 96 à 105 si j'ai bien compris) comment puis je changer cela pour que cela fonctionne avec les chiffres au dessus du clavier. MAJ+& pour le 1 par exemple.

Merci bcp,
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338 > helenec876 Messages postés 3 Date d'inscription mercredi 4 mars 2015 Statut Membre Dernière intervention 5 mars 2015
5 mars 2015 à 09:08
Je répondrai plus tard, je dois m'absenter pour la journée
0