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 :

Validation de champs de formulaire


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
    Gérant
    Inscrit en
    Avril 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Gérant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2022
    Messages : 9
    Par défaut Validation de champs de formulaire
    Bonjour à tous,

    je suis en train de travailler sur un formulaire de saisie de données Excel.

    J'aimerais pouvoir conditionner la validation de certains champs.
    Notamment :
    1. Empêcher les doublons sur un champ "Référence"
    2. Empêcher la saisie d'une valeur incorrecte par rapport à la valeur d'un autre champs.

    J'ai trouvé des solutions, mais tout ne marche pas encore comme je le voudrais.

    Je demande un peu d'aide, merci

    Ci-joint mon fichier.

    RaymondTest Liste Références.xlsmTest Liste Références.xlsm

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 437
    Par défaut
    Bonjour,

    Je n'ai pas vraiment bien tout saisi mais ceci devrait répondre à vos questions.

    - détection de doublon de référence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Référence_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        Dim rRef As Range
        Set rRef = Range(Range("StartTableau"), Range("StartTableau").End(xlDown))
        Référence = UCase(Référence)
        If Application.WorksheetFunction.CountIf(rRef, Référence) > 0 Then
            Me.LblMessage = "La référence " & Me.Référence & " existe déjà, enregistrement refusé"
            Me.Référence = ""
            Cancel = True
        Else
            Me.LblMessage = ""
        End If
        Set rRef = Nothing
    End Sub
    - signalement de valeurs non admises
    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
    41
    42
    43
    Private Sub BtnValidate_Click()         ' Bouton "Valider"
        ' Vérification champs non vides ou zéro
        ' mais 0 admissible pour NombreTraverses
     
        If Val(Me.LongueurPanneau) = 0 Or _
            Val(Me.LargeurPanneau) = 0 Or _
            Val(Me.EpaisseurPanneau) = 0 Or _
            Val(Me.LargeurChevron) = 0 Or _
            Val(Me.EpaisseurChevron) = 0 Or _
            Val(Me.EspaceAgrafes) = 0 Or _
            Val(Me.Y_Traverse_1) = 0 Or _
            Val(Me.Y_Traverse_2) = 0 Or _
            Val(Me.Y_Traverse_3) = 0 Then
                Me.LblMessage = "Il manque au moins une valeur, complètez correctement ou cliquez sur Fermer la saisie !"
        Else
            ThisWorkbook.Worksheets("SaisieListeProduits").Select
            Range("A6").End(xlDown).Offset(1, 0).Select
            With ActiveCell
                .Value = Me.Référence.Value
                .Offset(0, 1).Value = Me.LongueurPanneau.Value
                .Offset(0, 2).Value = Me.LargeurPanneau.Value
                .Offset(0, 3).Value = Me.EpaisseurPanneau.Value
                .Offset(0, 4).Value = Me.LargeurChevron.Value
                .Offset(0, 5).Value = Me.EpaisseurChevron.Value
                .Offset(0, 6).Value = Me.EspaceAgrafes.Value
                .Offset(0, 7).Value = Me.NombreTraverses.Value
                .Offset(0, 8).Value = Me.Y_Traverse_1.Value
                .Offset(0, 9).Value = Me.Y_Traverse_2.Value
                .Offset(0, 10).Value = Me.Y_Traverse_3.Value
            End With
            Unload Ajout
            ' Transpose Tableau SaisieListeProduits vers ListeProduits
            Call TransposeData
            Sheets("SaisieListeProduits").Activate
            ActiveWorkbook.Save
            ' Copier Liste module dans ListeProduits
            Call CopyPasteData
            Sheets("SaisieListeProduits").Select
            Sheets("ListeProduits").Visible = False
            Sheets("ProductsData").Visible = False
            Ajout.Show
        End If
    End Sub
    Je n'ai pas vraiment vérifié le reste du code. A première vue un peu trop de copier-coller et aucune utilisation de tableaux structurés.

    Cordialement.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre à l'essai
    Homme Profil pro
    Gérant
    Inscrit en
    Avril 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Gérant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2022
    Messages : 9
    Par défaut [XL-2016] Validation de champs de formulaire
    Bonjour à tous,

    Merci beaucoup EricDgn, ça fonctionne super.

    Concernant "Empêcher la saisie d'une valeur incorrecte par rapport à la valeur d'un autre champs.", en fait je voudrais simplement empêcher de saisir une valeur "Largeur" plus grande que la valeur "Longueur".

    J'avais écrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub LargeurPanneau_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        'Action à la saisie de LongueurPanneau pour calcul Positions Y Traverses
        'Envoi de la valeur dans la feuille XLS ListeProduits
        If Me.LargeurPanneau.Value > Me.LongueurPanneau.Value Then
            ' Si LargeurPanneau > LongueurPanneau : Affichage texte
            Me.LblMessage = "La largeur ne peut pas être plus grande que la longueur, corrigez SVP !"
        Else
            ' Si valeur non trouvée, effacer le texte et quitter
            Me.LblMessage = ""
        End If
    End Sub
    Seulement, dans certains cas, le message d'erreur s'affiche malgré que les valeurs soient ok.

    De plus, en cas de saisie erronée, je voudrais faire SetFocus du champ "LargeurPanneau" avec sélection du texte saisi, mais je n'y suis pas arrivé non plus.

    Merci

  4. #4
    Membre à l'essai
    Homme Profil pro
    Gérant
    Inscrit en
    Avril 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Gérant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2022
    Messages : 9
    Par défaut [XL-2016] Validation de champs de formulaire
    Bonjour à tous,

    en bossant un peu, je suis arrivé à ce résultat :

    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
    41
    42
    43
    44
    45
    46
     
    Private Sub LongueurPanneau_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
     
        If Val(Me.LongueurPanneau) < 600 Or Val(Me.LongueurPanneau) > 1600 Then
            ' Si LargeurPanneau < 600 ou > 1600: message d'erreur
            Me.LblMessage = "La valeur doit être comprise entre 600 et 1600, corrigez SVP !"
            Me.LongueurPanneau = ""
            Cancel = True
        ElseIf Val(Me.LongueurPanneau) = 0 Then
            Me.LblMessage = ""
            ' Si LongueurPanneau vide : message d'erreur
                Me.LblMessage = "Longueur nulle interdite, corrigez SVP !"
                Cancel = True
        Else
            Me.LblMessage = ""
            ' Sinon : Calcul valeurs traverses
            Me.Y_Traverse_1.Value = Round(Me.LongueurPanneau * 0.25, 0)
            Me.Y_Traverse_2.Value = Round(Me.LongueurPanneau * 0.5, 0)
            Me.Y_Traverse_3.Value = Round(Me.LongueurPanneau * 0.75, 0)
        End If
     
    End Sub
     
    Private Sub LargeurPanneau_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
     
        If Val(Me.LargeurPanneau) = 0 Then
            ' Si LargeurPanneau vide : message d'erreur
            Me.LblMessage = "Lageur nulle interdite, corrigez SVP !"
            Me.LargeurPanneau = ""
            Cancel = True
        ElseIf Val(Me.LargeurPanneau) > Val(Me.LongueurPanneau) Then
            Me.LblMessage = ""
            ' Si LargeurPanneau > LongueurPanneau : message d'erreur
            Me.LblMessage = "La largeur ne peut pas être plus grande que la longueur, corrigez SVP !"
            Cancel = True
        ElseIf Val(Me.LargeurPanneau) < 400 Or Val(Me.LargeurPanneau) > 1000 Then
            Me.LblMessage = ""
            ' Si LargeurPanneau < 400 ou > 1000: message d'erreur
            Me.LblMessage = "La valeur doit être comprise entre 400 et 1000, corrigez SVP !"
            Me.LargeurPanneau = ""
            Cancel = True
        End If
     
    End Sub
    Ce n'est certainement pas la méthode la plus simple, mais ça fonctionne !!
    Je fais avec mes compétences en VBA Excel !

    Merci quand même.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/10/2011, 14h34
  2. [1.x] validation de champs de formulaire
    Par mv_murph dans le forum Symfony
    Réponses: 1
    Dernier message: 19/01/2009, 14h31
  3. validation de champs de formulaire
    Par zerros dans le forum Langage
    Réponses: 1
    Dernier message: 05/06/2008, 11h58
  4. Valider deux champ de formulaire sans aller côté serveur
    Par tiboudchou dans le forum Struts 2
    Réponses: 1
    Dernier message: 16/10/2007, 18h02
  5. Validation de champs ds formulaire
    Par fikou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 09/03/2006, 13h57

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