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 :

Cliquer plusieurs fois sur Annuler


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Par défaut Cliquer plusieurs fois sur Annuler
    Bonjour a tous, voila le message quotidien du boulet de l'ete !!!!!!!!!

    Situation :
    Je remplis un formulaire (on l'appellera A) (selectionne une entree puis entre la quantite), une fois que c'est fait je clique sur OK pr continuer, et si il n'y a pas d'erreur de saisie un dernier formulaire (B) s'ouvre et recopie mes entrees dans des listbox. Sur ce dernier formulaire, mon bouton OK fonctionne mais en revanche j'ai un demi-souci avec le bouton ANNULER.
    *Si au formulaire A je n'ai pas commis d'erreur de saisie, le bouton ANNULER de B fonctionne correctement : il me ramene a la page d'accueil.
    *Si au formulaire A je me suis trompee en saisissant la quantite (oubli de saisie ou mauvaise saisie (caracteres non numeriques), apres le clic sur OK une MsgBox me l'a signale, et en personne eduquee j'ai corrige mon erreur et reclique sur OK et suis arrivee au formulaire B.
    A ce moment la, si je clique sur ANNULER (sur B), j'ai un probleme : il m'ajoute les entrees pr lesquelles je me suis trompee au formulaire A (alors que je les ai deja), autant de fois que j'ai appuye sur le bouton OK alors que j'avais tjs un probleme de saisie au formulaire A. Une fois qu'il a atteint ce nbre de fois, c'est bon il fait ce que je veux (retour a l'accueil).

    Voila le code du bouton OK du formulaire A, je pense que la correction sera a apporter a ca :

    --Registrar_Entrada c'est le "formulaire B"--

    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
    Sub Validar_Click()
     
         Ropa.Hide
         Registrar_entrada.Inic_entrada
         'Inic_entrada initialise le formulaire B en mettant ce qu'il faut dans tous 
         'les champs (certains sont vides, d'autres st mis a leur valeur initiale...)
         Dim i as Integer
         Dim art as String
         Dim Cant as Integer
         Dim Num as Integer
         Num = Ropa.Selec_ropa.ListCount
     
        'La je vais rentrer dans ma boucle. Ropa.Controls("Cant" & i + 1) c'est le
        'champ ou j'ai rentre la quantite de l'article i, et que je veux verifier avant
        'de passer au formulaire suivant
        For i = 0 to Num - 1
              art = Ropa.Selec_ropa.List(i,0)
              If Not IsNumeric(Ropa.Controls("Cant" & i + 1).Value) Then
                    MsgBox ("Verifica la cantidad del articulo: " + art + ".")
                    Ropa.Controls("Cant" & i + 1).Value = Empty
                    Ropa.Controls("Cant" & i + 1).SetFocus
                    Ropa.Show
              End If
              If Parar = True Then
              'ce If c'est si jamais j'ai clique sur Annuler, pour bien sortir proprement
              'de la procedure de OK
                    Exit Sub
              End If
              Cant = Ropa.Controls("Cant" & i + 1).Value
              Registrar_entrada.Detalle_des.AddItem art
              Registrar_entrada.Detalle_cant.AddItem Cant
              Registrar_entrada.Detalle_fec.AddItem "--"
         Next i
     
    End Sub
    Le code de Annuler du formulaire B n'a rien d'extraordinaire, peut-etre qu'en fait c'est la dedans qu'il y a un souci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub Cancelar_entrada_Click()
         Registrar_entrada.Hide
         Worksheets("Inicio").Activate
    End Sub
    Voili voilou, alors je sais pas si avec ca vs pouvez m'aider, si vs avez besoin de plus de details demandez moi !

    Merci beaucoup de votre aide

    PS je finis mon stage dans 2 semaines, vous n'entendrez plus parler de moi !!!!

  2. #2
    Membre chevronné Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Par défaut
    a mon avis, c'est du au fait que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
              Cant = Ropa.Controls("Cant" & i + 1).Value
              Registrar_entrada.Detalle_des.AddItem art
              Registrar_entrada.Detalle_cant.AddItem Cant
              Registrar_entrada.Detalle_fec.AddItem "--"
    soit fait meme si tu rentres dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsNumeric(Ropa.Controls("Cant" & i + 1).Value) Then
    mais bon suis pas sur a 100%

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Par défaut
    Oui c'est pour ca je pense aussi, mais je ne sais pas trop comment le modifier !
    Car si je le mets dans ma boucle For ca le fera a chaque fois et ca non plus je ne le veux pas !!!!

  4. #4
    Membre averti
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Par défaut
    aaaaaaaaaaaah pardon pardon je me suis trompee j'ai pas fait assez attention du coup c'est pas ce que je pensais !! donc je vais essayer de modifier ca voir si ca marche.
    desolee pour la boulette

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Par défaut
    En mettant un Else comme ca :

    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
    Sub Validar_Click()
       
         Ropa.Hide
         Registrar_entrada.Inic_entrada
         'Inic_entrada initialise le formulaire B en mettant ce qu'il faut dans tous 
         'les champs (certains sont vides, d'autres st mis a leur valeur initiale...)
         Dim i as Integer
         Dim art as String
         Dim Cant as Integer
         Dim Num as Integer
         Num = Ropa.Selec_ropa.ListCount
     
        'La je vais rentrer dans ma boucle. Ropa.Controls("Cant" & i + 1) c'est le
        'champ ou j'ai rentre la quantite de l'article i, et que je veux verifier avant
        'de passer au formulaire suivant
        For i = 0 to Num - 1
              art = Ropa.Selec_ropa.List(i,0)
              If Not IsNumeric(Ropa.Controls("Cant" & i + 1).Value) Then
                    MsgBox ("Verifica la cantidad del articulo: " + art + ".")
                    Ropa.Controls("Cant" & i + 1).Value = Empty
                    Ropa.Controls("Cant" & i + 1).SetFocus
                    Ropa.Show
              Else:
                    Cant = Ropa.Controls("Cant" & i + 1).Value
                    Registrar_entrada.Detalle_des.AddItem art
                    Registrar_entrada.Detalle_cant.AddItem Cant
                    Registrar_entrada.Detalle_fec.AddItem "--"
              End If
              If Parar = True Then
              'ce If c'est si jamais j'ai clique sur Annuler, pour bien sortir proprement
              'de la procedure de OK
                    Exit Sub
              End If
    
         Next i
     
    End Sub
    Je note une petite amelioration :
    Si je n'ai qu'une seule entree erronnee puis corrigee, elle ne se "rajoute" pas une 2e fois dans le formulaire B quand je clique sur ANNULER sur B.
    En revanche, si j'en ai plusieurs, elles se rajoutent toutes sauf la premiere donc je ne comprends pas trop, ca doit venir d'un pbm dans ma boucle.
    Et je dois toujours cliquer pls fois sur ANNULER.

  6. #6
    Membre chevronné Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Par défaut
    expliquons le problème

    ton raisonnement n'est pas tres bon :
    pour chaque champ que tu vérifie si
    - il est bon : tu enregistres
    - il est pas bon : tu préviens qu'il est pas bon, tu le remets à vide, tu le cible et tu relance le userforme

    LA est le problème.

    On imagine que tu as 20 champs, les 19 premiers sont bons : donc ils vont être enregistrés. Par contre le dernier qui est pas bon va faire que tu va devoir relancer le user form, donc il va réenregistrer les 19 premiers (qui sont bons) et va refaire le test sur le dernier, s'il est pas bon ca va ENCORE recommencer et etc.

    il faut donc que l'enregistrement ne se fasse au cas et au SEUL cas où TOUS les champs sont bon.

    pour ce faire il faut mettre un bouléen VRAI au début et qui se met à faux en cas de problème.
    ensuite lorsque tu as parcourus TOUS tes champs et qu'ils sont bon, là seulement tu les enregistres dans ton autre userform.
    Comme je n'ai pas tout ton classeur avec les UF et tout et tout je te propose ce code que je ne peux pas tester.
    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
    Sub Validar_Click()
     
        Ropa.Hide
        Registrar_entrada.Inic_entrada
        'Inic_entrada initialise le formulaire B en mettant ce qu'il faut dans tous 
        'les champs (certains sont vides, d'autres st mis a leur valeur initiale...)
        Dim i as Integer, art as String, Cant as Integer, Num as Integer
        Dim TodoVaBien as Boolean
        Num = Ropa.Selec_ropa.ListCount
     
        'La je vais rentrer dans ma boucle. Ropa.Controls("Cant" & i + 1) c'est le
        'champ ou j'ai rentre la quantite de l'article i, et que je veux verifier avant
        'de passer au formulaire suivant
        TodoVaBien = True
        For i = 0 to Num - 1
            art = Ropa.Selec_ropa.List(i,0)
            If Not IsNumeric(Ropa.Controls("Cant" & i + 1).Value) Then
                MsgBox ("Verifica la cantidad del articulo: " + art + ".")
                Ropa.Controls("Cant" & i + 1).Value = Empty
                Ropa.Controls("Cant" & i + 1).SetFocus
                TodoVaBien = False
                Exit For 'Pour qu'on arrete là et qu'on garde le focus sur le mauvais champ
            End If
            If Parar = True Then
            'ce If c'est si jamais j'ai clique sur Annuler, pour bien sortir proprement
            'de la procedure de OK
                Exit Sub
            End If
     
        Next i
        If TodoVaBien then
            Cant = Ropa.Controls("Cant" & i + 1).Value
            Registrar_entrada.Detalle_des.AddItem art
            Registrar_entrada.Detalle_cant.AddItem Cant
            Registrar_entrada.Detalle_fec.AddItem "--"
        Else:
            Ropa.Show
        End If
    End Sub

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/02/2009, 21h30
  2. bouton entree plusieurs fois sur un form
    Par lili2704 dans le forum Struts 1
    Réponses: 5
    Dernier message: 29/06/2007, 14h19
  3. [MySQL] cliquer 2 fois sur un formulaire
    Par jomannix dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/06/2007, 14h28
  4. Réponses: 7
    Dernier message: 28/02/2007, 14h59
  5. [PUBLICATION] Cliquer une fois sur l'animation.
    Par arti2004 dans le forum Intégration
    Réponses: 9
    Dernier message: 19/07/2006, 08h58

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