La Même Macro dans 2 Classeurs différents

Bonjour,

J'ai la même MACRO dans 2 classeurs différents

Quand j'ouvre les 2 classeurs individuellement, la macro fonctionne parfaitement

Quand j'ouvre les 2 classeurs en même temps, la macro fonctionne dans un classeur mais pas dans l'autre.

D'où vient le problème et comment le résoudre ?

Bonjour JeanF44 le forum

sans voir le fichier et la macro pas simple à te donner une réponse, mais une certitude si tu fais dans ta macro référence au classeur Thisworkbook tu n'auras plus de soucis

mais encore une fois sans la macro ni le fichier je ne peux t'en dire plus

a+

Papou

Bonjour et merci de la réponse,

Je pense avoir réglé le problème car c'était toujours le même classeur qui posait un problème.

J'ai un UserForm avec message d'erreur qui s'affiche un certain temps si on veut le fermé avec la croix.

Dans cet UserForm, il y a une saisie d'un nombre avec des conditions et messages d'erreur.

Le nombre saisi doit resté apparent autant de temps que le message d'erreur le concernant.

Je suppose que le problème venait que j'avais 2 Sub de temps d'affichage d'erreur et que de l'UserForm je n'appelais qu'une Sub de temps d'affichage et sûrement pas la bonne

Je joins quand même le fichier pour confirmer si le problème de ce que je pensais

Bonjour JeanF44 le forum

bah franchement je viens de regarder les macros pour ce fichier et c'est très compliqué pour pas grand chose

1) quel est le but de ces deux userforms ???

2) pourquoi interdire la sortie avec la croix de fermeture ? Le gars il veut pas de couleur, il clique la croix, et il ferme l'userform et basta, pourquoi imposer de choisir une couleur impérativement??

2) pourquoi une fois choisi la couleur tu poses la question avec vous noté le numéro??

Moi je virerais tout cela et je ferais un truc 10 fois plus simple et surtout plus fiable

j'ai rajouté en cellule AN2 la couleur choisie ainsi que le code colorindex

Ne connaissant pas l'usage du fichier je suis peut-être à coté de la plaque mais, sans motivation précise, c'est ce que j'en pense

a+

Papou

Bonjour et merci de la réponse,

Ce fichier fait parti un plus grand fichier qui comprends plusieurs exemples

1) j'avais fait ces deux UserForm dont un est d'origine (Saisie du N° de couleur) sur un exemple vu sur le net et l'autre UserForm remplace un MsgBox de l'exemple aussi

2) Sur l'exemple que j'avais vu l'utilisateur devait saisir un nombre obligatoirement sans pouvoir fermer l'UserForm

3) La question était posée dans l'exemple en MsgBox. Je l'ai transformée en Userform pour pouvoir placer le message où je souhaitais

Ce sont des exemples que j'avais trouvé sur le net ou livre pour m'initier au VBA

Ré bonjour JeanF44 le forum

Ok je comprends mais quel est l’utilisation que tu veux en faire ???

Le but c’est quoi???

Si c’est afficher les couleurs pour faire un choix simplement il n’y a pas besoin d’autant de code

Redis moi si tu veux je modifie tout cela mais d’abord dis moi le but précis STP

Que je compose en fonction

A plus

Papou

Bonjour,

Parmi les conseils que je t'ai donné dans une précédente réponse il y a celui-ci :

• évites les références implicites(i.e. partielles), privilégies les références explicites (i.e. suffisamment complètes),

« suffisamment complètes » ça veux dire que dans un contexte multi-classeurs, il faut aussi préciser le classeur !

Bonsoir et merci de la réponse,

Etant novice, j'ai du mal à comprendre "les références implicites(i.e. partielles), privilégies les références explicites (i.e. suffisamment complètes)"

En particulier "i.e." !!!

De plus, la majorité des exemples que j'ai sont pris sur le net ou des livres et quand je les comprends à peu près !!!

Re,

i.e :

Mais en VBA, ça va bien au-delà, ça dépend du contexte.

Comme je te l'ai écrit cette référence est implicite :

Cells(1,2)

C'est déconseillé en particulier dans un module standard ou un module de formulaire.

Son équivalent Explicite est :

Application.ActiveWorkbook.ActiveSheet.Cells(1, 2).Value

C'est ce qu'il faut utiliser dans un contexte multi-applications

Si tu n'utilises qu'une seule application, mais plusieurs classeurs, c'est l'équivalent de :

ActiveWorkbook.ActiveSheet.Cells(1, 2).Value

Et si tu n'utilises qu'un seul classeur il suffit de :

ActiveSheet.Cells(1, 2).Value

Et si tu codes dans un module de feuille et uniquement dans ce cas, tu peux te contenter de :

Cells(1, 2).Value

cependant; dans ce dernier cas, je préfère :

Me.Cells(1, 2).Value

Bonsoir et merci de la réponse

Bonjour JeanF44 le forum

bon tu ne m'as pas répondu, alors j'ai tout de même fait, exactement la même chose que dans ton fichier avec une simple petite macro et un événementiel

merci de tester et de me redire

a+

Papou

Merci de la réponse @paritec,

Ta solution est simple mais, étant novice, je ne connais pas toutes les instructions de la Sub de la feuille !!

J'ai du mal à comprendre certaines instructions :

Worksheet_SelectionChange(ByVal Target As Range)

Intersect

Target

Bonjour JeanF44 le forum

Laissons Patrice33740 expliquer, car il aime être précis et n'aime pas l'imprécision!!!!

a+

Papou

Bonjour,

Soyons précis, la programmation n'autorise pas l'imprécision :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Il s'agit d'une procédure évènementielle, située dans le module de la feuille concernée, qui se produit automatique lors du changement de plage sélectionnée (i.e. une ou plusieurs cellules). C'est l'évènement SelectionChange de Worsheet.

Cette procédure ne se produit pas lorsqu'on sélectionne un objet de la feuille (Image, forme, contrôle, ...)

Target 

Il s'agit de la plage de cellules (de type Range) sélectionnées (ou de la cellule s'il n'y a qu'une cellule sélectionnée).

If Not Intersect(Target, ActiveSheet.Range("D9:K15")) is Nothing

Signifie littéralement : Si l'intersection (le croisement) entre Target (ici, la plage de cellules sélectionnéees) et la plage de cellules D9:K15 de la feuille active n'est pas inexistante.

C'est l'équivalent : Si au moins une des cellules de la plage sélectionnée se situe dans la plage D9:K15 de la feuille active.

Notes que je déconseille l'emploi des objets actif (comme Activesheet) en particulier dans les procédures évènementielles.

Il plus correct d'écrire :

If Not Intersect(Target, Me.Range("D9:K15")) is Nothing

Me représente la feuille dans laquelle est écrite cette procédure.

Si dans le cas de SelectionChange on à la chance que cet évènement se produise toujours sur la feuille active, ce n'est pas le cas de tous les évènements de la feuille.

Mais par exemple, l'évènement Change (qui se produit lorsqu'on modifie le contenu d'un cellule), se produira sur la feuille sur laquelle on modifie la cellule mais cette feuille n'est pas forcement la feuille active d'où l'importance de faire référence à Me plutôt qu'à Activesheet..

Bonjour @Patrice33740

Merci pour ces explications

Rechercher des sujets similaires à "meme macro classeurs differents"