Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[VBA excel 2007] Saisie numérique textbox erreur


Invité pml

Messages recommandés

Bonjour,

 

Je suis newbie dans la programmation vba.

Voila mon problème, j'ai un userform avec plusieurs textbox. Et j'aimerai qu'il n'y ai que la saisie numérique possible. J'ai donc créé une classe pour ne pas être obliger de répéter le code pour chaque textbox.

Voici mon code:

 

Le module de classe s'appelle : TxtBoxClasse

 

Public WithEvents TxtBox As MSForms.TextBox  

Private Sub TxtBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)  
  If Not IsNumeric(Chr(KeyAscii)) And Chr(KeyAscii) <> "." Then  
	KeyAscii = 0  
End If  
End Sub

 

 

Dim TxtBoxClasses(1 To 5) As TxtBoxClasse  

Private Sub UserForm_Initialize()  
Dim I As Integer  
For I = 1 To 5  
Set TxtBoxClasses(I) = New TxtBoxClasse  
Set TxtBoxClasses(I).TxtBox = UserForm1.Controls("TextBox" & I)  
Next I  
UserForm1.Show  
End Sub

 

Et quand je simule j'ai une erreur (erreur d'exécution '91': Variable objet ou variable de bloc With non définie)

 

Pouvez-vous m'aider?

Merci pour votre réponce.

Lien vers le commentaire
Partager sur d’autres sites

ton erreur vient du fait que tu demande a ce la forme retourne un integer. "Private Sub TxtBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)"

 

essaye de remplacer le and par un or.

car là tu demande a ce que les 2 conditions soient simultanées donc a mon avis tu ne rentre jamais dans le if.

Lien vers le commentaire
Partager sur d’autres sites

Pas tout lu, mais juste un truc tellement énorme qu'il m'a sauté aux yeux :

Private Sub TxtBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)  
  If Not IsNumeric(Chr(KeyAscii)) And Chr(KeyAscii) <> "." Then  
	KeyAscii = 0  
End If  
End Sub

Si tu passes KeyAscii par valeur (et non par adresse / référence) ça ne servira absolument à rien de changer sa valeur à l'intérieur de la procédure : quand tu sortiras de cette procédure la variable que tu auras passé en paramètre aura toujours la même valeur...

Lien vers le commentaire
Partager sur d’autres sites

Invité stagml

Bonjour,

 

J'ai un userform avec une textbox. Et je ne veux que la saisie de chiffre dans la textbox, les chiffre à virgule sont possibles aussi.

J'ai le code suivant:

 

Private Sub TextBox0_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
If Not IsNumeric(Chr(KeyAscii)) And Chr(KeyAscii) <> "." Then 
	KeyAscii = 0 
End If 
End Sub

 

Mais voila le problème, je peux taper "x" fois la virgule.

Comment faire pour ne permettre la saisie de la virgule qu'une seule fois dans la textbox.

Merci de m'aider.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour.

 

Tu peux peut être déclarer une variable globale de type booléen que tu initialise à false, et qui passe à true quand une première virgule est tapée.

Par exemple tu déclare la variable "Virgule" et tu l'initialise à false, puis :

 

Private Sub TextBox0_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If Not IsNumeric(Chr(KeyAscii)) And Chr(KeyAscii) <> "." Then

KeyAscii = 0

End If

If Chr(KeyAscii)="." and not Virgule then virgule=True

if Chr(KeyAscii)="." and virgule then KeyAscii=0

End Sub

Lien vers le commentaire
Partager sur d’autres sites

Oui normal j'ai fait une boulette

 

Comme ça ça devrait marcher :

 

Private Sub TextBox0_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If Not IsNumeric(Chr(KeyAscii)) And Chr(KeyAscii) <> "." Then

KeyAscii = 0

End If

If Chr(KeyAscii)="." then

if not Virgule then virgule=True else KeyAscii=0

End If

End Sub

Lien vers le commentaire
Partager sur d’autres sites

Invité stagml

J'ai encore une petite question.

Je viens de me rendre compte que quand je tape un nombre à virgule dans la textbox et que je l'efface pour un taper un autre nombre à virgule je ne peux plus mettre le point.

Comment remédier à ce problème.

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...