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 :

Macro qui fonctionne en faisant F8 mais pas en auto


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 89
    Points : 46
    Points
    46
    Par défaut Macro qui fonctionne en faisant F8 mais pas en auto
    Bonjour,

    Quelqu'un de pro comme vous peut-il m'aider, je vous en remercie d'avance

    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
     
    sub test()
    Dim Onglet As String
     
    ' Pour info les deux classeur sont déjà ouvert
     
    Onglet = Sheets("Tutoriel").Cells(23, 13).Value       ' recuperation de la feuille du nouveau classeur
    Workbooks("Nouveau classeur.xlsm").Sheets(Onglet).Copy Before:=Workbooks("Ancien classeur.xlsm").Sheets("Feuil2") ' Copie de la feuille (Onglet) du nouveau classeur vers feuille 1 de l'ancien classeur
    Workbooks("Nouveau classeur.xlsm").Close ' Fermeture du nouveau classeur
    Workbooks("Ancien classeur.xlsm").Sheets(Onglet).Activate ' Activation de l'ancien classeur feuille (Onglet)
    Workbooks("Ancien classeur.xlsm").Sheets(Onglet).Name = "Toto "  ' Renommer feuille (Onglet) en Toto de l'ancien classeur
    Workbooks("Ancien classeur.xlsm").Sheets("Feuil2").Delete 'Effacer une autre feuille 2 de l'ancien classeur
     
     
    End sub
    Ce code fonctionne très bien en faisant pas à pas mais plante l'excution à la ligne Workbooks("Nouveau classeur.xlsm").Close ' Fermeture du nouveau classeur en mode macro

    La macro plante juste après la copie et refonctionne en faisant F8

    Merci d'avance pour votre aide

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Salut.

    Dans quel classeur se trouve la macro?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 89
    Points : 46
    Points
    46
    Par défaut
    Re

    Merci pour ta réponse

    Dans l'ancien classeur

    Cdlt

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Je n'ai pas recréé l'environnement pour voir pourquoi ça plante, et comme ça, à lire, je ne vois pas trop.

    Juste un ou deux conseils. Tu aurais intérêt à travailler avec des objets Workbook, et à ne pas travailler sur le classeur actif, surtout si c'est le nouveau.

    Donc, tu créées deux objets workbook, appelés par exemple Ancien et Nouveau. Puisque la macro est dans Ancien, tu auras un code du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set Ancien = thisworkbook
    set Nouveau = application.workbooks.add()
    ancien.activate
    En pratiquant ainsi, je n'ai jamais rencontré ton problème.

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 123
    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 123
    Points : 9 951
    Points
    9 951
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    quel est le message d'erreur ?

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    J'ai reconstitué ta configuration et j'ai effectué le test. La macro a fonctionné.

    Ceci étant dit, elle a d'abord bloqué. J'ai alors commenté la ligne d'activation de l'ancien classeur (après la fermeture du nouveau), et la macro est passée sans problème. J'ai recréé la config, décommenté la ligne et relancé la macro et hop, elle est passée...

    Mais, pour rester sur mon idée de départ, j'avais d'abord testé avec des objets déclarés, et c'est passé du premier coup:
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub Test1()
      Dim wbSource As Workbook
      Dim wbTarget As Workbook
      Dim shSource As Worksheet
      Dim shSourceName As String
     
      Set wbTarget = ThisWorkbook
      Set wbSource = Workbooks("Nouveau classeur.xlsm")
      shSourceName = wbTarget.Worksheets("Tutoriel").Cells(23, 13).Value
      Set shSource = wbSource.Worksheets(shSourceName)
      shSource.Copy before:=wbTarget.Worksheets("Feuil2")
      wbSource.Close
      wbTarget.Worksheets(shSourceName).Name = "Toto"
      wbTarget.Worksheets("Feuil2").Delete
    End Sub

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 89
    Points : 46
    Points
    46
    Par défaut
    Bonjour et merci Pierre

    Merci pour ton bout de code qui ma bcp aidé et appris.
    Mais j'ai encore un problème :

    Lorsque je lance ton code il s'arrete 'Exécution interrompue" au niveau de la ligne :

    et lorsque je fais 'Continuer' au lieu de débogage la macro tourne très bien jusqu'à la fin.

    Y-a-t il une raison ?

    Merci d'avance

    je viens de penser à une chose ... ( oui cela m'arrive)

    lorsque je fais tourner la macro pas à pas ou en laissant le doigt dessus (la touche F8) la macro tourne impec
    Par contre en execution auto elle plante (voir post avant)

    le temps d'excution en auto et à la main est différent -> d'ou ma reflexion dois-je rajouter une pause de 5 secondes dans la macro ?
    Merci désolé pour le disturb

    Cdlt

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour,

    oui, le VBA est bien de l'interprété séquentiel.
    Comme de notre côté il n'y a pas de souci, la source est soit ton classeur, soit ton Excel ou encore ton Windows …

    P'tite démonstration à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Demo()
        With ThisWorkbook
            SRC$ = .Range("Tutoriel!M23").Value
     
            With Workbooks("Nouveau classeur.xlsm")
                .Worksheets(SRC).Copy ThisWorkbook.Worksheets("Feuil2")
                .Close
            End With
     
            .Worksheets(SRC).Name = "Toto"
            .Worksheets("Feuil2").Delete
        End With
    End Sub
    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Essaie avec wbSource.Close False bien que je ne comprenne pas pourquoi ça fonction en F8 et pas en F5. Je ne vois pas en quoi le fait d'aller moins vite (F8) pose problème car la ressource n'est plus utilisée après, et de toute façon, le VBA attend que la ligne soit exécutée pour passer à la suite.

    Ce sont des fichiers en réseau?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 89
    Points : 46
    Points
    46
    Par défaut
    oui le classeur nouveau est en réseau.

    Cdlt

Discussions similaires

  1. [XL-2007] Macro qui fonctionne sur un poste mais pas sur un autre
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/06/2012, 10h24
  2. Réponses: 0
    Dernier message: 24/06/2010, 15h10
  3. [ZF 1.10] Clause where qui fonctionne avec type int mais pas avec type String
    Par shadypierre dans le forum Zend_Db
    Réponses: 5
    Dernier message: 30/04/2010, 13h00
  4. Réponses: 5
    Dernier message: 26/08/2009, 15h40
  5. [RegEx] Regex qui fonctionne dans un preg_replace mais pas dans un ereg
    Par méphistopheles dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2007, 11h56

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