Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Barre Outil Personnalisée avec affectation d'une macro qui se trouve dans un autre classeur au format xlma

12 réponses
Avatar
Alex
Bonjour =E0 tous,=20

Je reviens vers vous avec mes probl=E8mes de barre d'outil personnalis=E9e,=
et m'en explique :

Dans la macro de cr=E9ation de barre d'outils personnalis=E9e, je g=E9n=E8r=
e un menu d=E9roulant avec des images en format .ico qui se trouve sur ma f=
euille "Icons" et affecte une macro au bouton avec l'image en .ico, jusque =
l=E0 tout va bien...

Tout va bien, lorsque je suis sur mon fichier "projet" qui est un fichier d=
e format xlsm, mais lorsque je transforme ce fichier en format xlma, cela p=
rovoque un plantage macro, au moment o=F9 je copie l'image en .ico de ma fe=
uille "Icons" (ma feuille "Icons" figure bien dans les Worksheets (sous VBA=
), mais plus possible de l'afficher depuis le classeur car "invisible")

Pour pallier ce probl=E8me, et pour laisser "simple" la mise en place et la=
future installation sur des PC, j'ai pens=E9 =E0 s=E9parer mon fichier "Pr=
ojet" en 2 :

* L'un qui consisterait simplement =E0 ouvrir une fois le fichier au for=
mat xlsm pour pouvoir g=E9n=E9rer la barre d'outil (barre mis en permanant)=
? C'est =E0 partir de ce moment que le probl=E8me "Affectation macro" est a=
pparu (Il trouve pas la macro affect=E9e).

* Le second qui serait au format xlma (install=E9 sur le poste) pour g=
=E9rer les macros de la barre, (ne pouvant pas faire ouvrir un classeur au =
format xlsm pour travailler sur un autre fichier)

Donc mon probl=E8me et d'affecter la macro du fichier xlma, depuis la barre=
de menu qui a =E9t=E9 g=E9n=E9r=E9e par le fichier xlms, sur ma ligne "on =
action" :

'Affectation de la macro "ouvtemp" sur un bouton de la barre :

m_option.OnAction =3D "OuvTemp"

C'est ici, que je voulais pr=E9ciser le nom du "Workbook" et le nom de la m=
acro. mais je n'ai pas trouv=E9 comment l'=E9crire.

Quelqu'un aurait-il la solution ?

Ou bien une solution, pour faire que le copie/colle de mon image en .ico pu=
isse se faire depuis mon fichier au format xlma ? (car l=E0 aussi, j'ai te=
nt=E9 activ=E9 la feuille "Icons", mais sans r=E9sultat.

Mille excuse pour la lecture, mais je voulais faire court et compr=E9hensib=
le :)

Merci par avance de votre aide.

Bien cordialement.
Alex

10 réponses

1 2
Avatar
MichD
Bonjour,

En utilisant le site cjoint.com, peux-tu publier ton classeur en y incluant
les images "ico" et la procédure de création de barres d'outils?
Avatar
Alex
Bonsoir,

Merci pour cette proposition.

Le fichier est sous http://cjoint.com/?3CfwMTQBSfr (J'ai supprimé les don nées "privées".)

J' ai mis la version en xlsm, car il y a la feuille "Icons" qui est visible et génère correctement la barre.

La procédure :

1/ A l'ouverture dans workbooks open : je commence par la sélection des 3 feuilles de mon classeur, et j'active la police Verdana, puis appelle la m acro pour générer la barre

2/ Module Génération Menu : les premières sont des barres d'ouverture s de fichiers avec des images faceid + un code, et les 3 derniers sont Coul eur de Police, Couleur de remplissage et Assistant de Mise en forme quadril lage et page. Tous les boutons sont commenté. Pour le dernier, ca ouvre u n formulaire MEF


Apres j'avais enregistré ce fichier en format xlma,(J'ai bien entendu, ac tivé le fichier xlma qui se trouve dans le répertoire "Adins"). C'est à ce moment la que j'ai rencontré le problème de generation de menu d eroulant pour copier l'image de la feuille "Icons"

Après, j'ai eu l'idee de faire les deux fichiers, comme expliqué dans m on 1er mail, en supprimant dans workbooks open le lancement du Module Gén ération Menu. Et c'est à ce moment la que les macros des boutons n'ét aient pas trouvées.

Espérant que ces explications sont bien compréhensible.

Merci par avance de votre aide.
Bien cordialement.
Alex
Avatar
MichD
Bonjour,

Ton fichier de macros complémentaires : http://cjoint.com/?DCgaEH4FdaX

Tu n'as qu'à copier le fichier dans ce répertoire :
C:Userston profilAppDataRoamingMicrosoftAddIns

Et tu t'assures qu'il est coché dans les compléments d'Excel.

Tous les nouveaux classeurs recevront le formatage que tu as défini.
Avatar
Alex
Bonjour,

merci pour ce retour rapide :)

J'ai testé cela fonctionne. Pouvez vous me dire ce qu'est le module Class ?

De plus, j'avais créer des "Mettre sous forme de tableaux" qui n'apparais sent plus, comment je peux les rajouter au fichier xlma ?

