Interdire le texte dans un champs - VB/VBA/VBS - Programmation
Marsh Posté le 05-10-2005 à 17:25:07
| TopFrunix a écrit : Bonjour,  | 
 
 
Utilise la fonction "Validation" que tu trouveras dans le menu "Data" -> "Validation". 
Sélectionne le critère "Permettre" dont la valeur sera "Nombre Entier" ou "Decimal" 
 
Marsh Posté le 05-10-2005 à 17:32:39
je n'ai pas le menu "data" 
Pour les menu j'ai "fichier" "edition" "affichage" "projet" "format" "debogage" "execution" "requete" "schema" "outils" "complements" "fenetre" "?" 
Je n'ai pas trouvé "valisation" dans ces menus... 
Tu peux me re-expliquer ?
Marsh Posté le 05-10-2005 à 19:57:56
| TopFrunix a écrit : je n'ai pas le menu "data"  | 
 
 
Dans XL pas dans visual basic .... puis si tu veux tu l'enregistre comme nouvelle macro et tu l'utilise après  
Marsh Posté le 05-10-2005 à 20:30:53
Comment tu fais exactement ? 
J'ai trouvé la boite de dialogue, j'ai mis "decimal" avec un minimum à "0". 
Le code fonctionne bien dans la case XL, apres tu le met comment dans VB ? 
Si tu peux detailler car c'est la premiere fois que je fais cette anip'. 
Marsh Posté le 05-10-2005 à 21:01:57
| TopFrunix a écrit : Comment tu fais exactement ?  | 
 
 
Tu fais menu "Outils" -> "Macro" -> "Nouvelle Macro ...", puis "OK" 
Tu fais alors la manipulation que je t'ai donnée précédemment puis tu clicque sur le bouton arrêt (le carré sur la barre d'outils) 
tu vas and VB et tu regardes dans le module "module1", tu y veras la macro enregistrée.
Marsh Posté le 05-10-2005 à 21:12:31
En fait voila mon programme. 
 
 
Option Explicit 
Private prix As Single 
Private CoefForfait As Single 
Private CoefReduc As Single 
Private TVA As Single 
 
 
Private Sub CheckForfait_Click() 
If CheckForfait.Value = 0 Then FrameForfait.Enabled = False 
If CheckForfait.Value = 1 Then FrameForfait.Enabled = True 
calcul 
 
End Sub 
 
Private Sub CheckReduction_Click() 
If CheckReduction.Value = 0 Then FrameReduction.Enabled = False 
If CheckReduction.Value = 1 Then FrameReduction.Enabled = True 
calcul 
 
End Sub 
 
 
Private Sub Form_Load() 
prix = 1.2 
TVA = 0.804 
 calcul 
TextHt.Text = Val(TxtTtc.Text) * TVA 
End Sub 
 
