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 :

Généraliser le Custom UI à de nombreuses feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut Généraliser le Custom UI à de nombreuses feuilles
    Bonjour, c'est une question sans solution... Du moins j'y ai perdu un temps fou et je voudrais être sûr qu'il n'y a pas quelque chose qui m'échappe.

    Quand on veut associer un menu personnalisé dans le ruban à un classeur, on ne peut pas le faire en VBA à l'aide d'un objet spécifique d'Excel. Il faut créer un fichier au format xml et venir le placer soi même dans le fichier Excel, ce qui est une opération carrément étrange pour une action aussi légitime. Déjà on ne peut pas le faire depuis le classeur.

    Le fichier Excel est en réalité un dossier zippé. Pour manipuler des zips dans windows, il n'y a presque rien, sinon l'objet NameSpace du FileSystemObject.

    Or cette procédure très pauvre ne fonctionne que de manière asynchrone, avec des messages hors de contrôle : on sait quand ça commence, mais pas quand ça finit. Quand on veut mettre à jour le classeur avec son xml, il y a plusieurs commandes à enchaîner (effacer les deux dossiers concernés et les créer à nouveau) pour que le NameSpace ne bloque pas.

    On peut arriver des fois à ce que ça marche, en ajoutant des temporisations tout à fait arbitraires. Rien de fiable, et j'ai 2000 feuilles à convertir...

    J'ai essayé avec 7zip en commande, mais je rencontre là aussi des problèmes de synchronisation, beaucoup moins certes, mais pas de quoi cocher [résolu] dans ma liste des problèmes cruciaux.

    J'envisage des tas de choses, comme de traiter l'ensemble des feuilles en parallèle, une action à la fois, avec un point d'arrêt pour chacune des quatre commandes NameSpace, pour que l'opérateur (moi) puisse aller vérifier qu'aucun zip n'est encore en cours.

    Mais avant d'en arriver là, je voudrais avoir un point de vue différent du mien.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pourquoi tu n'utilises pas l'utilitaire Custom UI Editor for Microsoft Office ? Pas de fichier zip à manipuler !

    Cordialement,
    Sophie

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    il y a beaucoup plus simple a faire
    tu créée un classeur xlsm dans le quel tu créée ton ribbon avec customUI ou autre

    quand tu l'a créé et testé et qu'il fonction tu l'enregistre en "XLAM"(macro complémentaire)

    il ne te reste plus qu'a ajouter et activer la référence de ce xlam dans les classeurs concernés par vba

    ainsi si demain tu veux modifier ton ribbon perso tu modifie que le xlam

    je dis ca je viens de tester sur 2007 et ca match
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    demo
    ton fichier avec ton ruban perso tu l'a enregistrer en "XLAM"

    maintenant
    dans tes classeurs concernés dans les quel tu veux ajouter ton ruban perso
    activation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ActiverReferencebyvbprojectref()'methode 1 par les references 
        On Error Resume Next
        ThisWorkbook.VBProject.References.AddFromFile "C:\Users\polux\AppData\Roaming\Microsoft\AddIns\wig ribbon2019.xlam"
    End Sub
    '
    Sub activerByOpen()'methode 2 en ouvrant simplement le xlam
    'On Error Resume Next
        Workbooks.Open ("C:\Users\polux\AppData\Roaming\Microsoft\AddIns\wig ribbon2019.xlam")
    End Sub
    desactivation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub deactiver()'pour la désactiver tu ferme le xlam 
    'On Error Resume Next
        Workbooks("wig ribbon2019.xlam").Close
    End Sub
    Nom : demo2.gif
