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 Excel] - Exit Do, si caractère tapé (on change..)


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 15
    Points
    15
    Par défaut [VBA Excel] - Exit Do, si caractère tapé (on change..)
    Bonjour à tous !

    Je suis sur Excel 2000,

    J'ai fait un moteur de recherche avec un Texbox (dans une feuille excel) fonctionnant avec des requêtes SQL. Voici la boucle donc je me sert pour afficher les résultats dans une feuille excel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Do While Not rs.EOF
                    For j = 1 To rs.Fields.Count
                        k = j - 1
                        Feuil1.Cells(i, j) = rs(k)
                    Next
                i = i + 1
                rs.MoveNext
            Loop
    J'utilise la procédure 'Change' du Textbox donc à chaque caractère tapé, la recherche se fait.

    Ma question :
    Comment faire pour empêcher la macro de se terminer si un caractère est tapé pendant son exécution ?
    Un genre de 'exit Sub' si un caractère est tapé durant son exécution.


    En espérant une réponse ou une lumière .. :-)

    Merci !

    Pressorus

  2. #2
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Bonsoir,

    j'ai pas bien compris, et vu que ton code n'est pas complet , que ce passe-t'il lorsuqe tu tape un caractéres ta recherche et relancée? où pas..

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Bonjour,
    Tu peux essayer de mettre un wait de 2 secondes par exemple, ça te laisserait le temps de taper le reste.
    Par contre, je suis absolument pas sur du résultat

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Bonjour et merci pour vos réponses ! ***

    Au fond, je n'ai pas besoin de mettre de code ...

    Dans ma feuille Excel, j'ai un Texbox. À chaque caractère tapé 'Texbox1_Change', cela lance une requête SQL, qui me renvoie un tableau (array) que j'affiche dans chaque cellule avec ma boucle ci-haut.

    Le problème est que la recherche et l'affichage des résultats peuvent prendre jusqu'à une seconde, donc si je tape 20 lettres, je devrai attendre 20 secondes avant de voir le résultat final !

    C'est pour cette raison que j'avais pensé à une façon de faire un 'exit' à ma fonction d'affichage si un autre caractère est tapé. Pour que la recherche (ma fonction de recherche) se relance.
    (et si un autre caractère est tapé avant la fin de l'affichage (parce que c'est l'affichage qui prend du temps), la fonction est intérompue et la recherche relancé).

    Ce n'ai peut-être pas une bonne façon de voir et si vous avez une quelconque idée sur une façon de faire, je reste très ouvert !

    J'avais aussi pensé à mettre un timer au début de ma fonction, mais je problème est que parfois, la recherche peut prendre 0.07 secondes à afficher. Dans ces cas, un timer ne serait pas aproprié.


    Merci !

    Pressorus

  5. #5
    Membre régulier Avatar de Blaede
    Profil pro
    Inscrit en
    Août 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 120
    Points : 82
    Points
    82
    Par défaut
    Ca me paraît tout de même étrange comme façon de procéder.
    Pourquoi ne pas mettre un simple bouton à côté de la TextBox
    sur lequel tu click quand tu as fini de taper ce que tu veux dans
    la TB et qui lance la requête

  6. #6
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Citation Envoyé par pressorus Voir le message
    Bonjour et merci pour vos réponses ! ***
    Le problème est que la recherche et l'affichage des résultats peuvent prendre jusqu'à une seconde, donc si je tape 20 lettres, je devrai attendre 20 secondes avant de voir le résultat final !
    Ca ne fera pas un wait par caractère vu que ton textbox_change redemarrera la macro à chaque caractère tapé.

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par Blaede Voir le message
    Ca me paraît tout de même étrange comme façon de procéder.
    Pourquoi ne pas mettre un simple bouton à côté de la TextBox
    sur lequel tu click quand tu as fini de taper ce que tu veux dans
    la TB et qui lance la requête
    C'était exactement le sens du texte d'un message que j'avais rédigé et que j'ai dû oublier de valider ...

    A pressorus : il y a toujours une solution à ta problématique ! La voici donc, mais je te la déconseille très vivement :
    Utitisation d'une variable globale booléenne toto, False au départ.
    - a chaque frappe d'une lettre dans ta textbox : toto = True
    - dans ta routine (requête et exploitation de la requête) : pas de MoveNext et quitter si toto = True.
    - dans tous les cas de figure : toto = false à la fin de ta routine

    Cela répond à ton problème, mais alourdit ton appli. Il te faudra de surcroît alors effacer les cellules déjà remplies ! Imagine en effet que tu frappes "a" et que ta routine soit ainsi interrompue après 100 articles déjà traités (donc 100 cellules déjà remplies) et que tu frappes "b" (ce qui provoque une requête avec "ab") conduisant à 5 articles trouvés ===>> les 5 premières colonnes seront remplies par les résultats de la dernière requête , tandis que les 95 autres resteront avec les résultats de la 1ère requête !!!....
    Remède : possible mais lourd : effacer en plus systématiquement les cellules remplies par la requête précédente !

    Voilà ! Abandonne l'idée d'utiliser l'évènement change de ta TextBox si tu ne veux pas transformer ton appli en champion de rowing ...

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 15
    Points
    15
    Par défaut En effet !
    Bonjour et merci ucfoutu pour tes conseils !

    Pardonnez le retard de ma réponse,

    Finalement, je ferai la recherche sous l'événement de la touche 'Enter' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TextBox_Rech_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 13 Then 'Enter
            ' À chaque changement du TextBox_Rech, on appelle la fonction Rechercher + Date de mise à jour, si la touche d'éclanchant l'événement est "Entrer"
            Vérif_Date_MAJ
            Rechercher
        End If
    End Sub

    Merci à tous et bonne journée !

    Pressorus

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

Discussions similaires

  1. vba excel si la valeur de la cellule change
    Par Zongo86 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/09/2012, 12h32
  2. Réponses: 1
    Dernier message: 06/05/2007, 17h42
  3. Réponses: 22
    Dernier message: 10/04/2007, 11h33
  4. VBA-EXCEL erreur de caractère ' dans requete
    Par rafnt dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/09/2006, 08h42
  5. [VBA-EXCEL] Caractère spécial " dans requete sql
    Par rafnt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/09/2006, 16h26

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