Private Sub calcul() 
  
 'prix normal 
 If CheckForfait.Value = 0 And CheckReduction.Value = 0 Then TxtTtc.Text = Val(TextTicket.Text) * prix 
 'prix we 
 If CheckForfait.Value = 1 And CheckReduction.Value = 0 And TxtWe.Value = True Then TxtTtc.Text = Val(TextTicket.Text) * prix * 0.3 * 2 
 
 'prix decouverte 
 If CheckForfait.Value = 1 And CheckReduction.Value = 0 And TxtDecouverte.Value = True Then TxtTtc.Text = Val(TextTicket.Text) * prix * 0.5 * 7 
 
 'reduction 30% 
 If CheckForfait.Value = 0 And CheckReduction.Value = 1 And Txt30.Value = True Then TxtTtc.Text = Val(TextTicket.Text) * prix * 0.7 
 
 'reduction 50% 
 If CheckForfait.Value = 0 And CheckReduction.Value = 1 And Txt50.Value = True Then TxtTtc.Text = Val(TextTicket.Text) * prix * 0.5 
 
 'reduction 75% 
 If CheckForfait.Value = 0 And CheckReduction.Value = 1 And Txt75.Value = True Then TxtTtc.Text = Val(TextTicket.Text) * prix * 0.25 
 
 'Reduction 30 et forfait WE 
 If CheckForfait.Value = 1 And TxtWe.Value = True And CheckReduction.Value = 1 And Txt30.Value = True Then TxtTtc.Text = Val(TextTicket.Text) * prix * 0.7 * 0.3 * 2 
 
 'Reduction 50 et forfait WE 
 If CheckForfait.Value = 1 And TxtWe.Value = True And CheckReduction.Value = 1 And Txt50.Value = True Then TxtTtc.Text = Val(TextTicket.Text) * prix * 0.5 * 0.3 * 2 
 
 'Reduction 70 et forfait WE 
 If CheckForfait.Value = 1 And TxtWe.Value = True And CheckReduction.Value = 1 And Txt75.Value = True Then TxtTtc.Text = Val(TextTicket.Text) * prix * 0.25 * 0.3 * 2 
 
 'Reduction 30 et forfait decouverte 
 If CheckForfait.Value = 1 And TxtDecouverte.Value = True And CheckReduction.Value = 1 And Txt30.Value = True Then TxtTtc.Text = Val(TextTicket.Text) * prix * 0.7 * 0.5 * 7 
 
 'Reduction 50 et forfait decouverte 
 If CheckForfait.Value = 1 And TxtDecouverte.Value = True And CheckReduction.Value = 1 And Txt50.Value = True Then TxtTtc.Text = Val(TextTicket.Text) * prix * 0.5 * 0.5 * 7 
 
 'Reduction 70 et forfait decouverte 
 If CheckForfait.Value = 1 And TxtDecouverte.Value = True And CheckReduction.Value = 1 And Txt75.Value = True Then TxtTtc.Text = Val(TextTicket.Text) * prix * 0.25 * 0.5 * 7 
 
End Sub 
 
 
Private Sub TextTicket_Change() 
 
calcul 
TextHt.Text = Val(TxtTtc.Text) * TVA 
Macrovb 
End Sub 
 
Private Sub Txt30_Click() 
calcul 
 
End Sub 
 
 
Private Sub Txt50_Click() 
calcul 
 
End Sub 
 
Private Sub Txt75_Click() 
calcul 
 
End Sub 
 
Private Sub TxtDecouverte_Click() 
calcul 
 
End Sub 
 
Private Sub TxtTtc_Change() 
TextHt.Text = Val(TxtTtc.Text) * TVA 
End Sub 
 
Private Sub TxtWe_Click() 
calcul 
TextHt.Text = Val(TxtTtc.Text) * TVA 
End Sub 
 
Sub Macrovb() 
' 
' Macrovb Macro 
' Macro enregistrée le 05/10/2005 
' 
 
' 
    With Selection.Validation 
        .Delete 
        .Add Type:=xlValidateDecimal, AlertStyle:=xlValidAlertStop, Operator _ 
        :=xlGreater, Formula1:="0" 
        .IgnoreBlank = True 
        .InCellDropdown = True 
        .InputTitle = "" 
        .ErrorTitle = "Donnée non valide" 
        .InputMessage = "" 
        .ErrorMessage = "Veuillez entrer des chiffres !" 
        .ShowInput = True 
        .ShowError = True 
    End With 
End Sub 
 
En bleu il y a le code issu de XL, j'aimerai qu'il s'applique à une case qui se nomme "TextTicket.Text". 
Si tu sais faire la correction je suis preneur. Pour le moment j'ai juste fait un copié/collé du code que je voulais (macro XL) dans monprogramme.
Marsh Posté le 05-10-2005 à 23:18:01
J'ai un message d'erreur lors de l'execution du programme... 
"erreur de compilation : 
L'objet with doit etre de type defini par l'utilisateur, Object ou Variant" 
Qu'est-ce que je dois changer ? 
 
 
 
