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 :

Mettre une condition pour eviter une erreur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Par défaut Mettre une condition pour eviter une erreur
    Bonsoir à tous,

    J'ai un bouton sur lequel est attaché ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Private Sub Bouton_Click()
        If procedureEnCours Then
           Code1
            procedureEnCours = False
            Bouton.Caption = "Ouvrir le fichier"
        Else
           Code2
            procedureEnCours = True
            Bouton.Caption = "Modifications terminées"
        End If
    End Sub
    procedureEnCours est égale à vrai au départ.

    Donc lorsque je click sur le bouton.
    Le Code1 s’exécute.

    Je voudrais que dès lors qu'il y a une erreur et que le code 1 ne s’exécute pas jusqu’au bout, l'inscription du bouton reste "Ouvrir le fichier"(Bouton.Caption = "Ouvrir le fichier").

    Sauriez vous comment je dois m'y prendre, s'il vous plaît.
    Cordialement.

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,
    exemple ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub nanana()
    Bouton.Caption = "Modifications en cours"
    ...ton code
    Bouton.Caption = "Modifications terminées"
    end sub
    ça ne suffirait pas ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Par défaut
    Merci casefayere.

    Non.
    En fait lorsque je click pour une première fois sur le bouton.
    Le code 1 doit s'effectuer.
    Entre autre, je choisit un fichier à ouvrir et je le manipule.
    Mais si par exemple j'annule, le statut du bouton passe quand même à "Modifications terminées" et procedureEnCours passe à False.

    Je voudrais mettre une condition.
    Genre si le code1 ne s’exécute pas jusqu'au bout alors procedureEnCours reste à True et quand je reclickerais sur le bouton, ce ne sera pas le code 1 mais bien le code 2 qui sera exécuté.

    code 1 et code 2 sont des procédures que j'ai dans d'autre module.

    Cordialement.

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Excuses-moi de ne pas comprendre, mais :
    Mais si par exemple j'annule,...
    quelle est ta procédure pour annuler (éventuellement) ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Par défaut
    Voici un fichier Test,

    Ce sera beaucoup plus parlant.
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    C'est un peu tordu à mon sens comme façon de procéder mais bon, je ne saurai donner d'avis personnel.

    J'ai ajouté une variable publique booléenne Ouvert
    Module:
    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
    40
    41
    42
    Public ProcedureEnCours As Boolean
    Public ClasseurOuvert As String
    Public Ouvert As Boolean
    'Chemin initial proposé à l'utilisateur quand il ouvre le fichier
    Private Const CHEMIN_FICHIERS As String = "C:\Documents and Settings\llolekal\Bureau"    'A PERSONNALISER !
     
     
    'Première partie de la macro
    'Ouverture du fichier, préparation et choix pour l'utilisateur des catégories
    Public Sub Code1()
    Dim wb1 As Workbook
    Dim ws1 As Worksheet
     
    Ouvert = OuvertureFichier(wb1, CHEMIN_FICHIERS)
    If Ouvert Then
        ClasseurOuvert = wb1.Name
        Set ws1 = wb1.Worksheets(1)
        MsgBox ClasseurOuvert
    End If
    End Sub
     
    Public Sub Code2()
     
    MsgBox "Voilà"
    End Sub
     
    Public Function OuvertureFichier(ByRef Wb As Workbook, ByVal CheminInitial As String) As Boolean
     
    With Application.FileDialog(msoFileDialogOpen)
        .Filters.Clear
        .Filters.Add "Fichier Excel", "*.xls; *.xlsx; *.xlsm"
        .AllowMultiSelect = False
        .InitialFileName = CheminInitial
        .Show
        If .SelectedItems.Count = 1 Then
            OuvertureFichier = True
            Set Wb = Workbooks.Open(.SelectedItems(1))
        Else
            MsgBox "Erreur à l'ouverture du fichier"
        End If
    End With
    End Function
    Bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub btnExecution_Click()
     
    If ProcedureEnCours Then
        Code2
        ProcedureEnCours = False
        btnExecution.Caption = "Ouvrir le fichier"
    Else
        Code1
        If Ouvert Then
            ProcedureEnCours = True
            btnExecution.Caption = "Modifications terminées"
        End If
    End If
    End Sub
    PS: J'ai pas trop cherché à comprendre le pourquoi

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Par défaut
    Bonjour à tous,

    Merci Mercadog.

    Mais la solution de me convient pas, dans le code1 ainsi que dans le code 2 il y a beaucoup de code.

    Est ce possible de mettre une condition le fait ou non que les codes 1 et 2 s’exécute jusqu'à la fin, dans quel cas je change mon Statut et la valeur de ma variable procedureEnCours.

    Cordialement.

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'utilisation de la variable booléenne est la solution.
    La proposition de Mercatog est celle que j'aurais préconisée quant à tes procédures Code1 & Code2 tu écris ce que tu veux à l'intérieur. Ce n'est qu'un exemple qu'il t'a montré.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Par défaut
    Merci de ta réponse Corona.

    Voici le fichier complet en pièce jointe.
    Car je n'y parvient pas.

    Cordialement.

    Bonjour à tous,

    Quelqu'un aurait t-il une idée.
    Comme vous voyez dans le classeur ci dessous, lorsque l'on "click" sur le bouton, même si la première partie ne s’exécute, le statut est changé.

    Je voudrais éviter cela.
    Que si la première partie ne s’exécute pas correctement, le statut ne change pas et que lorsque l'on "reclickera" sur le bouton, ce soit la première partie qui soit appelé et non la deuxième.

    Cordialement.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Lien dans un frame d'une cadre pour ouvrir une autre page sur une même fenêtre
    Par maelislah dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 27/06/2015, 20h39
  2. Réponses: 6
    Dernier message: 24/01/2010, 21h34
  3. faire une condition pour arrêter une macro
    Par db48752b dans le forum Access
    Réponses: 11
    Dernier message: 21/09/2006, 20h21
  4. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24
  5. gerer les ' dans une chaine pour eviter erreur sql
    Par Malone dans le forum Langage
    Réponses: 3
    Dernier message: 24/08/2005, 14h27

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