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 :

Problème de macros avec la nouvelle version d'Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut Problème de macros avec la nouvelle version d'Excel
    Bonjour,

    J'ai réalisé, sous Excel 2011 pour Mac, des fichiers avec des menus personnalisés. Le menu venait s'ajouter, à l'ouverture du fichier, à la suite des menus existants d'Excel, en l'occurrence après le menu Fenêtre. Le menu personnalisé comprenait des sous-menus, chaque sélection déclenchant une macro. A la fermeture du fichier, le menu était supprimé, pour ne pas interférer avec d'autres fichiers Excel. Tout fonctionnait très bien... Le problème est venu de la mise à jour vers Office 365. Depuis là, la nouvelle version d'Excel génère une erreur de type 438 à l'ouverture du fichier ("Propriété ou méthode non gérée par cet objet"). Comme indiqué, je n'avais jamais eu ce problème auparavant, en plusieurs années d'utilisation.

    Excel bute sur la ligne créant un sous-menu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set cbSubMenu = cbMenu.Controls.Add(msoControlPopup; 1,,,True)
    Je suis très ennuyé car mon menu était assez complexe, avec une vingtaine de choix dans le menu déroulant (sans compter les sous-menus, offrant des choix supplémentaires). Je suis preneur de toute idée ou proposition que vous pourriez m'adresser. Je précise encore que je travaille avec deux Mac, un iMac et un MacBook Pro tout récents, fonctionnant tous deux sous Catalina.

    Merci d'avance pour votre aide... et bonne année à tous!

  2. #2
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 732
    Par défaut
    Bonjour, Tous mes voeux à tous les membres du Forum
    Le menu personnalisé comprenait des sous-menus, chaque sélection déclenchant une macro. A la fermeture du fichier, le menu était supprimé, pour ne pas interférer avec d'autres fichiers
    Excel bute sur la ligne créant un sous-menu:
    Set cbSubMenu = cbMenu.Controls.Add(msoControlPopup; 1,,,True)
    au vu de ce qui est écrit ci-dessus, que se passe-t-il si vous annulez le sous menu qui déclenche l'erreur? le reste fonctionne t-il correctement? et que créée donc le sous-menu?
    Cordialement

  3. #3
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    Bonjour Transitoire,

    Si je désactive la ligne incriminée, VBA plante juste après (à la ligne .Caption...). Il signale une erreur 91
    "Variable objet ou variable With non définie"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Set cbSubMenu = cbMenu.Controls.Add(msoControlPopup, 1,,,True)
    With cbSubMenu
       .Caption = "Imprimer graphiques"
       .Tag = "SubMenu1"
       .BeginGroup = True
    End With
    Il est ardu de faire des modifications dans la macro, car il y a beaucoup de sous-menus imbriqués.

    Les macros sélectionnées font différentes choses; elles peuvent lancer une impression, effectuer un filtrage, etc. Mais le problème ne vient pas de l'action qui devrait être exécuté, il apparaît dès qu'il s'agit de construire le menu personnalisé, qui ne va pas jusqu'à son terme en raison de l'erreur.

    En faisant des recherches sur internet, j'ai lu que le problème pourrait venir d'une mise à jour de Microsoft, l'erreur 438 se produisant alors avec des fichiers qui, auparavant, fonctionnaient correctement. Les contrôles ActiveX seraient en cause.

    Je reste à disposition pour des précisions, si nécessaire.

    Merci de votre aide!

  4. #4
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 732
    Par défaut
    Re:
    Si je désactive la ligne incriminée, VBA plante juste après (à la ligne .Caption...). Il signale une erreur 91
    "Variable objet ou variable With non définie"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Set cbSubMenu = cbMenu.Controls.Add(msoControlPopup, 1,,,True)
    With cbSubMenu
    .Caption = "Imprimer graphiques"
    .Tag = "SubMenu1"
    .BeginGroup = True
    End With
    Il me semble évident, que si vous enlevez Set CbSubMenu, il n'existe donc pas et vous ne pouvez plus y faire référence avec le with. Il vous faut donc enlever la partie de with jusqu'a End with et faire l'essai comme cela.

    En faisant des recherches sur internet, j'ai lu que le problème pourrait venir d'une mise à jour de Microsoft, l'erreur 438 se produisant alors avec des fichiers qui, auparavant, fonctionnaient correctement. Les contrôles ActiveX seraient en cause.
    Cela me semble étrange, car je suis sur Mac et je travaille avec excel 2011 et celui-ci n'accepte pas les controles ActiveX. Je trouve donc étrange que vous ayez pu les utiliser jusqu'a la dernière mise à jour.
    Faites donc des essais en enlevant tout ce qui fait référence à ce sous-menu, afin que l'on puisse se rendre compte ainsi, si le reste fonctionne bien, et qu'on puisse ensuite essayer de trouver dans le sous-menu incriminé ce qui le pousse au "crime"
    Cordialement

  5. #5
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    Transitoire,

    J'ai fait des essais, comme suggéré, mais cela ne change pas le problème, car, tout de suite après, VBA génère un nouveau message d'erreur.

    Par contre, je pense avoir avancé, non dans la résolution du problème, mais dans sa compréhension - ou en tout cas dans la confirmation du fait que mon problème vient bien de la nouvelle version d'Excel.
    Je m'explique: j'ai repris un code tout propre, plus clair que le mien, mais qui fait exactement ce que je cherche. Il est de Jacques Boisgontier, qui est une référence sur Excel (http://boisgontierjacques.free.fr/pa...m#MenuSousMenu). C'est le code intitulé: "Ajouter un menu avec sous-menus". J'ai créé un nouveau fichier Excel (avec Excel 2011, sur mon ancien MacBook Pro). En copiant le code, Excel réalise très proprement le travail. Il ajoute un menu, dont l'une des lignes comprend un sous-menu. C'est aussi, en plus compliqué, ce que faisait mon code, qui fonctionnait sans problème sous Excel 2011... et ne tourne plus sur Office 365.

    Voici le code en question:

    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
    Sub CréeNouveauMenu()
      Dim NouveauMenu As CommandBarPopup
      Dim MenuElément As CommandBarControl
      Dim SousMenuElément As CommandBarButton
      SupMenu
      Set NouveauMenu = CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup, Temporary:=True, Before:=5)
      NouveauMenu.Caption = "&Menu1"
      '----
      Set MenuElément = NouveauMenu.Controls.Add(Type:=msoControlButton)
      MenuElément.Caption = "Commande1"
      MenuElément.OnAction = "Macro1"
      Set MenuElément = NouveauMenu.Controls.Add(Type:=msoControlPopup)
      MenuElément.Caption = "Commande2"
      MenuElément.BeginGroup = True
      '---- sous menu
      Set SousMenuElément = MenuElément.Controls.Add(Type:=msoControlButton)
      SousMenuElément.Caption = "Sous-commande1"
      SousMenuElément.OnAction = "Macro1"
      Set SousMenuElément = MenuElément.Controls.Add(Type:=msoControlButton)
      SousMenuElément.Caption = "Sous-commande2"
      SousMenuElément.OnAction = "Macro1"
    End Sub

    Or, lorsque je fais la même opération (création d'un nouveau fichier Excel en y incluant le même code, mais cette fois-ci avec la version Excel 365), j'ai cette fois-ci une erreur de type 13 ("Incompatibilité de type").
    La ligne qui plante est aussi celle qui commence par Set (ligne 5: Set NouveauMenu = CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup, Temporary:=True, Before:=5))


    Pourrais-je vous demander si vous arrivez, avec votre Mac, à créer le fichier exemple de Jacques Boisgontier?

    Merci d'avance!

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 549
    Par défaut
    Bonjour à tous

    Je vais peut-être dire une c...rie connaissant peu le monde Mac mais la version 2011 ne correspondait-elle pas au menus que l'on avait jusqu'à 2003 sur PC alors que 365 utilise le ruban ?

    A noter que les exemples du site de BoisGontier datent essentiellement d'avant la version 2007 où le ruban est apparu

  7. #7
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    Bonsoir 78chris,

    Merci pour votre message. Dans des versions antérieures (je ne me souviens plus si c'était la 2011 ou celle encore avant), il y a effectivement eu le ruban. Je me souviens avoir programmé des fichiers où, pour accéder au menu personnalisé, il fallait cliquer dans "Compléments", à l'extrême droite du menu, pour alors accéder au menu personnalisé. Dans le fichier qui me pose problème, ce n'était plus le cas, le menu personnalisé apparaissait, exactement comme n'importe lequel des menus Excel originaux.

    Je pense bien que les versions de Boisgontier datent d'avant, ce qui n'arrange pas mes affaires... A présent que je sais que son code fonctionne avec Excel 2011, dans un nouveau fichier, et pas avec la plus récente, Office 365, je ne sais pas si une parade existe. J'ai lu des propos très critiques sur le fait que la nouvelle version d'Excel (je parle uniquement de la version Mac) a été particulièrement bâclée, ce qui n'est pas tout à fait nouveau non plus. Avec Excel, il vaut mieux travailler sur PC que sur Mac. Dans le cas présent, c'est assez crispant. J'ai passé un temps fou à élaborer mes macros, qui fonctionnaient bien... et qui ne fonctionnent plus avec une version plus récente!

    Enfin, je reste ouvert à toute piste qui pourrait me permettre de continuer à utiliser mon fichier, au besoin en l'adaptant.

  8. #8
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 080
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Peut-être (je suis sur PC donc pas sûr)

    Lancer CréeNouveauMenu

    créer un bouton dans la barre d'accès rapide qui lance Affichemenu

    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
     
    Sub CréeNouveauMenu()
    Dim NouveauMenu As CommandBarPopup
    Dim MenuElément As CommandBarControl
    Dim SousMenuElément As CommandBarButton
    Dim Cb As CommandBar
    supmenu
    Set Cb = Application.CommandBars.Add("Mon menu", msoBarPopup, , True)
     
     
    Set NouveauMenu = Cb.Controls.Add(Type:=msoControlPopup, Temporary:=True)
    NouveauMenu.Caption = "&Menu1"
    '----
    Set MenuElément = NouveauMenu.Controls.Add(Type:=msoControlButton)
    MenuElément.Caption = "Commande1"
    MenuElément.OnAction = "Macro1"
    Set MenuElément = NouveauMenu.Controls.Add(Type:=msoControlPopup)
    MenuElément.Caption = "Commande2"
    MenuElément.BeginGroup = True
    '---- sous menu
    Set SousMenuElément = MenuElément.Controls.Add(Type:=msoControlButton)
    SousMenuElément.Caption = "Sous-commande1"
    SousMenuElément.OnAction = "Macro1"
    Set SousMenuElément = MenuElément.Controls.Add(Type:=msoControlButton)
    SousMenuElément.Caption = "Sous-commande2"
    SousMenuElément.OnAction = "Macro1"
    End Sub
     
     
    Sub supmenu()
    On Error Resume Next
    CommandBars("Mon Menu").Delete
    On Error GoTo 0
    End Sub
     
     
    Sub affichemenu()
    CommandBars("Mon menu").ShowPopup
    End Sub

  9. #9
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 732
    Par défaut
    Bonjour, je confirme que sur la version Mac 2011, il existe le ruban
    Les nouvelles version d'excel comporte toujours des surprises rarement agréables d'ailleurs.
    C'est pourquoi je fais toujours trainer le plus longtemps possible les versions ou j'ai développé mes programmes complexes. Je parle d'un temps ou je ne connaissais pas ce site qui m'a fait faire "un petit pas moi, mais un pas de géant pour l'humanité" (Neil Armstrong dixit)
    Je vais essayer de faire le test, mais je ce jour, je suis chargé en occupations diverses
    Cordialement

  10. #10
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 732
    Par défaut
    Re, j'ai finalement fait l'essai des Sub de @JacquesBoigontier, sur la création de nouveau menu et sous menu, et sous 2011, je confirme le bon fonctionnement.
    Cordialement

  11. #11
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    tototiti2008,

    Merci pour votre suggestion. J'ai fait l'essai. Malheureusement, VBA plante toujours avec une erreur 13, à nouveau à la ligne commençant par Set (Set NouveauMenu = Cb.Controls.Add(Type:=msoControlPopup, Temporary:=True)).

    Transitoire,

    Merci pour le test. Cela me confirme que c'est bien la nouvelle version d'Excel qui est en cause, ou en tout cas qui bute sur des instructions... que les versions précédentes acceptaient.
    Je suis, moi aussi, assez prudent, lors du changement de version. Mais je n'ai pas eu le choix: le changement de machines, incluant le nouveau système d'exploitation, n'a plus accepté les anciennes versions d'Excel, fonctionnant sous 32 bits. Ce qui m'a donc obligé à installer Office 365. Après l'avoir testé, je trouve déplorable qu'une entreprise de la taille de Microsoft puisse bâcler à ce point une nouvelle version d'un de ses produits phares (je parle toujours de la version Mac)! Enfin, je continue à chercher...

  12. #12
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 080
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Il ne reste plus qu'à personnaliser le ruban, je suppose
    En ouvrant le fichier joint, le ruban change bien sur Mac ?
    Fichiers attachés Fichiers attachés

  13. #13
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    tototiti2008,

    Oui, le ruban change, il n'a pas les menus habituels. Mais comme la macro gérant l'affichage du menu personnalisé plante, elle ne pourra être appelée, je suppose, via le ruban. Merci quand même.

    Mes recherches n'ayant rien donné, je change d'optique. Je laisse tomber mon menu personnalisé. Comme les macros fonctionnent, je les attribuerai à des boutons, disposés sur les feuilles. C'est précisément ce que j'avais voulu éviter en créant un menu personnalisé...

    Merci quand même à tous pour vos messages, idées, pistes, et une excellente année 2020!

  14. #14
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 732
    Par défaut
    Bonjour, désolé de ne pas avoir pu vous aider plus, mais je n'ai pas la nouvelle version d'Excel.
    Juste pour vous dire que si vous souhaitez utiliser des boutons, vous pouvez pour éviter d'avoir à remonter si votre document est important, a les installer tout en haut et à figer les volets afin de les avoir toujours disponibles sur votre feuille quelque soit la position sur celle-ci. Vous pouvez par ailleurs aussi pour aggrémenter, remplacer les boutons par des photos, logo ou autre chose, commandant les Procédures. Ci dessous deux exemples avec des photos miniaturisées, des logos.
    Nom : Capture d’écran 2020-01-04 à 12.53.12.png
Affichages : 2050
Taille : 48,1 Ko
    Nom : Capture d’écran 2020-01-04 à 12.56.35.png
Affichages : 1980
Taille : 41,3 Ko

    Cordialement

  15. #15
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    Transitoire,

    Pas de problème, je comprends bien. Merci déjà de vous être penché sur mon problème! Merci aussi pour la suggestion à propos des boutons. J'en tiendrai compte lors de l'adaptation de mon fichier!
    Bonne suite (informatique) à vous

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/05/2019, 00h10
  2. Problème avec la nouvelle version 2.2 d'Android Studio
    Par ChPr dans le forum Android Studio
    Réponses: 5
    Dernier message: 20/09/2016, 18h07
  3. Problème avec la nouvelle version de Qt
    Par cedrix57 dans le forum Débuter
    Réponses: 1
    Dernier message: 17/02/2011, 15h22
  4. Problème d'affichage avec la nouvelle version Java
    Par anadoncamille dans le forum 2D
    Réponses: 26
    Dernier message: 25/01/2009, 23h53

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