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 macro s'arrête sans message après ouverture d'un classeur avec "On Error Resume Next" [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut La macro s'arrête sans message après ouverture d'un classeur avec "On Error Resume Next"
    Bonjour,

    La macro sur laquelle je travaille ouvre un classeur et le referme un peu plus loin. J'aimerais donc que la macro l'ouvre s'il ne l'est pas. Voici le code:
    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
    Option Base 1
    Public dc As Workbook
     
    Sub Test()
     
        Application.ScreenUpdating = False
     
        Dim data As Workbook
        Dim écr As Worksheet
     
        Set data = ActiveWorkbook
        Set écr = data.Sheets(1)
        On Error Resume Next
            Set dc = Workbooks("Fichier.xlsx")
        If Err <> 0 Then
            Set dc = Workbooks.Open("C:\Chemin\Fichier.xlsx")
        End If
        On Error GoTo 0
     
        MsgBox "That's All Folks!"
     
    End Sub
    Le problème, c'est que si le classeur n'est pas ouvert, la macro s'arrête après avoir ouvert ce dernier sans message d'erreur ni indication quelconque, alors qu'elle va jusqu'au bout et affiche le message de fin si le classeur "dc" est ouvert.

    Une idée?

    Notez que j'ai essayé sans Application.ScreenUpdating = False et que l'option de récupération d'erreur est: "Arrêt sur les erreurs non gérées".

    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je ne vois aucun problème dans le code que tu montres là.
    Je pense que tu as peut-être exposé incomplètement le problème rencontré
    Si par :
    la macro s'arrête après avoir ouvert ce dernier sans message d'erreur ni indication quelconque
    tu entends que le classeur "C:\Chemin\Fichier.xlsx" s'ouvre si le classeur Fichier.xlsx n'est pas ouvert, c'est normal et c'est ce que tu lui demandes de faire.
    Qu'attends-tu exactement que fasse d'autre ta macro ?

    Pour le cas où tu voudrais être prévenu de ce que le 1er classeur n'étant pas ouvert, tu ouvres le second : quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim data As Workbook, écr As Worksheet
        Set data = ThisWorkbook
        Set écr = data.Sheets(1)
        On Error Resume Next
            Set dc = Workbooks("Fichier.xlsx")
        If Err Then
            MsgBox "Fichier.xlsx : " & Err.Description & "  ... et blabla éventuel ..."
            Set dc = Workbooks.Open(""C:\Chemin\Fichier.xlsx"")
        End If
        On Error GoTo 0
        MsgBox "That's All Folks!"

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Commences par retirer ce on error et après tu nous parleras du message d'erreur que tu avais inhiber avec le on error!

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Je viens de relire avec la plus grande attention tout ce qui figure dans le premier message de cette discussion et commence à me demander si tu ne connais pas la même mésaventure que celle qu'il m'a été donné de connaître un jour, à savoir que :
    - plus aucune instruction d'une macro lancée depuis un classeur A n'était exécutée au delà d'une instruction (qu'elle contenait) d'ouverture d'un classeur B. Quand je dis "aucune", je dis bien AUCUNE, y compris donc une réactivation du classeur de départ. Tout se passait comme si n'étaient dès lors reconnues que les instructions provenant du classeur B
    - je ne suis jamais parvenu à comprendre pourquoi ( ******)
    - très étonnamment : en recréant (manuellement) totalement le classeur A (ailleurs sur mon HD) à l'identique, y compris le code, le problème avait disparu et le comportement était redevenu normal
    - ****** j'ai par la suite plusieurs fois tenté (essais et manoeuvres divers) de reproduire le cas, à partir de divers fichiers. Sans succès (comportement toujours normal)

    Voilà, si cela peut t'aider ...

  5. #5
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    unparia te revoilà!

    Une précision: la macro est dans un classeur de macro personnel et non pas dans un classeur "classique". Elle peut donc se lancer depuis n'importe quel classeur. Ce n'est pas dit non plus que les deux problèmes n'aient rien à voir. Je ne sais pas.
    Deuxième précision: J'ai essayé le pas-à-pas et ça fonctionne sans problème, c'est-à-dire que la macro affiche la boîte de dialogue à la fin même si le classeur "dc" est fermé au départ.

    En essayant avec un nouveau classeur vide appelé "test.xlsx", d'abord dans le même répertoire, puis dans un autre, le problème est identique.

    @dysorthographie
    L'erreur est: "9 : L'indice n'appartient pas à la sélection." Sans surprise il me semble, car si le classeur n'est pas ouvert, VBA ne trouve pas son indice; ou nom en l'occurrence.

    Chose curieuse, ce code exécute bien la commande Debug.Print, mais continue de ne pas ouvrir le classeur après:
    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
    Option Base 1
    Public dc As Workbook
     
    Sub Test()
     
        Application.ScreenUpdating = False
     
        Dim data As Workbook
        Dim écr As Worksheet
     
        Set data = ThisWorkbook         '------ (hors-sujet: un débat sur lequel je dois me pencher ;) )
        Set écr = data.Sheets(1)
        On Error Resume Next
            Set dc = Workbooks("test.xlsx")
        If Err <> 0 Then
            Debug.Print Err & " : " & Err.Description
            On Error GoTo 0                 '------- au cas où le On Error poserait problème
            Set dc = Workbooks.Open("C:\test.xlsx")   '------ essai dans le répertoire de départ
        End If
        On Error GoTo 0
     
        MsgBox "That's All Folks!"
     
    End Sub
    Ce serait donc plutôt la commande Set dc = Workbooks.Open qui fait s'arrêter la macro.
    En enlevant le Set dc =, le problème subsiste. C'est donc le fait d'ouvrir un classeur qui pose problème.

    Petite question: est-ce que vous arrivez à reproduire le problème?

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Que se passe-t-il avec uniquement ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Base 1
    Public dc As Workbook
     
    Sub Test()
      Dim dc As Workbook
       Set dc = Workbooks.Open("C:\test.xlsx")
      MsgBox "That's All Folks!"
    End Sub
    et rien d'autre.
    La msgbox apparait-elle ?
    Car si non :
    tu es bel et bien dans le cas de mésaventure que j'ai subie
    et
    Petite question: est-ce que vous arrivez à reproduire le problème?
    Justement non (et je n'ai d'ailleurs jamais réussi à le reproduire alors ...)

  7. #7
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut autre méthode (sans On Error), même problème
    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
    Option Base 1
    Public dc As Workbook
    Public cl As Workbook
    Public list As String
     
    Sub Test()
     
        Dim data As Workbook
        Dim écr As Worksheet
     
        Set data = ThisWorkbook
        Set écr = data.Sheets(1)
    For Each cl In Workbooks
        list = list & vbLf & cl.Name
    Next
        If list Like "*" & "Fichier.xlsx" & "*" = False Then
            Workbooks.Open ("C:\Chemin\Fichier.xlsx")
        End If
        Set dc = Workbooks("Fichier.xlsx")
     
        MsgBox "That's All Folks!"
     
    End Sub
    Le message de fin ne s'affiche pas si le classeur "Fichier.xlsx" n'est pas ouvert; le pas-à-pas fonctionne.

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

Discussions similaires

  1. [XL-2010] Ouverture d'un classeur avec SHIFT inopérant
    Par Ankou56 dans le forum Excel
    Réponses: 17
    Dernier message: 20/10/2015, 09h17
  2. Réponses: 3
    Dernier message: 19/08/2014, 17h11
  3. Réponses: 0
    Dernier message: 10/02/2014, 08h46
  4. Réponses: 6
    Dernier message: 09/10/2009, 15h54

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