Limitation a la frappe caracteres dans excel

artie -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

je suis debutant dans excel.

je veux taper un texte dans un tableau excel et qu'a chaque frappe (y compris les espaces) le curseur passe automatiquement a la cellule suivante de la ligne, puis en fin de ligne ( a la 40 eme colonne ) a la première cellule de la ligne suivante.

merci d'avance
Configuration: Mac OS X
Safari 525.27.1

7 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Une proposition qui réparti tous les caractères d'une saisie dans B2:B6 sur les colonnes dans la limite de 40 car. :
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim i As Long, s As String
        If Target.Count > 1 Then Exit Sub
        If Intersect(Target, [B2:B6]) Is Nothing Then Exit Sub
        If Len(Target) > 40 Then
            MsgBox Len(Target) & " caractères !"
        Else
            Application.ScreenUpdating = False
            Application.EnableEvents = False
            s = Target
            For i = 1 To Len(s)
                Target.Offset(, i - 1) = Mid(s, i, 1)
            Next i
            Application.EnableEvents = True
            Application.ScreenUpdating = True
        End If
    End Sub 

    Ca ne te fait plus qu'un seul Enter par ligne.
    Si il faut découper les tranches de 40 car sur plusieurs lignes le préciser.
    eric

    En essayant continuellement, on finit par réussir.
    Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
    En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
    2
  2. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    Bonjour
    sauf erreur de compréhension de la question, essayez:
    1°) outil / option / Onglet "Modification"
    Cochez" déplacer sélection après validation"(ça doit déja être fait)
    choisir sens: Droite
    2°) sélectionner dans la feuille le champ à remplir complet:
    Nombre de colonnes voulues et nombre de lignes suffisant, (ou alors toutes la hauteur des colonnes choisies en sélectionnant sur la régle des entêtes)
    3° taper les caractères et entrée à chaque fois. Le curseur démarre à la première cellule en haut à gauche du champ et reviendra à la première colonne, ligne en dessous lorsqu'il aura atteint la limite du champ
    Si j'ai bien compris....!
    Crdlmnt
    1
    1. niceben
       
      on cherche je crois un moyen de taper le texte et qu'il se répartisse un caractère par cellule sans avoir à taper entrée entre chaque caractère (on utiliserait tab en ce cas).
      0
  3. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    Re
    il me semble toutefois avoir vérifié sur mon Excel (qui est peut être un spécial) que la cellule détectée par le clavier dans le cas d'une sélection multiple contigue est bien la première en haut à gauche, où rentre le premier texte frappé... comme indiqué au point N°3 de mon message 2.
    A noter que dans le cas de champs non alignés,c'est le dernier champ sélectionné qui engage le départ
    Je pense que la seule différence entre ma proposition et la demande tient au fait qu'il faut faire une entrée pour changer de cellule.
    Crdlmnt
    0
    1. artie
       
      Merci beaucoup mais mes nombreux essais n'ont pas donné de résultat.

      J ai trouvé un code qui déclenche un pop up quand le contenu d'une cellule dépasse le contenu autorisé

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      For Each cell In UsedRange
      If Len(cell.Value) > 1 Then
      MsgBox " Can't enter more than 1 character"
      cell.Value = ""
      End If
      Next

      End Sub

      C'est possible aussi dans la validation des données, j'aimerais qu au lieu de ce message excel execute, dés dépassement du nombre de caractères autorisés (1), la commande "entrée, pour que le caractère supplémentaire s inscrive automatiquement dans la cellule suivante . Est-ce possible en changeant une ligne du code? Je ne connais pas l'écriture de code et ne sais pas comment faire.
      Pour le changement de ligne au bout de 40 colonnes la solution que tu m as proposée ne marche pas sur mon excel

      Merci
      -1
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    C'est comme dit plus haut, l'événement "Selection_Change" n'intervient QU'APRES AVOIR CHANGER DE CELLULE ET PAS PENDANT !!
    Vaucluse : d'accord si ENTER mais j'ai dit Strictement Cad SANS ENTER
    peut-être un moyen.. API
    Mais ce serra asser "lourd" en code. Est-ce VRAIMENT nécessaire SANS Enter ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Raymond PENTIER Messages postés 58216 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Tu te dis débutant dans Excel. Alors laisse tomber les macros et utilise la méthode indiquée par Vaucluse dès le post 2.
    0
  7. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    Une autre façon de procéder, en activant chaque touches à l'ouverture du fichier. Dès que le caractère est frappé sans valider par "Entrée" , on passe à la cellule voisine. Seul inconvénient, il faut recopier chaque bout de programme pour chaque touche, mais ça répond à la question "d'Artie".

    Voici un échantillon
    Sub auto_open()
        'Activation des touches
        Application.OnKey "{ }", "Espace"
        Application.OnKey "{a}", "a"
        Application.OnKey "{b}", "b"
        Application.OnKey "{c}", "LettreC"
    End Sub
    
    Sub Espace()
        ActiveCell.Value = " "
        Deplacement
    End Sub
    
    Sub a()
        ActiveCell.Value = "a"
        Deplacement
    End Sub
    
    Sub b()
        ActiveCell.Value = "b"
        Deplacement
    End Sub
    
    Sub LettreC()
        ActiveCell.Value = "c"
        Deplacement
    End Sub
    
    Sub Deplacement()
        If ActiveCell.Column = 40 Then ActiveCell.Offset(1, -39).Select Else: ActiveCell.Offset(0, 1).Select
    End Sub
    
    Sub Auto_close()
        'désactivation des touches
        Application.OnKey "{ }", ""
        Application.OnKey "{a}", ""
        Application.OnKey "{b}", ""
        Application.OnKey "{LettreC}", ""
    End Sub
    

    A la fermeture du fichier, on désactive les touches
    A tester
    Cdlt
    0
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour tous,
    Si l'ont veux s'en tenir strictement à l'explication, ce n'est pas possible sur une feuille vu qu'il n'y a pas de détection du clavier dans une cellule active
    et quand une cellule est en édition, les macros aussi, sont inactive.
    Une éventuelle solution, la saisie se faisant dans un textBox
    A+
    -1