VBA - macro événementielle liée indirectement au choix de cases à option

Hub

XLDnaute Occasionnel
Bonjour,

Vous trouverez dans le fichier joint un développement simplifié de ce que je souhaite faire.

Questions :
1) comment la procédure événementielle peut savoir si elle doit travailler avec la macro Case_1 ou Case_2 ou Case_3 ou Case_4 ?
2) la macro Case_2 pose un souscis (erreur de compilation), où se trouve l'ereur ????

Meci d'avance pour vos réponses

A +
 

Pièces jointes

  • Essai macro evenementielle7.xls
    126 KB · Affichages: 29

Dranreb

XLDnaute Barbatruc
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Bonjour.
Je ne sais si ça répond à votre question, mais vous pouvez affecter la même macro à plusieurs contrôles de formulaire et retrouver dedans par Application.Caller le nom de celui qui en a provoqué l'exécution.
L'erreur concerne la Function Soustraction, qui attend des Double ByRef alors que vous lui passez des Range.
Mettez Function Soustraction(ByVal x As Double, ByVal y As Double) As Double pour que l'appelant se décarcasse un peu plus pour bien lui passer des Double.
 

Hub

XLDnaute Occasionnel
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Merci pour votre réponse,

Pour ce qui concerne la macro "Function Soustraction", c'est Ok

Par contre, je n'ai aucune idée de ce que peut être "Application.Caller" et comment l'utiliser ou le placer...
Pouvez vous m'en dire un peu plus par le biais d'un fichier ?

@+
 

Dranreb

XLDnaute Barbatruc
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Application.Caller est une expression String, qui dans une Sub vaut le nom du Shape qui l'a invoqué.
Exemple: MsgBox Application.Caller
 

Hub

XLDnaute Occasionnel
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Je suis débutant et mon niveau en VBA se situe dessous les pâquerettes...

Désolé, tout ça c'est de l'hébreu, je n'ai toujours rien compri
 

Dranreb

XLDnaute Barbatruc
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Mettez, pour tester, MsgBox Application.Caller comme 1ère instruction exécutable d'une procédure affectée à un objet de formulaire, et cliquez sur celui ci, vous comprendrez j'espère. Ça vous affichera le nom de l'objet.
 

Hub

XLDnaute Occasionnel
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Bonjour

J'espère ne pas vous agacer avec mes questions de débutant...

Je n'ai pas encore réussi à résoudre mon problème avec votre solution. Je verrai cela un peu plus tard.

En attendant, j'ai trouvé une autre solution, voir la macro "Private Sub Worksheet_Calculate()" qui se trouve dans la feuille 3 du fichier joint.
La première macro "Private Sub Worksheet_Calculate()" fait appel à une cascade de test conditionnel.
Elle est actuellement masquée et fonctionne très bien.
Celle qui est active (utilisation de variable) pose problème
Cette solution avec utilisation de variables me paraît plus élégante.

Si c'est jouable, comment résoudre ce problème ?

Merci d'avance pour votre réponse,

@+
 

Pièces jointes

  • Essai macro evenementielle8.xls
    71 KB · Affichages: 27

Dranreb

XLDnaute Barbatruc
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Depuis le début je ne comprends absolument rien à çe que vous voulez faire.
La procédure en commentaire a l'air pas mal, à 2 remarques près:
1) - Il vaudrait mieux, après élimination de tests inutiles car toujours faux, l'écrire comme ça :
VB:
Private Sub Worksheet_Calculate()
Select Case Feuil2.[B2].Value
   Case 1: Case_1
   Case 2: Case_2
   Case 3: Case_3
   Case 4: Case_4
   Case Else: Feuil1.Activate
   End Select
End Sub
2) - Mettre la code dans des procédures séparées n'a d'intérêt que si elles doivent être appelées depuis plusieurs endroits. Ça ne semble pas être le cas, alors je mettrait les codes des Sub Case_X dans la Worksheet_Calculate
 

Hub

XLDnaute Occasionnel
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Bonjour,

Non seulement je suis débutant en VBA mais de plus l’informatique ce n’est pas mon métier.
J’apprends à travers des sites dédiés et grâce aux personnes comme vous qui m’accordez un peu de temps.

VBA possède une infinité de possibilité, j’en connais une infime partie et j’essaye de bidouiller avec. Ce qui explique que l’on a du mal à se comprendre.

J’ai suivi vos conseils (voir fichier joint) mais faute de connaissance suffisante, il y a des subtilités que je ne maîtrise pas et donc ça ne fonctionne pas.
Est-ce que « Case » (Select Case Feuil2.[B2].Value) fonctionne comme une variable ?
Pour info, j’utilise une vieille version XP2002, la solution que vous proposez est elle compatible ?

Merci pour le temps que vous m’accordez,

@+
 

Pièces jointes

  • Essai macro evenementielle9.xls
    74.5 KB · Affichages: 22

Dranreb

XLDnaute Barbatruc
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Bonjour.

Enlevez d'abord ce "Case" devant qui ne sert à rien.
Non, Select Case Expression est une instruction qui inaugure un bloc devant se terminer par une instruction End Select.
Entre les deux: des séries d'instructions commençant par Case Valeur pour indiquer la valeur de l'expression spécifiée au Select Case pour laquelle l'instruction ou le groupe d'instruction qui la suit doit être exécuté.
 

Hub

XLDnaute Occasionnel
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Bonjour,

La solution « Select Case » que vous avez proposé fonctionne très bien, merci pour votre aide.
Mais comme je voudrai comprendre comment fonctionne VBA, j’ai continué à travailler sur la solution avec des variables.
J’ai mis le doigt sur le problème, les explications sont dans le fichier joint.
Comment le résoudre ?

Encore merci pour votre aide,

@+
 

Pièces jointes

  • Essai macro evenementielle10.xls
    188 KB · Affichages: 21
  • Essai macro evenementielle10.xls
    188 KB · Affichages: 20

Dranreb

XLDnaute Barbatruc
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Bonjours.
C'est quoi, cette instruction inutile ? Une cellule est toujours l'intersection d'elle même avec elle même alors cette intersection ne peut jamais être Nothing !
 

Hub

XLDnaute Occasionnel
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Bonjour,

Je pense que votre remarque fait référence à la ligne ci-dessous :
If Intersect(Sheets("Feuil3").Range("B2"), Range("B2")) Is Nothing Then Exit Sub

Pour info, c'est cette ligne de commande que j'utilise dans la version 8 (conversation N°7) et qui ne présente aucun problème.

@+
 

Dranreb

XLDnaute Barbatruc
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Elle ne présente en effet aucun problème, ni utilité quelconque, elle est complètement transparente, elle bouffe seulement quelques micro-secondes pour rien du tout, vu que le Exit Sub ne peut jamais s'exécuter.
 

Hub

XLDnaute Occasionnel
Re : VBA - macro événementielle liée indirectement au choix de cases à option

Oui vous avez raison, dans l'état des choses çà ne pouvait pas fonctionner.

On vient de me donner la solution ce matin.
Il suffit de placer Run devant Case_X .... et ça fonctionne.

Par contre, j'ai essayé Run avec Application.Caller sans succès.

J'ai essayé de trouver des infos à propos de Run dans l'aide en ligne et sur Internet, je n'ai rien trouvé.
A tout hasard, pouvez vous me renseigner à ce sujet ?

D'avance merci

@+
 

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16