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 :

Problème avec la fonction Exit Sub [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut Problème avec la fonction Exit Sub
    Bonjour forum.
    Il y a un truc qui m'échappe dans l'exécution du code:
    Dans le bouton Valider de l'userform, j'ai mis écrit une procédure qui permet d'ajouter des données dans la base de données souhaitée. Mais avant l'exécution, j'appelle une fonction qui se trouve dans un module pour vérifier s'il y a un doublon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function Doublons ()
    For NbreLignes= 2 to Cells(Rows.Count, 1).End(Xlup).Row
      If Cells(NbreLignes,1)= TextBox1 then
       Msgbox" Doublon"
      End if
    Next
     
    End Function
    Dans la procédure du bouton valider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Doublons then 
     If MsgBox ("")= Vbok Then Exit Sub
    Else 
    ... ' Code suivant
    La fonction est bien vérifiée et le message s'affiche mais après le message il exécute le code qui suit Else pourtant j'ai mis une restriction '' Exit sub''.
    Normalement, Si j'appuie ok, il ne devrait pas continuer avec Else vu que la condition est vérifiée donc il sort de l'alternative.
    Mais ce n'est pas le cas.
    Je suis passé par Select Case, c'est le même souci.

    J'espère que j'ai été précis.
    Merci de m'aider

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Décembre 2021
    Messages : 164
    Par défaut
    Bonjour,

    La fonction est bien vérifiée et le message s'affiche
    J'ai un petit peu modifié la fonction, chez moi ça ne rentre pas dans le Else de cette manière :

    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
     
    Function Doublons() As Integer
    For NbreLignes = 2 To Cells(Rows.Count, 1).End(xlUp).Row
      If Cells(NbreLignes, 1) = TextBox1 Then
       MsgBox " Doublon"
       Doublons = 1
      End If
    Next
     
    End Function
     
    Sub Macro1()
     
     
    X = Doublons
    If X = 1 Then
     If MsgBox("IN") = vbOK Then Exit Sub
    Else
      MsgBox ("OUT")
    End If
    End Sub

  3. #3
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 585
    Par défaut
    Bonjour,
    Pourquoi utiliser un integer en retour de fonction et pas un booléen ?

    C'est pas comme si tu avais voulu compter le nombre de doublons !

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Décembre 2021
    Messages : 164
    Par défaut
    Pourquoi utiliser un integer en retour de fonction et pas un booléen ?
    Bonne question .

    Je n'ai pas du tout réfléchi a ce détail, le but est de donner un angle d'attaque

  5. #5
    Membre chevronné
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 302
    Par défaut idée
    Bonjour
    peut être ai je mal compris, mais cela me fait penser à un pb que j'avais rencontré.

    Solution utilisée
    End (au lieu de Exit sub) si je veux fermer également la macro qui m'a appelé via application.run
    car Exit Sub ne sort que de la macro en cours

    @+

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 585
    Par défaut
    Citation Envoyé par Fab_de_chez_PERFORM Voir le message
    End (au lieu de Exit sub) si je veux fermer également la macro
    Le suicide comme solution, pas bête !

    Le seul problème c'est qu'à l'origine la fonction ne retournerait rein permettant d'évaluer le If alors End ou Exit qu'elle importance !

    PetitBoutDeCode de la tribu des DVP.COM a apporté une solution!

    Avec les compliments de PouceVersLeBas!

  7. #7
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Merci à tous pour les différentes réponses.
    J'ai essayé de passer la Function en Booléen mais toujours le même constat.
    Je me demande pourquoi la procédure suivante s'exécute ?🤔🤔

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 585
    Par défaut
    Citation Envoyé par Mr l'Ashanti Voir le message
    Merci à tous pour les différentes réponses.
    J'ai essayé de passer la Function en Booléen mais toujours le même constat.
    Je me demande pourquoi la procédure suivante s'exécute ?🤔🤔
    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
    Function Doublons() as Boolean
    For NbreLignes = 2 To Cells(Rows.Count, 1).End(xlUp).Row
      If Cells(NbreLignes, 1) = TextBox1 Then
       MsgBox " Doublon"
       Doublons = True
      End If
    Next
     
    End Function
    Sub test()
    If Doublons Then If MsgBox("Voulez vous quitter", vbOKCancel + vbQuestion) = vbOK Then Exit Sub
    'Else
    '... ' Code suivant
     
     
    End Sub
    Il faut préciser au msgbox ce que tu veux qu'il te retourne vbOKCancel pour vbOK par exemple ?

  9. #9
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    J'avais essayé de passer par là quand j'ai rencontré le problème avant de poster mais ça exécutait le code suivant.
    Même si on réussit à résoudre le problème, je voudrais bien savoir pourquoi il n'obéit pas à la restriction et exécute le code suivant.

  10. #10
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    En ajoutant Doublons = true, le retour de la fonction est vérifiée. Donc c'est cet ajout qui active la restriction ? C'est vraiment déconcertant, pourtant j'ai testé plusieurs astuces.
    Merci à vous pour les différentes réponses.

  11. #11
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 585
    Par défaut
    Bonjour,
    en fait le problème est entre la chaise et le clavier!

    tu ne lis pas correctement les réponse que l'on te fait comme dans ce poste là également!
    https://www.developpez.net/forums/d2...ues-non-vides/

  12. #12
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Je prends la peine de lire les réponses. J'ai noté la réponse et je prends soin de tester toutes les remarques que je reçois sur le forum ; mais j'ai voulu savoir pourquoi la restriction est passée outre.
    Faut il vraiment ajouter le retour de la fonction pour que la procédure obéisse à la restriction ?

    Merci

  13. #13
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 585
    Par défaut
    Citation Envoyé par Mr l'Ashanti Voir le message
    En ajoutant Doublons = true, le retour de la fonction est vérifiée. Donc c'est cet ajout qui active la restriction ? C'est vraiment déconcertant, pourtant j'ai testé plusieurs astuces.
    Merci à vous pour les différentes réponses.
    je n'ai pas dit que tu ne lisais pas, j'ai dit que tu lisais pas correctement!

    dans le poste #8 je mets Doublons = true!

    Alors que dans le poste #1 tune le fait pas !

    Nom : Sans titre.png
Affichages : 171
Taille : 95,1 Ko

  14. #14
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Excuse énormément si on est en déphasage.
    J'ai remarqué que vous avez ajouté : Doublons= True pour que la procédure obéisse à la restriction et ça marche comme je l'avais souhaité.
    C'est indéniable mais je voudrais comprendre pourquoi il faut utiliser le retour Booléen.

  15. #15
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 585
    Par défaut
    voila c'est bien ce genre de question qu'il faut poser! tu ne serais pas le DSI de ta boîte par Hazara?

    en schématisant, on peut considérer une fonction c'est comme une variable; une variable intelligente mais une variable quand même !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim  A as Boolean
    A=true
    A=Doublons 'A est une variable qui reçois la valeur de la variable intelligente {Fonction}  Doublons 
    If A Then If MsgBox("Voulez vous quitter", vbOKCancel + vbQuestion) = vbOK Then Exit Sub
    pour qu'une variable retourne un autre valeur que la valeur par défaut , False pour un booléen, il faut l'informer de son changement d'état et ça ne peut ce faire qu'a l'intérieur de la fonction!

  16. #16
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Un plus...
    Infiniment merci. Je croyais qu'il fallait forcément le retour de la fonction dans une autre procédure. C'est vraiment incroyable.
    Je découvre encore plus.
    Merci encore. 🙏🙏

  17. #17
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 585
    Par défaut
    Citation Envoyé par Mr l'Ashanti Voir le message
    Un plus...
    Infiniment merci. Je croyais qu'il fallait forcément le retour de la fonction dans une autre procédure. C'est vraiment incroyable.
    Je découvre encore plus.
    Merci encore. 🙏🙏
    ne te m'éprend pas il faut l'utiliser dans une procédure!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Test()
    Dim  A as Boolean
    A=true
    A=Doublons 'A est une variable qui reçois la valeur de la variable intelligente {Fonction}  Doublons 
    If A Then If MsgBox("Voulez vous quitter", vbOKCancel + vbQuestion) = vbOK Then Exit Sub
    End Sub
    ou directement dans un cellule com si c'était un fonction Excel

  18. #18
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Bien noté.

  19. #19
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 585
    Par défaut
    en complément!
    un fonction retourne ce qu'on veut! j'ai choisi de répondre par OUI/NON TRUE/FALSE par ce qu'un if vérifie si une condition est rempli ou non True/False
    If true thenla proposition de PetitBoutDeCode propose un Integer pourquoi pas si en plus de savoir s'il y a des doublon on veux en connaitre le nombre!

    un string pourquoi pas si on veut un affichage direct "OUI/NON"


  20. #20
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    C'est très important cette précision. Au cas où vous admettez que deux Doublons dans votre liste, cette méthode peut aider.
    C'est Super génial comme idée.
    Encore une fois merci.

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

Discussions similaires

  1. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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