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-E]Tests lors d'une saisie


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Par défaut [VBA-E]Tests lors d'une saisie
    Bonsoir à tous!
    Un nouveau problème se pose à moi, voilà de quoi il s'agit.

    Sur une même ligne, je considère 4 cellules à la suite les une des autres.
    Les valeurs rentrées dans ces cellules seront 0 ou 1.
    La condition est qu'il ne doit pas y avoir plus de deux 1 sur la ligne.
    Donc si l'utilisateur a déjà saisi deux 1, lorsqu'il va vouloir en insérer un troisième, je désire lui afficher un message d'erreur.

    C'est tout bête. Je sais comment parcourir l'ensemble de la ligne, comment tester si la valeur entrée est un 1, comme afficher un message d'erreur..., mais le problème est que je ne sais pas comment le faire au moment de la saisie.

    En clair, s'il s'agissait d'un bouton de validation, je n'aurais aucun problème, mais là il faut impérativement que la vérification et la signalisation d'erreurs se fassent au moment de la saisie. Si quelqu'un peut m'éclairer juste sur ce point, ca serait sympa.

    Merci d'avance!

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tu utilise une action événementielle Worksheet_Change ... et la fonction Intersect pour voir si tu est dans la bonne plage (une recherche avancée sur ces 2 mots devrai t'aider..)

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    soit les quatres colonnes concernées
    A B C D
    supposons que la première cellule soit en a1
    je sélectionne les cellules concernées par cette restriction
    je fais alors une inspiration puis données validation
    onglet option autoriser personnalisé
    puis dans formule je copie =(A1=1)+(B1=1)+(C1=1)+(D1=1)<=2

    il me reste à ajouter mon message d'erreur "deux fois un c'est déjà trop"

    je vais ensuite en b3 (touché coulé) et je fais donner validation
    je lis =(A3=1)+(B3=1)+(C3=1)+(D3=1)<=2
    j'en conclus que la recopie des clauses est bien relative
    et je me réjouis

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Par défaut
    Merci. Grâce à ce que vous m'avez dit j'ai bidouillé un petit truc :

    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        i = 2
     
        Do
            cumul = 0
            valeur1 = Cells(i, 2).Value
            valeur2 = Cells(i, 3).Value
            valeur3 = Cells(i, 4).Value
            valeur4 = Cells(i, 5).Value
     
            If valeur1 = 1 Then
                cumul = cumul + 1
            End If
            If valeur2 = 1 Then
                cumul = cumul + 1
            End If
            If valeur3 = 1 Then
                cumul = cumul + 1
            End If
            If valeur4 = 1 Then
                cumul = cumul + 1
            End If
     
     
            If cumul > 2 Then
               MsgBox "STOP"
               Range("B" & i, "E" & i).Clear          ###A CHANGER###
            End If
     
            i = i + 1
        Loop Until Cells(i, 1) = ""
    End Sub
    Cependant, une fois que le message d'erreur est affiché, j'aurais bien aimé annuler juste la dernière entrée, donc le 1 de trop. Avec mon code je supprime la ligne en cours, c'est un premier pas, mais c'est pas génial. :/ Si quelqu'un peut m'indiquer comment annuler la dernière entrée...

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pour la derniére entrée ... tu as le range Target... en paramétre de workSheet Change...

    par contre limite l'action de ta macro aux cellules concernées .. voir fonction intersect , et son un tilisation dans le lien que je t'ai précédeament donné !

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Petite correction de la méthode proposée par random:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =($A1=1)+($B1=1)+($C1=1)+($D1=1)<=2
    Cette méthode a l'avantage de ne pas demander de programmation.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

Discussions similaires

  1. Decalage d'un form lors d'une saisie
    Par Bibicmoi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 13/11/2006, 20h37
  2. Réponses: 6
    Dernier message: 03/11/2006, 09h04
  3. Changer IMMEDIATEMENT un "é" en "e" lors d'une saisie
    Par Bobybx dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/06/2006, 18h26
  4. Réponses: 26
    Dernier message: 20/06/2006, 14h56
  5. [VBA-E]Erreur lors d'une copie de cellules
    Par illight dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/02/2006, 11h22

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