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

Macros et VBA Excel Discussion :

VBA - Vérification de saisi de 2 textbox [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    alternant ingénieur production d'energie
    Inscrit en
    Août 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : alternant ingénieur production d'energie
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2018
    Messages : 4
    Par défaut VBA - Vérification de saisi de 2 textbox
    Bonjour à tous,

    Je suis confronté à un problème. Je réalise une macros de calcul de surface de formes (cercle, triangle, rectangle...). je souhaite vérifier si les textbox sont remplies ou pas lors du clic sur le bouton de calcul. Cela fonctionne très lorsque je n'ai qu'une seule textbox mais j'ai un message d'erreur lorsque j'en ai 2. en fait je cherche a dire "si une des textbox ou les 2 sont vides, afficher un message d'erreur". J'utilise ce code pour une autre macros avec un seule textbox à vérifier et ça fonctionne très bien. Je ne vois pas ou est l'erreur

    Voici mon code (c'est la partie en gras qui doit poser problème) :

    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
    Private Sub CommandButton4_Click()
    
    Pi = WorksheetFunction.Pi
        If ComboBox1.Value = "Cercle" Then
            TextBox6.Value = (TextBox4.Value * TextBox4.Value) * Pi
            End If
        If ComboBox1.Value = "Carré" Then
            TextBox6.Value = TextBox4.Value * TextBox4.Value
            End If
        If ComboBox1.Value = "Triangle" Then
            TextBox6.Value = (TextBox4.Value * TextBox4.Value) / 2
            End If
        If ComboBox1.Value = "Rectangle" Then
            TextBox6.Value = TextBox4.Value * TextBox5.Value
            End If
        If ComboBox1.Value = "Losange" Then
            TextBox6.Value = (TextBox4.Value * TextBox5.Value) / 2
        End If
        If TextBox4.Value = "" Then
            MsgBox "Entrer une valeur numérique positive avant de convertir"
        Else
        If TextBox5.Value = "" Then
            MsgBox "Entrer une valeur numérique positive avant de convertir"
        Else
        If texbox4.Value = "" And TextBox5.Value = "" Then
            MsgBox "Entrer une valeur numérique positive avant de convertir"
        End If
    End Sub
    Il s'agit surement d'une petite chose à régler mais je suis assez novice dans le domaine et ne comprend pas pourquoi ça ne marche pas.

    Merci pour votre aide

    Etienne

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    bonjour,

    En remplaçant ton code en gras par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If texbox4.Value = "" Or TextBox5.Value = "" Then
    MsgBox "Entrer une valeur numérique positive avant de convertir"
    End If
    cela devrait résoudre ton souci.

  3. #3
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Et surtout en procédant au calcul après le test...
    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
     
    Private Sub CommandButton4_Click()
       If TexBox4.Value = "" Or TextBox5.Value = ""  Or ComboBox1.Value = "" Then
          MsgBox "Entrer une valeur numérique positive avant de convertir"
       Else
          TextBox6.Value = Calcule(TexBox4.Value, TextBox5.Value, ComboBox1.Value)
       End If
    End Sub
     
    Private Function Calcule(T4 As String, T5 As String, C1 As String) As Double
    Dim Pi As Single
       Pi = WorksheetFunction.Pi
       Select Case C1
          Case "Cercle"
             Calcule = Val(T4) * Val(T4) * Pi
          Case "Carré"
             Calcule = Val(T4) * Val(T4)
          Case "Triangle"
             Calcule = (Val(T4) * Val(T4)) / 2
          Case "Rectangle"
             Calcule = Val(T4) * Val(T5)
          Case "Losange"
             Calcule = (Val(T4) * Val(T5)) / 2
       End Select
    End Function
    Ne te restera qu'à tester que les valeurs saisies dans tes TextBox sont bien des nombres.

  4. #4
    Membre à l'essai
    Homme Profil pro
    alternant ingénieur production d'energie
    Inscrit en
    Août 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : alternant ingénieur production d'energie
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2018
    Messages : 4
    Par défaut
    Bonjour anasecu, pijaku, et merci pour vos réponses.

    anasecu j'avais essayé cette opportunité mais ça ne fonctionne pas non plus.

    pijaku, j'ai testé ton code et ça fonctionne mais uniquement pour les cas ou tu choisis les formes comprenant plusieurs paramètres (losange, triangle, rectangle) mais ça ne fonctionne pas pour les formes avec un seul paramètre (carré et cercle). Il m'affiche le message si la case est vide mais il ne me calcul pas la valeur si il y a un chiffre dedans. je ne comprend pas pourquoi...

    voici mon programme dorénavant :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub CommandButton4_Click()
    
    If TextBox4.Value = "" Or TextBox5.Value = "" Then
          MsgBox "Saisir une valeur"
       Else
          TextBox6.Value = Calcule(TextBox4.Value, TextBox5.Value, ComboBox1.Value)
       End If
    End Sub
    
    Private Function Calcule(T4 As String, T5 As String, C1 As String) As Double
       Pi = WorksheetFunction.Pi
       Select Case C1
          Case "Cercle"
             Calcule = Val(T4) * Val(T4) * Pi  --> Ici il ne calcul pas 
          Case "Carré"
             Calcule = Val(T4) * Val(T4) --> Et la non plus
          Case "Triangle"
             Calcule = (Val(T4) * Val(T5)) / 2
          Case "Rectangle"
             Calcule = Val(T4) * Val(T5)
          Case "Losange"
             Calcule = (Val(T4) * Val(T5)) / 2
       End Select
    End Function
    
    Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'Ne permet d'autorisé que les caractères en 0 et 9 (numériques)
        If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8) Then
        MsgBox "Saisir une valeur numérique positive"
        KeyAscii = 0
      End If
    End Sub
    
    Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'Ne permet d'autorisé que les caractères en 0 et 9(numériques)
        If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8) Then
        MsgBox "Saisir une valeur numérique positive"
        KeyAscii = 0
      End If
    End Sub

    Comme tu peux le voir j'ai rajouté les fonctions qui font que les textbox 4 et 5 n'acceptent que les caractères entre 0 et 9. Le problème peut venir d'ici car pour les cas "carré" et "cercle" j'ai initialement rendu invisible la textbox5 étant donné que je n'ai besoin que d'un seul paramètre pour calculer la surface, je ne peux donc pas les modifier.

    Merci de votre aide

    PS : Je ne sais pas comment mettre le code la fenêtre prévue a cet effet dsl !

  5. #5
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Tu n'as pas dit non plus que TextBox5 était facultatif...

    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
    Private Sub CommandButton4_Click()
    If ComboBox1.Value <> "" Then
       If TextBox4.Value = "" Then
          MsgBox "Saisir une valeur"
       ElseIf TextBox4.Value <> "" And TextBox5.Value <> "" Then
          TextBox6.Value = Calcule(ComboBox1.Value, TextBox4.Value, TextBox5.Value)
       Else
          TextBox6.Value = Calcule(ComboBox1.Value, TextBox4.Value)
       End If
    End If
    End Sub
     
    Private Function Calcule(C1 As String, T4 As String, Optional T5 As String) As Double
       Pi = WorksheetFunction.Pi
       Select Case C1
          Case "Cercle"
             Calcule = Val(T4) * Val(T4) * Pi --> Ici il ne calcul pas 
          Case "Carré"
             Calcule = Val(T4) * Val(T4) --> Et la non plus
          Case "Triangle"
             Calcule = (Val(T4) * Val(T5)) / 2
          Case "Rectangle"
             Calcule = Val(T4) * Val(T5)
          Case "Losange"
             Calcule = (Val(T4) * Val(T5)) / 2
       End Select
    End Function
    Pour mettre le code en forme, il faut :
    > le sélectionner,
    > cliquer sur l'icône # dans l'éditeur de message.

  6. #6
    Membre à l'essai
    Homme Profil pro
    alternant ingénieur production d'energie
    Inscrit en
    Août 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : alternant ingénieur production d'energie
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2018
    Messages : 4
    Par défaut
    En même temps que tu me répondais j'ai trifouillé un peu de mon coté et j'ai réussis à résoudre ce petit détail. j'ai repris ton code en y rajoutant juste :

    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
    Private Sub CommandButton4_Click()
    If ComboBox1.Value = "Cercle" Or ComboBox1.Value = "Carré" Then
    TextBox5.Value = 1         J'ai fixé T5 a 1 par defaut pour "carré" et "cercle" et ça a fonctionné parfaitement
    End If
    If TextBox4.Value = "" Or TextBox5.Value = "" Then
          MsgBox "Entrer une valeur numérique positive avant de convertir"
       Else
          TextBox6.Value = Calcule(TextBox4.Value, TextBox5.Value, ComboBox1.Value)
       End If
    End Sub
    Private Function Calcule(T4 As String, T5 As String, C1 As String) As Double
       Pi = WorksheetFunction.Pi
       Select Case C1
          Case "Cercle"
             Calcule = Val(T4) * Val(T4) * Pi
          Case "Carré"
             Calcule = Val(T4) * Val(T4)
          Case "Triangle"
             Calcule = (Val(T4) * Val(T5)) / 2
          Case "Rectangle"
             Calcule = Val(T4) * Val(T5)
          Case "Losange"
             Calcule = (Val(T4) * Val(T5)) / 2
       End Select
    End Function
    Ta méthode fonctionne très bien aussi. Merci de ton aide et bonne continuation

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/04/2018, 15h06
  2. [XL-2010] Vérification de saisie TextBox
    Par tyndare36 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/01/2014, 09h55
  3. Cacher saisie dans un textbox VBA
    Par linkcr15 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/05/2012, 19h49
  4. VBA - Limiter la saisie d'une seule virgule ou point dans une TextBox
    Par natab dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/08/2011, 13h00
  5. [XL-2003] [VBA] Format de saisie DATE dans TextBox
    Par Teh Metil dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/12/2010, 11h05

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