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 :

Interdire validation si numéro existe déjà


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Interdire validation si numéro existe déjà
    Bonjour à tous,

    J'ai un UserForm dans lequel il y a une TxtBox nommée TxtNum. Dans celle-ci je saisi un numéro.

    Ce que je cherche à faire c'est que si ce numéro existe déjà dans la feuille "Engagements" Colonne C alors un message apparait indiquant que ce numéro existe déjà. Cela doit ce faire dès la saisie, rendant la validation impossible.

    Ensuite, le numéro saisi est effacé.

    Je ne sais pas comment faire, pouvez-vous m'apporter votre aide s'il vous plait ?
    Je vous en remercie par avance
    Bien cordialement

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Tu peux utiliser l'évenement BeforeUpdate et tester si on trouve le numéro

    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 TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
     
    Dim rg As Range
     
    Set rg = Sheets("Engagements").Range("C:C").Find(TextBox1.Text)
     
    If Not rg Is Nothing Then
     
        MsgBox "numéro existant"
        Cancel = True
     
    End If
     
    End Sub

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour ajouter une autre proposition sensiblement identique à celle déjà donnée par Jérôme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Function IsRefExist(rng As Range, ref As String) As Boolean
     IsRefExist = Application.CountIf(rng, ref) > 0
    End Function
    Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
     If IsRefExist(Range("maplage"), TextBox1) Then
      MsgBox "Existe déjà"
      TextBox1.Value = ""
      Cancel = True
     End If
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Merci à tous pour vos réponses. Je les teste et je vous tiens au courant.
    Encore merci

    J'ai mis en place le code de Jérôme et il fonctionne plutôt bien. J'ai ajouté le code pour la mise à zéro de la zone de saisie dans la TextBox.
    Cependant, je rencontre un problème auquel je n'avais pas pensé, en effet si la zone reste vide, le message apparaît, ce qui est normal puisque dans la colonne de mon tableau il y des cellules vides.
    Comment éviter cela ?
    Merci

    Voici mon code :
    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
    Private Sub TxtNum_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
     
    Dim rg As Range
    
    If TxtNum.Value > 0 Then
    Set rg = Sheets("Engagements").Range("D:D").Find(TxtNum.Text)
     
    If Not rg Is Nothing Then
     
        MsgBox "numéro existant" '(après ce message, je ne peux plus fermer mon UserForm car le message apparaît à chaque que je clique sur le bouton "Fermer")    TxtNum.Value = ""
        Cancel = True
     
    End If
    End If
    End Sub

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par NEC14 Voir le message
    Cependant, je rencontre un problème auquel je n'avais pas pensé, en effet si la zone reste vide, le message apparaît, ce qui est normal puisque dans la colonne de mon tableau il y des cellules vides.
    Comment éviter cela ?
    Merci
    Avec le code que je t'ai proposé il n'y a pas ce problème.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Philippe,

    Je mets ton code au même endroit que le mien ?

    Voici le code adapté à mon cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function IsRefExist(rng As Range, ref As String) As Boolean
     IsRefExist = Application.CountIf(rng, ref) > 0
    End Function
     
    Private Sub TxtNum_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
     If IsRefExist(Sheets("Engagements").Range("C:C"), TxtNum) Then
      MsgBox "Existe déjà"
      TxtNum.Value = ""
      Cancel = True
     End If
    End Sub
    Après avoir testé, rien ne se passe, aucun message, par contre je ne peux plus fermer mon UserForm

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Bonjour,

    Pour vérifier si la valeur existe déjà dans ta colonne tu peux utiliser la fonction suivante (s'applique à un objet Excel.Range):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function Find(What, [After], [LookIn], [LookAt], [SearchOrder], [SearchDirection As XlSearchDirection = xlNext], [MatchCase], [MatchByte], [SearchFormat]) As Range
    Et tester l'objet Range renvoyé:

    • si c'est Nothing, c'est que la valeur n'existe pas;
    • si c'est différent de Nothing, c'est que la valeur existe déjà.


    Pour la TextBox, je pense que ça peut se faire comme ça:


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

Discussions similaires

  1. Valider un numéro CAS (identifiant d'une substance chimique)
    Par Cyclemmanuel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/03/2012, 18h00
  2. Valider un numéro ISBN
    Par hpalpha dans le forum Contribuez
    Réponses: 0
    Dernier message: 13/02/2011, 17h45
  3. Interdire accès à un login existant
    Par Denn's dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/07/2008, 10h20
  4. [PHP-JS] Validation de numéro de téléphone
    Par Dsphinx dans le forum Langage
    Réponses: 7
    Dernier message: 22/11/2006, 09h48
  5. Comment rechercher si un numéro existe déja ?
    Par Fredri dans le forum Access
    Réponses: 14
    Dernier message: 06/01/2006, 16h58

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