Changement de cellule si cellule contient 8 caractères

helenec876 Messages postés 3 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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

6 réponses

  1. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonsoir
    Voilà la modif
    https://www.cjoint.com/c/ECfrhmJHRz9
    Cdlt
    1
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      1. Frenchie83 Messages postés 2254 Statut Membre 339 > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Merci Michel, ça fait plaisir.
        A+
        0
  2. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  3. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
    1. helenec876 Messages postés 3 Statut Membre
       
      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
  6. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
    1. helenec876 Messages postés 3 Statut Membre
       
      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
      1. Frenchie83 Messages postés 2254 Statut Membre 339 > helenec876 Messages postés 3 Statut Membre
         
        Je répondrai plus tard, je dois m'absenter pour la journée
        0