J'ai juste changer le code par : 
Sub Macrovb()  
'  
' Macrovb Macro  
' Macro enregistrée le 05/10/2005  
'  
  
'  
    With TextTicket.Text   
        .Delete  
        .Add Type:=xlValidateDecimal, AlertStyle:=xlValidAlertStop, Operator _  
        :=xlGreater, Formula1:="0"  
        .IgnoreBlank = True  
        .InCellDropdown = True  
        .InputTitle = ""  
        .ErrorTitle = "Donnée non valide"  
        .InputMessage = ""  
        .ErrorMessage = "Veuillez entrer des chiffres !"  
        .ShowInput = True  
        .ShowError = True  
    End With  
End Sub 
Marsh Posté le 06-10-2005 à 09:16:40
| TopFrunix a écrit : J'ai un message d'erreur lors de l'execution du programme...  | 
 
 
Remplace, dans le code suivant, le "<feuille>" par le nom de la feuille dans laquelle se trouve ton textticket.text ... 
 
with <feuille>.TextTicket.Text 
 
(bien que je me demande si ca s'applique à une "forme" ... car tu parlais de case au départ !!!)
Marsh Posté le 06-10-2005 à 09:40:26
Salut, 
 
il manque le validation et il faut placer ce code dans le worksheet_selectionchange de la feuille qui contient la cellule à valider, comme ça la validation se fait en cours de saisie et nom au lancement de la macro. 
 
| Code : 
 | 
 
pour peu effectivement qu'il s'agisse d'une cellue et non d'un camp à remplir dans un formulaire. 
bon courage 
Marsh Posté le 06-10-2005 à 15:10:17
L'auteur du topic travaille sous VB6 et pas sous VBA excel, arretez de lui donner des techniques qu'il ne peut pas utiliser.
Marsh Posté le 06-10-2005 à 15:19:57
ReplyMarsh Posté le 06-10-2005 à 15:32:42
Désolée topfrunix, comme l'a fait remarqué mareek, mon post de réponse ne colle pas avec ce que tu annonçais dans ton premier post. Il ne peut coller que dans le VB liè à excel. 
 
J'espère que quelqu'un d'autre pourra t'aider. 
Marsh Posté le 06-10-2005 à 16:18:36
| TopFrunix a écrit : C'est pas possible ?  | 
 
Je connais pas de solution simple. la seule que je vois c'est de vérifier ce que l'utilisateur tape en temps réel (via l'évennement txtbox_change)
Marsh Posté le 06-10-2005 à 17:58:57
Je connais pas les fonctions de VB6, jen fait depuis deux cours... 
Tu peux expliquer comment cette fonction marche et bloquer toutes les lettres ?
Marsh Posté le 06-10-2005 à 18:04:11
L'evenement change se produit lorsque le contenu de la textbox change. Pour bloquer les lettres, il faut vérifier le contenu de la textbox à chaque fois qu'il change et virer les lettres du texte.
Marsh Posté le 06-10-2005 à 22:12:51
sur l'evenement keypress de ton TextBox 
définit l'intervalle de ton KeyAscii  
 
Pour Saisir que des nombres:  
|   | 
 
 
Pour Saisir que du texte : 
|   | 
 
 
Astuces : 
|   | 
Marsh Posté le 06-10-2005 à 23:21:54
meri je vais essayer. 
Je vais chercher sur le net les correspondance du clavier car je ne sais pas à quoi correspond "90" "97" 122"... De cette maniere je saurrais même comment retraintre certain chiffres ou autre. 
Encore merci
Marsh Posté le 07-10-2005 à 07:39:34
| TopFrunix a écrit : meri je vais essayer.  | 
 
regarde ici   
 
Marsh Posté le 05-10-2005 à 17:07:19
Bonjour,
Je débute la sous visual basic 6.
Je voudrais interdire la saisie de lettre et ne laisser que la saisie de chiffres possible dans une case...
Comment peut on réaliser cette fonction ?
Merci d'avance