Affichages : 574
Taille : 1,36 Mo
    Images attachées Images attachées  
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    bonjour
    il y a beaucoup plus simple a faire
    tu créée un classeur xlsm dans le quel tu créée ton ribbon avec customUI ou autre

    quand tu l'a créé et testé et qu'il fonction tu l'enregistre en "XLAM"(macro complémentaire)

    il ne te reste plus qu'a ajouter et activer la référence de ce xlam dans les classeurs concernés par vba

    ainsi si demain tu veux modifier ton ribbon perso tu modifie que le xlam

    je dis ca je viens de tester sur 2007 et ca match
    Merci, ça me semble cohérent. Je connais mal les compléments pour n'en avoir pas encore eu besoin.

    Mais avant de tester, je veux être sûr que ce que tu me décris si aimablement fait vraiment ce dont j'ai besoin, à savoir un menu/ruban spécifique uniquement sur un classeur donné.

    Avec cette méthode, si je comprends bien, je dois référencer le complément à l'ouverture et le retirer à la fermeture, sinon, le ruban restera actif pour l'utilisateur quelque soit le classeur Excel ouvert. C'est bien ça ?

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    oui c'est exactement ca
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Et comment ça se passe pour les accès au code ?

    Je peux recevoir les événements depuis l'application ?

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    oui de la même manière

    après il faudrait être plus précis sur ton projet mais en l'état je t'ai simplement montré une alternative a modifier 200 fichier avec customUI
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Bonjour

    Oui, j'apprécie beaucoup ton idée qui me permet d'imaginer contourner la lacune d'office en changeant complètement d'approche : c'est souvent un changement paradoxal qui permet de résoudre les problèmes. Je ne suis pas encore certain que cela soit ma solution, mais cela m'aide grandement. Je suis concentré à court terme sur d'autres tâches urgentes, mais je vais creuser l'idée, c'est certain. Car voilà, je manque de pratique sur les compléments et je devrais combler cela un jour ou l'autre (déjà je dois depuis quelques temps me faire ma bibliothèque Excel personnelle toutes feuilles).

    Pour résumer quand à l'usage que tu proposes, il me reste des doutes à lever :

    - mon classeur doit comporter un menu de boutons ou autres, incorporé à une barre de ruban existante (sans doute Accueil), sinon je crois que je règlerais vite fait le problème avec l'ancien management des menus d'avant Office 2000, les commandbars... Je ne suis pas certain que le xlam permette cela, mais seulement dans un ruban dédié. Ca doit être possible, tu dois sans doute pouvoir m'éclairer là dessus.
    - concernant les appels au code, il faut que les boutons du xlam puissent faire appel à du code situé dans le classeur courant et non dans le xlam. Je ne tiens pas à faire des appels exotiques, je veux rester dans l'orthodoxie des 'calls' VBA.
    - gérer un objet de plus me rebute par principe.
    - à ton avis : je gère une bibliothèque partagée de pur code VBA associée aux classeur qui sont des instances de mon application : crois tu que je puisse en profiter pour y placer mon ruban ??? C'est peut-être ça qui m'échappe depuis le début??? Encore que le problème d'appel au code est similaire : la bibliothèque ne connait pas le workbook/worksheet appelant...

    Il faut bien voir que mon exigence consiste à régler un problème pour tous mes dévs qui instancient de multiples occurrences d'un classeur donné, pas juste celui là et que je me suis déjà trop cassé les dents là dessus.

    Et d'autre part, à rédiger mon problème j'ai imaginé encore une tactique à essayer sur le NameSpace avec MoveHere et les nombre d'Items, en adaptant avec ruse une méthode vue plusieurs fois sur le Net. Je me suis tellement usé sur le problème que je renâcle encore à m'y replonger... Ceci dit, je crois bien que zipper c'est la seule vraie solution.

    Ca fait trois ou quatre pistes à débroussailler encore... J'aimerai vraiment pouvoir cocher [Résolue] cette discussion...

    En tout cas Patrick, merci pour le brain-storming !

  10. #10
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Citation Envoyé par Clochete Voir le message
    Bonjour,

    Pourquoi tu n'utilises pas l'utilitaire Custom UI Editor for Microsoft Office ? Pas de fichier zip à manipuler !

    Cordialement,
    Sophie
    Sophie, oui, je connais, évidemment dès que l'on cherche un peu on tombe sur cet excellent et indispensable utilitaire. La plupart des gens pensent que c'est un outil Microsoft, ce qui est totalement faux, c'est une développeuse qui l'a fait et qui ne le développe plus depuis longtemps. Si les sources étaient dispo, j'aurais de quoi essayer de comprendre comment elle fait.

    Je dois appliquer cela sur 2000 feuilles et pouvoir le ré-appliquer à chaque fois je modifierai les interactions par le ruban...
    Et puis ce n'est pas mon seul dév - passé ou futur - avec ce problème !

    Cela aurait pu éventuellement fonctionner si l'outil marchait en ligne de commande... Je ne vais pas m'amuser à le piloter avec des 'SendKeys' quand même !

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    excel 2000 2003 n'ont pas de ruban mais des commandbars donc tu oublie
    le ruban est apparu avec office 2007
    ensuite quand tu a un fichier avec un ruban customUI d'ouvert (XLA ou AUTRE)c'est tout l'application et tout les classeurs ouverts dans l'instance qui en bénéficient

    et oui avec un customUI.xml on peut bien évidement ajouter ou modifier un menu existant d'office tel que acceuil bien entendu

    et en fait ca répond a toute tes questions

    d'ailleurs ma démo animée précédente parle d'elle même tu devrait bien la regarder

    je crois que tu va chercher la ou il faut pas

    en ce qui concerne les éventuels fichiers (XLS(2000/2003) ils peuvent être ouverts par (2007 et plus) ca change rien si ton ruban perso est dans un xla

    faut il que je te fasse un exemple ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    1°) Les commandbars, je connais, je développe avec Access depuis la version 1.0 et c'est apparu avec Office 95... C'est toujours implémenté dans Office 2019 comme méthode non recommandée, mais ça a l'avantage d'être programmable depuis la création de l'objet. Ca fait tout ce que je veux, mais ça reste confiné dans un ruban et c'est nettement moins maléable que CustomUi.

    2°) CustomUI, je connais, le seul problème que je pose ici, c'est de le répandre à toutes les copies actives de ma feuille.

    3°) Je ne veux pas que le menu soit disponible depuis toutes les applications, c'est un de mes soucis. Ceux qui utilisent mes feuilles en utilisent d'autres, simultanément, je ne veux surtout pas perturber leurs habitudes en balançant sous leur nez des boutons qui n'ont rien à voir avec leur travail en cours : CustomUI est fait précisément pour ça.

    4°) j'ai pris le temps hier de bien regarder ta démo (c'est super comment tu fais?) et c'est là que j'ai compris une des limites du xlam.

    5°) même si je suis débutant sous le modèle Excel, je suis développeur de métier depuis 35 ans et VBA depuis son origine, et en tant que tel je cherche des solutions génériques et pérennes pour TOUS mes développements, même futurs. Cocher Résolu à cette discussion, c'est oublier définitivement le problème parce que la solution est robuste et universelle. Ce n'est pas la façon la plus simple de procéder, mais c'est la seule pour avancer dans ce métier. Donc, non je ne cherche pas à côté de la plaque, mais oui je pinaille à l'extrême.

    6°) Je ne développe pas pour les anciennes versions d'Office, je peux me le permettre. Je suis en Office 2019, mes clients en Office 365 et ma limite de compatibilité inférieure, c'est Office 16, en accord avec eux.

    Enfin, si jamais je coche un jour [Résolu] à cette discussion, je mettrai ma solution.

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c'est de le répandre à toutes les copies actives de ma feuille.
    entendons nous bien
    un ruban perso customUI c'est pour l'application dans tout le classeur et non une feuille du classeur
    cela dit avec l'attribut getvisible dans le XML ca peut se paramétrer dans les callbacks
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. [SP-2013] Import d'une feuille Excel dans une Custom List
    Par Jean-Jacques Engels dans le forum SharePoint
    Réponses: 2
    Dernier message: 22/01/2016, 15h01
  2. Réponses: 1
    Dernier message: 21/08/2014, 13h43
  3. Importer de tres nombreuses feuilles Excel sous Access
    Par marion1987 dans le forum VBA Access
    Réponses: 11
    Dernier message: 12/10/2010, 20h07
  4. [VB6] [Excel] Résultat d'une requete ds une feuille
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/01/2003, 17h52
  5. [VB6] [Form] Interdire le déplacement d'une feuille
    Par Loïc dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 23/09/2002, 15h02

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