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 :

[Excel 2013] ActiveSheet ne s'actualise qu'avec l'utilisation de points d'arrets


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ecole d'ingénieur informatique (EPSI Montpellier)
    Inscrit en
    Septembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ecole d'ingénieur informatique (EPSI Montpellier)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 8
    Points : 12
    Points
    12
    Par défaut [Excel 2013] ActiveSheet ne s'actualise qu'avec l'utilisation de points d'arrets
    Bonjour à tous,

    Je suis débutant en VisualBasic et je rencontre un problème qui me bloque depuis quelques jours, j'espère donc que vous pourrez m'aider.

    Contexte :
    L'entreprise dans laquelle je suis utilise différentes macros Excel sous Office 2010 et désire passer sous Office 2013, et je suis chargé de la maintenance de celle ci. Premièrement la macro sur laquelle je travail fonctionne très bien sur Office 2010 mais pose un problème lorsqu'on la lance sur Office 2013. La macro est censée afficher un UserForm avec des données stockées sur un Workbook différent, pour cela elle ouvre ce Workbook et récupère les infos nécessaires.

    Problème (uniquement sous Office 2013) :
    Lorsque la macro ouvre le Workbook sur lequel sont stocké les données désirées, la variable ActiveSheet ne se met pas à jour et donc le reste du programme plante. Cependant si je lance cette macro avec un point d'arrêt et que je l'exécute ligne par ligne la variable ActiveSheet se met à jour et le programme fonctionne très bien.

    Voila j'espère avoir été clair, si ce n'est pas le cas n'hésitez pas à me demander de clarifier certains points ou de vous transmettre certaine parties du code.

    En attente de vos propositions, merci par avance.

    Arthur

  2. #2
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Bonjour,

    Le problème que vous rencontrez semble être une très bonne raison de se passer de toute forme de sélection/activation dans un code Excel... à moins bien sûr qu'il n'y ait pas de contournement possible.

    Dans votre cas, le nom de l'onglet auquel ActiveSheet est censé faire référence est-il fixe et connu ?
    Si oui, passez simplement par une identification claire de cette sheet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("<Nom_du_fichier>").Sheets("<Nom_de_longlet>")
    Si cela n'est pas possible, après l'ouverture du fichier, ajoutez un DoEvents. Cela laissera le temps à Excel de charger proprement le fichier à ouvrir et de lancer les événements Open et surtout Activate.

    Cordialement

  3. #3
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,

    Bonnes remarques de @Ben_L.
    Je rajouterais à cela, si le classeur met un certain à s'ouvrir,
    alors utiliser Application.Wait (cf aide vba)
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ecole d'ingénieur informatique (EPSI Montpellier)
    Inscrit en
    Septembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ecole d'ingénieur informatique (EPSI Montpellier)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    Bonjour Ben_L,

    Tout d'abord merci beaucoup pour votre réponse !

    Ensuite je comprend tout à fait votre conseil de ne pas utiliser d'activation, malheureusement je ne suis pas l'auteur de cette macro et mon supérieur m'à demandé de toucher le moins possible au code en lui même car il est très long et complexe. Mon travail était simplement de corriger les erreurs qui apparaissent sous Office 2013, je cherchais donc une solution pour actualiser ce ActiveSheet. J'ai essayer beaucoup de choses dont le "DoEvents" dont vous parlez et rien y fait..

    J'attend donc de voir si d'autres propositions me sont apportées, sinon je demanderais si j'ai l'autorisation de modifié ActiveSheet par ce que vous me recommandez. Merci encore

    Cordialement,

    Arthur

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ecole d'ingénieur informatique (EPSI Montpellier)
    Inscrit en
    Septembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ecole d'ingénieur informatique (EPSI Montpellier)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    Bonjour RyuAutodidacte,

    Merci de votre réponse également !

    Et pour vous répondre j'ai aussi essayer de rajouter Application.Wait avec 20sec (même si je trouvais ca pas très clean ^^) pour voir si c'était le temps de chargement qui causait le problème mais cela n'a rien changé.
    J'ai vraiment l'impression que ce n'est pas le Worbook qui ne se charge pas à temps mais plutôt la variable ActiveSheet qui ne se met pas a jour.

    Arthur

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ecole d'ingénieur informatique (EPSI Montpellier)
    Inscrit en
    Septembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ecole d'ingénieur informatique (EPSI Montpellier)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    Bonjour Marc-L,

    Merci pour votre réponse cependant :

    Comme pourtant indiqué dans mes précédant messages, je n'ai pas codé cette macro j'en assure juste la maintenance et j'ai pour ordre de la modifier le moins possible, juste de fixer les différent problèmes.

    Ajouter le Workbook voulu avant ActiveSheet serais donc pour moi le même problème que de mettre directement LeBonWorkbook.LeBonWorksheet, c'est a dire modifier de nombreuses lignes de la macro. Et donc dans le cas ou je serais obligé d'en venir la je mettrais cette dernière solution.

    Lire les réponses précédente dans un forum n'est il pas le B A BA ?

    Cordialement,

    Arthur

  7. #7
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    ArthurFort,

    Dans la mesure où votre rôle, si j'ai bien compris, consiste à assurer le bon fonctionnement de la macro, il paraîtrait logique que vous puissiez modifier le code si celui-ci dysfonctionne.
    La réponse de Marc-L paraît ainsi tout à fait acceptable.

    Le fait que vous souhaitiez modifier le code le moins possible peut se comprendre. Et ça tombe bien : il n'est pas forcément utile de supprimer tous les ActiveSheet pour corriger le problème.

    Cordialement

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ecole d'ingénieur informatique (EPSI Montpellier)
    Inscrit en
    Septembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ecole d'ingénieur informatique (EPSI Montpellier)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    Ben_L,

    Evidemment que la réponse de Marc-L est acceptable, mais elle revient (pour mon problème en tout cas) au même que votre solution c'est a dire modifier les multiples lignes utilisant ActiveSheet (En rajoutant un Workbook devant ou en la remplaçant complètement) ce qui je sens va finir par être ma dernière solution.

    Ce que je n'ai par contre pas trouvé acceptable, c'est sa condescendance.

    Cordialement,

    Arthur

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ecole d'ingénieur informatique (EPSI Montpellier)
    Inscrit en
    Septembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ecole d'ingénieur informatique (EPSI Montpellier)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    Marc-L,

    J'espère que vous comprenez bien que je suis d'accord avec vous sur le fait que cette macro n'a pas été codé de manière professionnelle, et c'est pour cela que j'ai tant de problème à résoudre. Et personnellement je serais d'accord de réécrire ce code, malheureusement ce n'est pas ce qui m'a été demandé.

    Il est donc inutile de m'en faire le reproche, je viens sur ce forum pour obtenir de l'aide pas pour que l'on me critique (injustement qui plus est).

    Cordialement,

    Arthur

  10. #10
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    Connaissant bien Marc et l'aide qui apporte, ce n'est pas de la condescendance mais des conseils avisés (on ne tourne pas autour du pot).
    Dans le cas où il faut moins modifier le code, il faut dans ce cas définir la variable Worksheets du classeur qui s'ouvre et faire le pointage dessus :
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub MaMacro
    Dim ws As Worksheet, Sep$, Chm$
    Sep = Application.PathSeparator
    Chm = "MettreLeCheminCorrespondantAuClasseurAouvrir"
    Workbooks.Open Chm
    Set ws = Workbooks(Mid(Chm, InStrRev(Chm, Sep) + 1)).ActiveSheet
    'puis pointer sur l'objet ws.LaplageConcernée (ne connaissant pas le code) aux différents endroits concernés
    'ex  simple : ThisWorkBook.Range("A1:E5").Value = ws.Range("A1:E5").Value (ThisWorkBook étant le classeur contenant la macro ici)
    'ne pas oublier de supprimer la variable ws juste après la fermeture du classeur comme ci-dessous :
    Set ws = Nothing
    Edit : pb de validation de mesg, comme mon message vient après, bien sûr suivre les conseil de débogage

    Edit 2 : Bien sur comme dit précédemment, il est quand même bien mieux d'indiquer le nom de la feuille visée dans le classeur à ouvrir
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  11. #11
    Membre à l'essai
    Homme Profil pro
    Ecole d'ingénieur informatique (EPSI Montpellier)
    Inscrit en
    Septembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ecole d'ingénieur informatique (EPSI Montpellier)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    Bon et bien merci à tous pour vos réponses, il semblerait qu'il n'y en ait juste aucun moyen de résoudre mon problème si ce n'est de modifier le code pour le rendre plus "clean".

    Je vais donc en informer mes supérieurs et remplacer ces "ActiveSheet".

    Je clôture donc cette discussion encore merci à vous pour vos conseils.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ecole d'ingénieur informatique (EPSI Montpellier)
    Inscrit en
    Septembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ecole d'ingénieur informatique (EPSI Montpellier)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    RyuAutodidacte,

    Merci de ce conseil, comme je l'ai dit je vais effectivement adopter la solution de modifier le code. Mais bien sur le moins possible.

    Encore merci a tous pour vos réponses, et à une prochaine fois !

    Cordialement,

    Arthur

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

Discussions similaires

  1. Probleme avec Studio et les points d arrets
    Par Seth77 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 22/07/2016, 10h28
  2. [XL-2013] Enregistrer un fichier Excel 2013 en Excel 2007 avec macros
    Par TOUGMA dans le forum Excel
    Réponses: 7
    Dernier message: 02/03/2014, 08h03
  3. Ouvrir un objet excel 2013 avec access 2003
    Par emeric2502 dans le forum VBA Access
    Réponses: 4
    Dernier message: 11/02/2014, 23h12
  4. Ouvrir un objet excel 2013 avec access 2003
    Par emeric2502 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/02/2014, 15h28
  5. [XL-2003] Actualiser données avec Excel fermé
    Par Williamm dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/08/2011, 09h49

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