IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

erreur d'execution '13', contraindre les saisies de l'utilisateur


Sujet :

VBA

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Points : 29
    Points
    29
    Par défaut erreur d'execution '13', contraindre les saisies de l'utilisateur
    c'est la premiere fois que je fais un programme en VB et j ai un petit probleme :

    Dans une case de dialogue nommé "Case1", je souhaiterais que l'utilisateur ne puisse mettre que des chiffres supérieurs ou égals à 0(l'utilisateur peut mettre un double). Ainsi je pourrais éviter cette horrible erreur d'execution '13'

    merci beaucoup de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Sur quelle application Office (Access, Excel, word) ?

    Starec

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Points : 29
    Points
    29
    Par défaut
    sous autocad

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Points : 29
    Points
    29
    Par défaut
    je viens de mettre ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function Erreur13(Case1 As String)
    On Error GoTo ErreurFatale
    MsgBox "veuillez mettre un chiffre > ou = à 0"
     
    UserForm1.Case1.Value = 0
     
    Exit Function
    ErreurFatale:
    MsgBox "veuillez mettre un chiffre > ou = à 0"
    End Function
    le pb, c'est que cette fonction UserForm1.Case1.Value = 0 ne fonctionne pas

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re,

    Je verrrais autrement, sur l'évènement BeforeUpdate de ta zone de texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub LaZoneDeTexte_BeforeUpdate(Cancel As Integer)
     
         If Lng(LaZoneDeTexte) > 0 then
         Else
              Cancel = True
         End If
    Exit sub
    Je l'ai tapé à la main, donc pas testé, car je n'ai pas Autocad.

    Starec

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Points : 29
    Points
    29
    Par défaut
    je viens encore de modiffier un peu ce que j ai fais, mais impossible que ca fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function Erreur13(case_name As TextBox)'fonction Erreur13 avec comme parametre une TexteBox "case_name"
     
    On Error GoTo ErreurFatale
    MsgBox "veuillez mettre un chiffre > ou = à 0"
    UserForm1.????  'ici je veux mettre dans ma TextBox une valeur par defaut 0
    Exit Function
    ErreurFatale:
    MsgBox "veuillez mettre un chiffre > ou = à 0"
    End Function
    Comment puis je faire pour mettre cette valeur par defaut?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Points : 20
    Points
    20
    Par défaut
    je suppose qu'après l'utilisation du textbox, l'utilisateur valide sa réponse non?
    si c'est le cas test la valeur à ce moment là et si la valeur n'est pas bonne lance lui un msgbox... ça évite de faire une fonction que teste le resultat après l'erreur 13.
    voilà ce que j'ai fait : une userform qui s'appelle aide avec un textbox1 dessus. Le sub test1 lance la userform, le sub2 traite la récupération de la valeur que l'utilisateur entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub test1()
    aide.Show
    End Sub
    Sub test2()
    Dim sngNB As Single
    Dim strNB As String
    strNB = aide.TextBox1.Text
     
    If IsNumeric(strNB) Then
    sngNB = aide.TextBox1.Text
    aide.Hide
    Else
    MsgBox ("erreu")
    End If
     
    End Sub

    si tu utilise autocad pourquoi tu n'interagis pas avec la ligne de commande ?
    Pour ma part j'utilise rarement des userform sous autocad pour que l'utilisateur aie la possibilité de se déplacer sur le plan...

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Points : 29
    Points
    29
    Par défaut
    Oui, c' est tout a fait çà.
    Je ne connaissais pas la fonction "IsNumeric" donc je me suis debrouillé pour gerer l erreur autrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'Vérification des erreurs de saisie
    Public Function Erreur13(case_name)
    Dim b As Double
    On Error GoTo Erreurnum13
    b = case_name.Value * 2
    case_name.BackColor = &H80000018
    Exit Function
    Erreurnum13:
        MsgBox "veuillez mettre un chiffre > ou = à 0"
        case_name.Value = 0
        case_name.BackColor = &HFF
    End Function
    si tu utilise autocad pourquoi tu n'interagis pas avec la ligne de commande ?
    Tout simplement parce que mon programme a comme 1er objectif de calculer la stabilité et le ferraillage d un mur de soutenement ce qui oblige à l utilisateur à rentrer bcp de données(dimensionssss, resistance beton, acier...). Le second est de creer le dessin

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Starec Voir le message
    Re,

    Je verrrais autrement, sur l'évènement BeforeUpdate de ta zone de texte.

    Starec
    Je viens de créer un autre programme et j'ai trouvé une meilleur façon de contraindre les saisies de l'utilisateur

    dans l'évènement Keypressed de ta zone de texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    KeyAscii=numerique(KeyAscii,form1.label10.text)
    puis dans un module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    'Vérifie si la valeur saisie dans le textbox est numérique en même temps que la saisie
    'Déclaration des Api
    Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCTYPE As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
    Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCTYPE As Long, ByVal lpLCData As String) As Long
    Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
    'Déclaration de la constante séparateur décimal
    Private Const LOCALE_SDECIMAL = &HE
    Dim Separateur As String
     
     Function numerique(ByVal KeyAscii, ByVal Text As String)
    separateur=DecimalSeparator()
    'Si le caractère n'est pas numérique ou pas le séparateur de décimal, on annule l'appui sur la touche
    If Not IsNumeric(Chr(KeyAscii)) And Chr(KeyAscii) = Separateur And KeyAscii <> 8  Then KeyAscii = 0
    'Si le caractère est le séparateur de décimal mais celui-ci a déjà été saisi, on annule l'appui sur la touche
    If Chr(KeyAscii) = Separateur And InStr(1, Text, Separateur, vbTextCompare) = 2 Then KeyAscii = 0
     
    numerique = KeyAscii
     
       End Function
    'récupère le séparateur de décimal dans les options régionales
    Public Property Get DecimalSeparator() As String
    Dim nLength As Long
    Dim nLocale As Long
        nLocale = GetUserDefaultLCID()
        nLength = GetLocaleInfo(nLocale, LOCALE_SDECIMAL, vbNullString, 0) - 1
        DecimalSeparator = Space$(nLength)
        GetLocaleInfo nLocale, LOCALE_SDECIMAL, DecimalSeparator, nLength
     
    End Property

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur d'execution avec les composants tJasperOutput et tJasperOutputExec
    Par hagen_71 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 13/10/2014, 15h50
  2. [XL-2007] Erreur d'execution 13 en changeant les paramètres régionaux
    Par Bobx dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/08/2009, 10h37
  3. GTK+ erreur d'execution fonction saisie de donnees
    Par Emyleet dans le forum GTK+ avec C & C++
    Réponses: 9
    Dernier message: 02/08/2006, 15h50
  4. Erreur IIS ou ASP ou les 2
    Par poirier dans le forum ASP
    Réponses: 8
    Dernier message: 30/06/2006, 21h37
  5. [javamail] erreur d'execution
    Par bibx dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 05/12/2003, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo