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 :

Cadrer (Min-Max) une entrée TextBox + Vérifier son existance


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 30
    Points
    30
    Par défaut Cadrer (Min-Max) une entrée TextBox + Vérifier son existance
    Me revoilà!

    Le challenge ce coup-ci consiste à définir un nombre min et max de "digits" pour une entrée de TextBox (ce nombre doit faire 8 en fait).

    J'aimerai aussi m'assurer au moment de la saisie que ce nombre n'existe pas déjà dans la colonne ou il sera stocké.

    Côté validation sous excel j'ai une petite idée mais pas sûr que ce soit transférable sous VBA?

    Quelqu'un a-t-il déjà eu affaire à ce genre de problème?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Mas_Carpone et le forum
    Le challenge ce coup-ci consiste à définir un nombre min et max de "digits" pour une entrée de TextBox (ce nombre doit faire 8 en fait).
    Essaies avec Len(). Ou expliques le problème comme si on ne connaissait rien de ce que tu veux faire.
    J'aimerai aussi m'assurer au moment de la saisie que ce nombre n'existe pas déjà dans la colonne ou il sera stocké.
    Pense à transformer le texte en nombre (Clong(), Cdble() ou autre) et recherche avec .Find()

    Rappel : on ne sait que ce que nous donne les postes. Plus la question est moins précise, moins on peut plus t'aider.
    A+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Merci Gorfael!

    L'utilisateur doit rentrer un code (d'établissement) dans un Textbox.

    Ce code comporte obligatoirement 8 caractères. Donc je crois que Len() devrait fonctionner, avec quelque chose du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Len(TextBox_MDCode.Value) <> 8 Then
    Mess = "Le CODE doit comporter 8 caractères"
    Else
    End If
    En ajoutant un message "d'erreur" pour signaler le problème à l'utilisateur.

    La deuxième vérification que j'aimerai effectuer est la présence de cette valeur (de l'établissement donc) dans la base de données. Si la valeur est présente, soit l'utilisateur s'est trompé de code, soit il devra trouver et éditer les données déjà existantes de cet établissement.

    Je suis en train d'éplucher le fonctionnement de .Find qui a première vue à l'air tout à fait adapté!

    Merci pour ces premiers éléments en espérant avoir été plus clair! :-)

  4. #4
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour Mas_Carpone Gorfael le forum un exemple avec un bouton dans ton user recherche sur la colonne A adapte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub CommandButton1_Click()
      Dim c As Variant
       If Len(TextBox_MDCode) <> 8 Then
         MsgBox "attention 8 caracteres mini"
         TextBox_MDCode.SetFocus
         Exit Sub
      End If
     Set c = Range("a1", Cells(Rows.Count, "a").End(xlUp)).Find(TextBox_MDCode, LookIn:=xlValues, LookAt:=xlWhole)
      If Not c Is Nothing Then
       MsgBox "present dans la liste" 'ton code
       Else
      MsgBox "pas present dans la liste" 'ton code
      End If
    End Sub
    dans proprietees de ta textbox MaxLength a 8 "caracteres maxi" evite deja de taper trop de caracteres

    facultatif cidessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TextBox_MDCode_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        'force a taper que des chiffres utile si ton code comporte que des chiffres autrement supprimer
        If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    End Sub

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    L, A, E dans l'A, TI, TI A!

    Ça marche nickel! Un grand merci à tous les deux pour votre aide!

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Je me permet de re-upper pour complément d'information / aide.

    J'ai parfois plusieurs milliers d'entrées dans la base et j'aimerai, si la valeur existe déjà dans la base l'indiquer à mon utilisateur.

    Comment puis-je capturer le nombre de la ligne à laquelle la valeur a été rencontrée par .find pour le réutiliser plus tard?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Je reviens. Après avoir bidouillé le code en partant de l'example de Laetitia, je me retrouve avec une série de Bugs (sur les End If manquants, ou en trop, etc.

    Vous voyez quelque chose d'anormal ici?

    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
    Private Sub TextBox_MDCode_AfterUpdate()
     
    'Value entered necessarilly has 6 digits'
     
    Dim c As Variant
     
    If Len(TextBox_MDCode.Value) <> 6 And Len(TextBox_MDCode.Value) <> 0 Then
        Select Case MsgBox("Le code doit comporter 6 caractères", vbOKOnly)
        Case vbOK
        TextBox_MDCode.Value = ""
        TextBox_MDCode.SetFocus
     
    Exit Sub
     
    'Verify whether the code entered already exists and where'
     
        Set c = Range("MDCode_Field").Find(TextBox_MDCode, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
     
        Select Case MsgBox("Vérifiez le code et assurez vous que ce Centre ne soit pas déjà enregistré", vbOKOnly, "Code Existant")
     
        Case vbOK
     
        TextBox_MDCode.Value = ""
        TextBox_MDCode.SetFocus
     
       End Select
     
    End If
     
    End Sub
    Ceci est une des nombreuses versions que j'ai essayées...

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    J'ai coupé le code en 2 et corrigé chaque bout indépendamment.

    Voila quelque chose qui marche:

    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
    Private Sub TextBox_MDCode_AfterUpdate()
     
    'Value entered necessarilly has 6 digits'
     
    Dim c As Variant
     
    If Len(TextBox_MDCode.Value) <> 6 And Len(TextBox_MDCode.Value) <> 0 Then
        Select Case MsgBox("Le code doit comporter 6 caractères", vbOKOnly)
        Case vbOK
        TextBox_MDCode.Value = ""
        TextBox_MDCode.SetFocus
     
        End Select
     
    Else: Range("MDCode_Field")(TextBox_Prev_Next.Text).Value = TextBox_MDCode.Value
     
    End If
     
    'Verify whether the code entered already exists and where'
     
        Set c = Range("MDCode_Field").Find(TextBox_MDCode, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
     
        Select Case MsgBox("Vérifiez le code et assurez vous que ce Centre ne soit pas déjà enregistré", vbOKOnly, "Code Existant")
        Case vbOK
        TextBox_MDCode.Value = ""
        Range("MDCode_Field")(TextBox_Prev_Next.Text).Value = ""
        TextBox_MDCode.SetFocus
     
        End Select
     
    Else: Range("MDCode_Field")(TextBox_Prev_Next.Text).Value = TextBox_MDCode.Value
     
    End If
     
    End Sub

Discussions similaires

  1. supprimer une fonction en vérifiant son existance
    Par aze555666 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 09/04/2010, 20h06
  2. Réponses: 9
    Dernier message: 15/05/2009, 17h33
  3. chercher un max et min dans une liste de type vector
    Par sandy07 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 29/05/2007, 15h23
  4. Réponses: 2
    Dernier message: 21/05/2007, 18h55
  5. [C++.NET] Valeurs min/max dans une TextBox
    Par raboin dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 06/04/2006, 17h15

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