Merci encore de votre aide.
Bien cordialement.
Alex
Avatar
Alex
Re,

Concernant ma deuxième question de mon dernier message, j'avais essayé de repartir de mon fichier xlsm et en y ajoutant vos lignes de commande et module class que vous avez ajouté dans le fichier xlma, afin de rajouter les "Mettre sous forme de tableau" mais lorsque je lance la barre ca plante de nouveau sur la generation de la barre avec les images .ico, d'ou ma que stion.
Cordialement.
Alex
Avatar
Alex
Re :

J'ai encore constaté un problème, les lignes de commandes de "changemen t de police" en verdana qui sont maintenant placées dans le module class ne s'exécutent pas (la police ne change pas)

De plus, si je souhaite ajouter de nouvelles images ".ico" afin de faire ev oluer les barres d'outils, comment dois je procéder ?

Merci par avance
Bien cordialement
Alex
Avatar
MichD
Chaque "objet" que l'on retrouve dans le modèle objet VBA comme "Range,
"Worksheet"... (en fait
la liste des objets disponibles lorsque tu déclares une variable objet dans
: Dim Rg As Range - après
le AS s'ouvre une fenêtre, où il est possible de définir la classe objet
(excluant les constantes)),
ces objets pour fonctionner ont besoin d'un code et ce code est contenu dans
un module de classe.

En fait dans Excel, tous les modules de feuilles, ThisWorkbook, Userform,
module de classe ajouté
sont des modules de classe sauf le module standard. C'est trop dans le cadre
d'un forum à tout
t'expliquer... la suite dans un bon bouquin sur Excel

Pourquoi j'ai recours à un module de classe dans ton programme, c'est
lorsqu'Excel s'ouvre et qu'il
y a des compléments à charger, ces derniers sont ouverts avant le nouveau
fichier. Résultat, comment
veux-tu dans un fichier de macros complémentaires écrire du code pour un
fichier qui n'est pas encore
ouvert. Le module de classe au niveau de l'application permet d'introduire
une procédure événementielle
qui accède à tous les nouveaux fichiers que l'usager ouvre par exemple... en
plaçant du code dans ce
fichier... on accède aux nouveaux fichiers et à tous les autres selon
l'événement utilisé dans le module
de classe. C'est ce pourquoi le code de formatage se retrouve dans ce
module.

Si j'étais à ta place, je définirais un classeur modèle avec toutes les
caractéristiques que tu veux.
Tu peux faire la même chose et définir une feuille modèle à partir
d'un classeur vierge dont tu ne gardes qu'une feuille avec toutes les
caractéristiques désirées que tu nommes
Feuille.xltm .
Comme Microsoft doit occuper ceux qui se tournent les pouces, on leur
demande de s'amuser à modifier
l'emplacement et la structure hiérarchique des fichiers de l'explorateur
Windows d'une version à l'autre.
En conséquence, selon ta version, vérifie où tu dois placer ces modèles!

Avec le fichier exemple xlam que je t'ai donné, est-ce que tout fonctionne?

Attention, quand tu ouvres Excel, le fichier de macros complémentaires
s'ouvre et dans le ThisWorkbook
de celui-ci, il crée une instance du module de classe par cette ligne de
code : Set Xl.MonApp = Application
Si tu modifies le code, et que tout à coup que cela ne fonctionne pas, il ne
faut pas oublier de recréer
l'instance en exécutant le code à nouveau.
Avatar
MichD
Une façon simple pour ajouter le module de classe à ton projet...
à l'aide de la souris, dans l'interface de l'éditeur de code, tu fais
glisser le module de classeur de macros complémentaires vers
ton classeur. Tu devras ajouter dans un module standard, cette
ligne de code : Public Xl As New Xlp
et dans le Thisworkbook dans la procédure événementielle Workbook_Open
la ligne : Set Xl.MonApp = Application

Le fonctionnement du code du module de classe ne sera disponible qu'après
l'exécution Workbook_Open
Avatar
MichD
Tu ne l'as peut-être pas remarqué, mais dans ta procédure créant ton menu,
j'ai modifié la ligne pour chaque bouton comme ceci :

Sheets("Icons").Shapes(5).CopyPicture
Par :
ThisWorkbook.Sheets("Icons").Shapes(5).CopyPicture

afin qu'il puisse trouver la bonne feuille dans le bon classeur où sont tes
icônes.
Avatar
Alex
Merci pour ce retour.

J'ai pris connaissance de tes messages et cela m'a permis de refaire un nou veau fichier xlma avec des ajouts de boutons. Cela était bien lié au pr oblème de Thisworkbook dont je n'avais pas vu l'ajout lors de la géné ration de la barre de menu ;)

J'ai également tenté ta proposition de modèle Feuille.xltm. Celui ci se place dans Templates, et lorsqu'on regarde sous vba ce classeur est li é au fichier xlma néanmoins mes modele de "Mettre sous forme de tableau " personnalisé ne sont pas repris dans le menu Excel existant (et pourtan t j'avais egalement mis sur la feuille du fichier modele (.xltm) mes deux m odèles de "mettre sous forme de tableau". Faut il faire une manipulation supplémentaire ?

Merci encore.
Bien cordialement.
Alex
1 2