Empecher la saisie de certains caractere ds textbox

BabaDeathLord -  
NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Je suis en train de realiser un projet sur VBA qui consiste a faire une bataille navale.
Il ne me reste plus qu'une chose a faire, mais je peine a la trouver.
Il faudrait que dans la textbox ou je saisi la case que je veux frapper, je ne puisse saisir uniquement les caracteres A1 a T20 (toutes les cellules de cette plage) mais je ne trouve pas comment faire.

Avez vous des idees?
Merci

6 réponses

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    Visiblement, c'est simple :
    Sur l'evenement Change
    Tu fais un Mid$(Texte, 1,1) pour récupérer la lettre et tu testes
    Puis avec un Mid$(Texte,2) tu vérifies que c'est un numérique (IsNumeric) et tu vérifies que sa valeur est entre 1 et 20.
    1
  2. BabaDeathLord
     
    Jai peut etre une idee ca serait de verifier avec un if si le texte de la textbox est different de la valeur des cellules d'une plage (dans laquelle jai inscrit un par un chacune des cases possibles)?
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      avec deux listbox, une de A à T, l'autre de 1 à 20?
      que souhaites-tu qu'il se passe si quelqu'un tape autre chose?
      0
  3. BabaDeathLord
     
    Technique interssante mais c impossible je dois le rendre dans moins de 2h et je ne peux reecrire tout le code avec les variables de ligne et de colonnes ca serait trop long, et je suis deja a bout de nerf x(
    Je voudrais que ca renvoi une msgbox ("Erreur de saisie: cette case n'existe pas")

    Jai tenté ca actuellement
    If TextBox.Text <> ("A1:T20").Name then
    msgbox ("erreur")
    else
    Suite du code...
    Mais ca ne mache pas :(
    0
  4. BabaDeathLord
     
    http://www.bataillenavale-jeu-ifs.fr/jeu/
    Voila notre site si vous souhaitez voir le code afin de mieux comprendre
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. BabaDeathLord
     
    Merci beaucoup Henry, vous m'avez permis de resoudre partiellement le probleme, jai reussi a m'en servir pour la lettre mais je ny suis pas parvenu pour le chiffre.
    Je suis désolé de l'erreur que jai commise en creant un double sujet, je me doutais du resultat mais j'etais desesperé, je retiens la lecon
    0
    1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Quel test as-tu fais pour le nombre et quel est le résultat obtenu ?
      0
  7. BabaDeathLord
     
    Jai declare Txt, Txt3 As Variant
    (Avec Txt le contenu de la textbox en .Text)
    Puis dans l'afterupdate de la textbox:
    Txt3 = Mid(Txt, 2)
     If IsNumeric(Txt3) = False Or Txt3 > 20 Or Txt3 = 0 Then
        MsgBox ("Erreur de saisie, ce nombre n'existe pas sur le plateau")
         Exit Sub
                               Else
      End If

    Et jai la msbox quoi que je mette apres la lettre.

    EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
    Explications disponibles ici : ICI

    Merci d'y penser dans tes prochains messages.
    0
    1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Regardes en pas à pas, pourquoi tu as le souci :
      Essayes de faire du pas à pas (F8), et espionne les valeurs des variables (Shift+F9), tu peux aussi mettre des points d'arrêt (F9).

      Sinon, pour information, VB teste toutes les conditions, donc si Txt3 n'est pas un numérique, tu aura une erreur.
      Il faut que tu découpe ton test en 2 phases, une pour tester si c'est un nombre et l'autre pour tester sa plage de valeur (note "-1" est un nombre).
      0