VBA, Option Byref dans macro complémentaire?

Fermé
Destmobil Messages postés 12 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 28 octobre 2011 - 26 oct. 2011 à 10:05
Destmobil Messages postés 12 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 28 octobre 2011 - 28 oct. 2011 à 08:12
Un grand bonjour à tous ceux et celles qui nous offrent leur savoir.

Avec plusieurs outils vba à mon actif,
je me tourne dernièrement vers le développement de macros complémentaires.

Les problèmes arrivent assez vite.
J'ai créé une routine (donc une sub placée dans mon fichier .xla) qui nécessite une série d'arguments pour travailler.
Ces arguments sont, des variables string, des entiers, des objets, des variables tableaux...

Cette routine modifie certains des arguments.

Et voici le problème par lui même :
Cette routine complémentaire est utilisée par une macro "normale" placée dans un fichier .xls quelconque.

Malgré avoir bien déclaré toutes mes variables utilisées en argument (option explicit oblige :)
Et bien les modifications réalisées par la routine complémentaire sur mes variables sont perdues dès la fin de cette routine.

C'est bien là tout le problème, j'ai besoin de récupérer ces modifs moi !!! Sinon ma routine ne sert à rien !! :)

J'ai beau user de l'option Byref devant chacun des arguments, cela s'avère inefficace.
Bref, je sèche...

Quelqu'un sait-il d'où vient ce problème ?




A voir également:

4 réponses

Destmobil Messages postés 12 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 28 octobre 2011
26 oct. 2011 à 18:01
J'ai finalement une solution pour contourner le problème.

Le variables as object qui sont modifiées par la "macro complémentaire" reviennent correctement modifiées. Contrairement au variables as string, as integer, etc..


Il m'a donc fallu créer un objet qui contienne toutes les autres infos.
Le gagnant du jour est le dictionary.

Chaque nom de variable devient une key de mon dictionary et le contenu de la variable sera la définition.

En langage vba, voici ce que ça donne :

mon_dico.add "nom_de_ma_variable", ma_variable

Ensuite, je donne à manger mon_dico à ma macro complémentaire qui en modifiera le contenu et me rendra mon_dico bien modifié.

Voilà.
Je ne sais toujours pas comment faire pour que ma macro complémentaire me rende directement les modifs des variables de type string ou autre, mais en utilisant des objets à la place, j'ai quand même pu récupérer mes infos.
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
Modifié par michel_m le 27/10/2011 à 08:16
bonjour
Une fonction ne renvoie qu'une variable

le fait d'utiliser une collection "dictionary" te renvoie une variable de type objet, ce qui est valable. une autre possibilité, moins pratique à mon avis, aurait été de renvoyer une variable-tableau
Michel
0
Destmobil Messages postés 12 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 28 octobre 2011
27 oct. 2011 à 12:11
Attention, je n'utilise pas une fonction, mais une routine.


C'est assez différent.

Dans le cas d'une fonction, c'est le nom de la fonction qui sert de variable.


Function Ma_belle_fonction (argument1, argument2, etc...) as string
Ma_belle_fonction = mon travail avec les arguments
End Function



Dans le cas de ma routine, ce sont les arguments qui subissent des modifs

Sub Ma_belle_routine (arg1, arg2)

...
arg1 = arg1_modifié
arg2 = arg2_modifié

End Sub



En sortie, je n'arrive à récupérer que les modifs réalisées sur les arguments as object et c'est tout. Heureusement, sur tous les arguments as object et pas juste un seul.

Alors que, si Ma_belle_routine n'est pas une macro complémentaire, mais une macro "normale" placée dans le même projet, alors je peux récupérer les modifs sur tous les arguments, quelles que soient leurs définitions.
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
27 oct. 2011 à 13:50
ne te fâche pas, grand génie

base du vba: Ta" routine" s'appelle une macro-fonction paramétrée

Excuses moi de t'avoir dérangé
0
Destmobil Messages postés 12 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 28 octobre 2011
Modifié par Destmobil le 28/10/2011 à 08:14
Je ne me fâche pas :)
j'essai juste de comprendre au mieux.

J'ai déjà assez de mal à piger ce que je fais parfois.
Si je ne fais plus le distingo entre les 2, je me mélange les pinceaux, et pour finir, mon code devient total foireux :o)

C'est aussi pour ça que j'appelle à l'aide.....
0
Destmobil Messages postés 12 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 28 octobre 2011
28 oct. 2011 à 08:12
Pour ceux que ça intéresse toujours,

Il existe une possibilité de retrouver toute la fonctionnalité de l'option "byref" simplement si la macro (routine, procédure, fonction ou que sais-je... n'est-ce pas Michel:o) qui utilise la macro complémentaire devient elle aussi une macro complémentaire, alors ça marche.

Tous les types de variables reviennent correctement modifiés.
0