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 :

La magie des Boutons - Dysfonctionnement d'Annuler (sortir de l'userform)


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2016
    Messages : 41
    Par défaut La magie des Boutons - Dysfonctionnement d'Annuler (sortir de l'userform)
    Coucou à tous,

    J'ai programmé un petit truc sur VBA avec un userform sur lequel on trouve quelque boutons etc... Dont un bouton qui s'appelle "Annuler" comme dans la plupart des fenêtres windows (fenêtre fenêtres ), elle sert à quitter le userform (code vba de l’événement clic : End).

    Quand je lance le programme à partir d'un bouton auquel ma macro est assigné, tout se passe bien. Mais j'ai décidé de rajouter quelque chose.
    Maintenant, ma macro se lance au démarrage de mon classeur Excel. Et alors là, quelque chose de magique se produit :
    Mon bouton annuler ne marche plus...

    J'ai donc décidé de regarder mon code toussa toussa, rien ne cloche. Alors j'ai eu la bonne idée de vous écrire!
    Et quand je vous ai écrit, j'ai voulu joindre mon fichier par "cijoint.com".
    J'ai revérifié ce que j'allais vous envoyer donc j'ai téléchargé le classeur et la BIM ça remarche (dès le démarrage)
    J'ai donc déplacé mon classeur dans différents dossiers de mon ordi, (Téléchargements, Bureau, Documents...) et il se trouve qu'il ne marche pas partout selon les dossiers.

    Alors? magique?

    Voici le lien en question : http://www.cjoint.com/c/FKkpnPRQkhU

    J'aimerais juste savoir si vous aviez des idées ou non... Merci par avance!

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,


    quitter un userform avec l'instruction End ? C'est prendre une tronçonneuse pour découper des lamelles de courgettes en vue de décorer une assiette !


    Utilise plutôt Unload Me pour fermer ton userform

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2016
    Messages : 41
    Par défaut Erreur
    J'ai besoin de plusieurs valeurs que renvoi la USF donc si je met un unload, il me bash par une erreur

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut



    peut-on avoir un aperçu des procédures de ton userform ?

    impératives : celle du bouton, l'initialisation, celle qui "renvoi des valeurs"

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2016
    Messages : 41
    Par défaut
    Tu as le classeur complet en PJ.

    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
    Private Sub UserForm_Initialize()
     
        Dim b As Integer
        Dim a As Integer
     
     
            For a = Asc("A") To Asc("Z")
                ComboBox1.AddItem Chr(a)
                ComboBox2.AddItem Chr(a)
                ComboBox3.AddItem Chr(a)
                ComboBox4.AddItem Chr(a)
                ComboBox5.AddItem Chr(a)
            Next a
     
     
        ComboBox1.Style = fmStyleDropDownList
        ComboBox1.ListIndex = 0
     
        ComboBox2.Style = fmStyleDropDownList
        ComboBox2.ListIndex = 1
     
        ComboBox3.Style = fmStyleDropDownList
        ComboBox3.ListIndex = 2
     
        ComboBox4.Style = fmStyleDropDownList
        ComboBox4.ListIndex = 1
     
        ComboBox5.Style = fmStyleDropDownList
        ComboBox5.ListIndex = 3
     
     
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton4_Click()
     
        End
     
    End Sub
    Par exemple, je dois sélectionner 2 fichiers, si je fais un unload, la fonction continue et un message d'erreur apparaît logiquement en me disant qu'il manque des infos (comme les deux fichiers)

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Quelle fonction ? Quel message ?

    nous n'ouvrons pas les classeurs excel fournis (sauf si c'est nous qui le demandons), pour des questions de sécurité d'une part, mais aussi de structuration dans la façon qu'à l'auteur d'expliquer et présenter son problème.

    si chacune de tes interventions génère de nouvelles questions, c'est que clairement tu n'arrives pas à présenter ton problème et à exposer les points précis de ton projet qui sont impactés.
    Si tu es l'auteur du projet, c'est normalement simple d'apporter tous les éléments requis.

    Tu dois vraiment faire un effort pour nous montrer toutes les procédures qui ont un impact sur ta problématique
    Là, je crois deviner que tu as une procédure qui appelle ton userform... et qu'à la fermeture de ce dernier ta procédure continue d'autres traitements ?

    Si tel est le cas, tu commences à deviner ce dont nous avons besoin pour comprendre comment fonctionne ta machinerie ?


    Entre nous, avec juste les éléments que tu as montré et expliqué .... je conçois mal comment un Unload Me te génère une erreur là où un End ne le fait pas.
    Ce qui m'amène à penser que tu n'as pas sécurisé ta procédure appelante pour gérer l'absence de ces "valeurs" quand le userform est fermé.

    Si c'est bien ça ... la solution sera très simple je pense

    Mais, que de suppositions dans mon messages ... une seule c'est déjà trop d'ailleurs


  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2016
    Messages : 41
    Par défaut
    Mon code sert à générer un tableau en fonction des valeurs de deux autres tableaux.

    A l'ouverture de mon programme, je demande à l'utilisateur de sélectionner les deux tableaux.
    Sur la USF où est demandé d'aller sélectionner les deux tableaux, il y a un bouton annuler.
    Ce bouton sert simplement à fermer la userform et ne pas réaliser les traitements prévus ensuite.
    Si je fais un "unload" mon programme plante en me disant qu'il manque des valeurs pour continuer le programme. Du genre, il manque les deux tableaux à analyser par exemple.
    Or, ce programme, je n'ai pas envie qu'il continue quand je fais annuler.

    Je suis désolé de vous le dire ainsi mais votre intervention ne m'a absolument pas aidé donc je pense normal qu'elle génère de nouvelles questions.

    Que montrerais-tu pour mettre en avant que le programme fonctionne différemment en fonction des dossiers dans lequel il est placé alors que je ne fais référence à aucun dossier dans le code?

    Le End ne génère pas d'erreur car il quitte complètement le programme. (ah oui et, ça fait 2 semaines que j'ai commencé le VBA par moi-même, j'ai certainement beaucoup de choses à apprendre, alors si tu réponds merci de répondre au problème. )

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Désolé, mon intervention, d'autant plus que tu débutes en VBA, doit justement te permettre de te structurer l'esprit dans la façon de présenter tes projets VBA. De là en découle tout naturellement une organisation et une logique de programmation qui permet de rationnaliser les étapes d'un programme, et d'éviter d'écrire des millions de lignes de code quand une centaine suffit.


    Si tu veux annuler un "programme principal" (procédure appelante) qui appelle un Userform et qui attend des valeurs en retour quand le userform se ferme, il faut que tu testes dans ta procédure appelante si les valeurs sont présentes.

    S'il n'y a pas de valeurs, alors on s'arrête, sinon on continue : un tout bête If/End If à placer juste après la ligne de code où tu affiches le Userform.

    Donc, je réitère ma demande de façon plus claire :

    montre-nous ta procédure appelante svp
    montre-nous la partie du code dans ton userform où on pourra comprendre ce que tu entends par "tableau" : une plage (Range), une position (Address), des valeurs (Tableau de .Values), autre ?

Discussions similaires

  1. Réponses: 43
    Dernier message: 06/03/2016, 19h33
  2. Changer le nom des boutons OK et Annuler
    Par kilian67 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/05/2009, 22h24
  3. Réponses: 0
    Dernier message: 15/10/2008, 15h31
  4. proprietes des boutons
    Par DALI EDY dans le forum MFC
    Réponses: 2
    Dernier message: 14/02/2004, 08h22
  5. Réponses: 2
    Dernier message: 31/08/2002, 14h00

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