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 :

et [XL 2013] - [Workbook].activate ne fonctionne pas quand ScreenUpdating revient à =True [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut et [XL 2013] - [Workbook].activate ne fonctionne pas quand ScreenUpdating revient à =True
    Bonjour le Forum

    Avec Excel 2016 et 2013 la méthode Activate appliquée à un workbook ne fonctionne plus, après avoir ouvert un ou plusieurs fichiers alors que ScreenUpdating = False. Cela fonctionne parfaitement avec Excel 2003 et 2007.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Test()
    'avec[xl2016] Workbook.Activate ne fonctionne pas,
    'quand ScreenUpdating = False !
    Dim w1 As Workbook
    Dim w2 As Workbook
        Application.ScreenUpdating = False
        Set w1 = Workbooks.Add(xlWBATWorksheet)
        Set w2 = Workbooks.Add(xlWBATWorksheet)
        Application.ScreenUpdating = True
        w2.Activate           'ça fonctionne pas : w1 qui reste actif !!!
        ThisWorkbook.Activate 'idem
    End Sub
    Curieusement, c'est le premier classeur ouvert (Add ou Open : même combat !) qui devient actif à la fin de la macro.

    J'ai essayer de placer plusieurs DoEvents sans succès.

    Bien évidemment, si on supprime ScreenUpdating = False, ça fonctionne normalement.

    Je n'ai pas trouvé de solution dans les post similaires.

    Edit : avec Excel 2016 et 2013 - Modif Titre
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    à ton avis, regardes bien, tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set w1 = Workbooks.Add(xlWBATWorksheet)
        Set w2 = Workbooks.Add(xlWBATWorksheet)
    il me semble que c'est le même, non ? et il faudrait savoir ce que représente "xlWBATWorksheet"
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur 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
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Workbooks.Add(xlWBATWorksheet) est la commande usuelle pour créer un nouveau classeur contenant une seule feuille de calcul (xlWBATWorksheet étant le modèle des feuilles de calcul Excel)

    Le problème ne se situe pas là, il y a bien 2 classeurs qui sont créés (w1 etw2). le pb c'est la commande Activate qui n'active rien !
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Le classeur actif n'est pas ThisWorkbook, mais ActiveWorkbook.
    Idem d'ailleurs sous 2007.

    EDIT : Pour être très précis : que ce soit avec Office 2007 ou une version supérieure :
    ThisWorkbook n'est pas le classeur actif, mais celui dans un des modules duquel est écrite la macro en cours d'exécution.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par unparia Voir le message
    Le classeur actif n'est pas ThisWorkbook, mais ActiveWorkbook.
    Je ne vois pas le rapport avec le problème !!!

    Le rôle de la méthode Activate est de transformer un classeur existant en classeur actif

    ThisWorkbook est le classeur qui contient la macro et le problème est que ThisWorkbook.Activate ne fonctionne pas (pas plus que w2.Activate) !
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    un éclair, j'espère ne pas dire de bétise mais pour afficher le classeur et le rendre actif, passer par "Windows à tester, si echec ajouter l'extension
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur 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...)

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    testé et non constaté sur excel 2016 (win10), ni sur 2010 (win7) d'ailleurs.
    eric

  8. #8
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour Eriiic,

    C'est curieux, j'ai le pb sur mes 2 PC portables équipés de Windows 10 Famille.
    Celui-ci avec Office Famille et Étudiant 2016 Version 16.0.6965.2058
    et l'autre avec Office Famille 2013

    Je n'avais pas de problème avec mon fixe (W7-Xl2007)

    Je ne suis le seul a avoir ce pb : http://stackoverflow.com/questions/2...screenupdating
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  9. #9
    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 677
    Points
    18 677
    Par défaut

    Bonjour, bonjour !

    Quel est donc l'objet du code ?

    Car un bon code n'a pas besoin de ces affreux Select & Activate !

    Voilà, voilà !

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    et as-tu vu ma dernière réponse ? car comme je n'ai pas testé (je suis occupé), j'aimerai savoir
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur 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...)

  11. #11
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    @casefayere
    le problème est identique (pas d'activation si ScreenUpdating = False) avec Windows(w2.Name).Activate

    @Marc-L
    Car un bon code n'a pas besoin de ces affreux Select & Activate !
    Je n’utilise Select ou Activate que quand c'est vraiment indispensable !
    En l’occurrence, activer un classeur en particulier parmi tous, à la fin de la macro.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    je n'ai pas les versions 2013 et 2016
    Que se passe-t-il avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set w2 = ActiveWorkbook
    qui ne provoque pas d'erreur en 2007 ?
    2007 accepte également de forcer la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(w2.Name).Activate
    Que fait avec cela 2013 ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  13. #13
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Et si tu enregistres les classeurs ça n'aide pas excel à les ramener à la raison ?
    eric

  14. #14
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par eriiic Voir le message
    Et si tu enregistres les classeurs ça n'aide pas excel à les ramener à la raison ?
    eric
    Malheureusement pas !

    Par contre en ajoutant un msgbox, ça fonctionne ! (mais avec DoEvents) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
    Dim w1 As Workbook
    Dim w2 As Workbook
        Application.ScreenUpdating = False
        Set w1 = Workbooks.Add(xlWBATWorksheet)
        Set w2 = Workbooks.Add(xlWBATWorksheet)
        MsgBox ""
        Application.ScreenUpdating = True
        w2.Activate
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  15. #15
    Membre confirmé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Points : 520
    Points
    520
    Par défaut
    bonsoir patrice740 et le forum
    et si tu essaye les 2 lignes de codes suivantes en même temps est ce bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.ScreenUpdating = False
      Application.EnableEvents = False
    en n'oubliant pas de les remetre en bas du code juste avant end sub mais a = true

    autrement je ne peux t'aider plus

    Pascal

  16. #16
    Membre habitué Avatar de Klin89
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 119
    Points : 178
    Points
    178
    Par défaut
    Bonsoir le fil,

    Patrice740 :
    Exécute ta macro en mode pas à pas.
    Ajoute un espion sur ActiveWorkbook.Name.
    Cela donne quoi

    klin89

  17. #17
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Re,

    et ?

  18. #18
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par grisan29 Voir le message
    ...et si tu essaye les 2 lignes de codes suivantes en même temps est ce bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.ScreenUpdating = False
      Application.EnableEvents = False
    en n'oubliant pas de les remettre en bas du code juste avant end sub mais a = true ....
    Merci Pascal de ta réponse, mais j'avais déjà essayé : je savais que ScreenUpdating = False pose parfois des problèmes lors qu'il est exécuté dans une macro événementielle, mais là, ce n'est pas le cas, il s'agit d'un module standard.

    Citation Envoyé par Klin89 Voir le message
    Exécute ta macro en mode pas à pas.
    Ajoute un espion sur ActiveWorkbook.Name.
    En mode pas à pas, ça n'est pas représentatif : ScreenUpdating revient à True à chaque fois !
    Par contre, ta réponse permet de mieux cerner le problème :
    Avec un Debug.Print, ActiveWorkbook tout est normal et ça correspond à la macro (i.e. w1, w2, w2, ThisWorkbook) !!!
    Mais lorsque la macro rend la main c'est w1 qui est actif. On dirait que c'est l'affichage qui est resté bloqué sur le premier classeur créé.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  19. #19
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Je réitère :
    et w2.Sheets(1).Activate ???

  20. #20
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour Eriiic,

    Désolé, j'ai oublié de te répondre : ça change rien, mais comme disais dans le post précédent, pour la macro le classeur actif est bien w2,c'est lorsque la macro rend la main que w1 s'affiche en temps que classeur actif.
    Il y a une différence entre le classeur actif d'Excel et celui de Windows !!!
    Il faut peut-être faire appel à l'API windows ???
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Workbooks("Truc.xlsx").Activate ne fonctionne pas
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/02/2016, 09h44
  2. [XL-2007] Activate ne fonctionne pas sous Excel 2007
    Par Pier3d dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/04/2011, 16h21
  3. Code ne fonctionne pas quand il est dans une page HTML
    Par zizou5roni dans le forum Applets
    Réponses: 1
    Dernier message: 11/08/2008, 10h53
  4. Réponses: 7
    Dernier message: 08/07/2007, 19h51
  5. [CSS] a:active ne fonctionne pas toujours ?
    Par KpTn dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 10/05/2006, 17h25

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