VBA - macro événementielle incompatible avec un résultat concaténé

Hub

XLDnaute Occasionnel
Bonjour,

Je débute en VBA, j’essaie de comprendre comment tout cela fonctionne. J’espère que mes explications ci-dessous et le fichier joint seront suffisamment explicites.

La macro événementielle de la feuille 3 est sensée sélectionner une des macros du module 2 (Case_1 à Case_4) et cela en fonction de la case à option qui aura était choisie.
Si on clique sur la case à option N°1, alors la macro événementielle va chercher la macro « Case_1 »…

A priori le problème provient de la ligne de commande :
« If Intersect(Sheets("Feuil3").Range("B2"), Range("B2")) Is Nothing Then Exit Sub »

Cette ligne de commande n’accepte pas le résultat d’une opération de concaténassions
« Case_X = "Case_" & Choix ».

Est ce vraiment un problème d'incompatibilité ?
Si ma déduction est correcte, dans ce cas de figure, comment résoudre le problème ?

Merci pour vos réponses,

@+
 

Pièces jointes

  • Essai macro evenementielle10.xls
    189 KB · Affichages: 13
  • Essai macro evenementielle10.xls
    189 KB · Affichages: 13

ERIC S

XLDnaute Barbatruc
Re : VBA - macro événementielle incompatible avec un résultat concaténé

Bonjour

quand j'écris des macros, j'essaie que cela reste lisible (j'ai quelquefois eu des questions plusieurs années après

Code:
       Select Case Choix
        Case 1
            Call Case_1
        Case 2
            Call Case_2
        Case 3
            Call Case_3
       End Select

peut-être peut-on rediriger avec des variables mais est-ce utile si on a un nombre raisonnable de cas
 

Hub

XLDnaute Occasionnel
Re : VBA - macro événementielle incompatible avec un résultat concaténé

Merci pour votre réponse,

Oui la solution avec "Case" ou même avec "If" fonctionne très bien.

Mais la solution avec des variables me paraissait sympa et en tant que débutant, j'aurais voulu comprendre pourquoi ça ne marche pas.

@+
 

ERIC S

XLDnaute Barbatruc
Re : VBA - macro événementielle incompatible avec un résultat concaténé

Re

J'aurais tendance à penser que l'on ne peut pas rendre dynamique l'appel de macros (en tout cas cela me semblerait logique.

Par contre le véritable problème vient à mon avis de ta façon d'écrire les macros Case_X :

1/ j'éviterais ces noms qui peuvent prêter à confusion avec les Select Case gérés par vba
2/ tes macros sont quasi identiques et donc je n'en ferais qu'une qui regrouperais les cas 1 à 4 et par des Si ou select case je traiterais les spécificités de chaque cas.
 

Hub

XLDnaute Occasionnel
Re : VBA - macro événementielle incompatible avec un résultat concaténé

J'ai remplacé "Case_X" par "Possibilite_X", ça ne change rien au problème.
J'avais également essayé avec "application caller" idem ça ne marche pas

Ton explication doit être juste, on ne peut pas rendre dynamique l'appel de macros.

Dommage ça me paraissait sympa

@+
 

eriiic

XLDnaute Barbatruc
Re : VBA - macro événementielle incompatible avec un résultat concaténé

Bonjour,

Tu pourrais utiliser :
Code:
Run Case_X
Mais je suis d'accord avec eric, ça présente peu d'intérêt ici.
Mieux vaut que ça reste le plus lisible possible.
Tu peux aussi passer en paramètre à la procédure le cas à traiter. Son test se trouve reporté dans la procédure en question, avec éventuellement des parties communes.
eric
 
Dernière édition:

Hub

XLDnaute Occasionnel
Re : VBA - macro événementielle incompatible avec un résultat concaténé

Merci eriiiic pour ta réponse,

avec Run + une variable, ça marche du tonnerre.

mais Run+Application.Caller ça ne marche pas.

Je suis d'accord avec vous tous, on peut faire plus simple avec les conditions Case.
Mais pour moi le but c'est d'apprendre et de comprendre.

Où puis je trouver des infos sur "Run", fonction que je découvre à l'instant grâce à toi ?

@+
 

eriiic

XLDnaute Barbatruc
Re : VBA - macro événementielle incompatible avec un résultat concaténé

Run est prévu pour appeler une procédure d'un autre fichier. Faire F1 pour avoir l'aide.

Mais je crois que tu fais fausse route par méconnaissance des possibilités de vba.
Plutôt que de traiter globalement le problème en décrivant le fonctionnement que tu voudrais, tu demandes ponctuellement comment traiter tel pb. J'ai l'impression (c'est personnel et ça n'engage que moi) qui tu suis un chemin tortueux dicté par des choix hasardeux au fil des obstacles rencontrés parce qu'on n'a pas une vue globale du contexte.
Comme je te l'ai dit tu peux passer des paramètres à une procédure, d'autre part les objets ActiveX génèrent des événements contrairement au objets formulaires que tu as choisis. Ce qui ouvre d'autres possibilités de résolution.
J'imagine donc plus appeler une procédure commune en lui passant le cas à traiter et si besoin la feuille (mais à-priori ce devrait-être la feuille active donc pas vraiment nécessaire).
Par ailleurs je viens de voir un autre topic qui est lié. C'est qui est limite correct et contre-productif.
Je vais donc arrêter ici.
eric
 
Dernière édition:

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia