Definition de variable (réaction "alléatoire de VBA"

bonjour,

je suis nouveau venu sur ce forum, et je cherche à résoudre un très vieux soucis lorsque je développe sous VBA; je vais donc essayer d’expliquer ce problème.

Dans une feuille , par exemple "controles", dans laquelle je regroupe un certain nombre de paramètres et différentes données j'ai une cellule contenant par exemple un taux de TVA, je lui ai attribué un nom (TVA).

Dans mon programme lorsque je veux utiliser ce taux de TVA, j'ai différentes options:

1 - Soit j'écris

X= Sheets("controles").[TVA] pour récupérer en X le code de TVA

et ça fonctionne bien ...

c'est surtout interéssant lorsqu'on utilise plusieurs étiquettes différentes de cette même feuille.

2 - soit pour éviter de répéter Sheets("controles"), et en ayant écrit, quelques lignes plus tôt, Sheets("controles").select

je peux utiliser X=[TVA]

et ça fonctionne .... mais pas toujours, et surtout lorsque je passe sur un autre ordi

Je peux utiliser aussi ActiveSheet.[TVA] mais ce n'est pas beaucoup mieux que la solution 1.

Merci de votre aide si quelqu'un connait une explication; et j'espère avoir été assez clair dans ma description.

Claude M (pourkoapas)

Bonsoir et bienvenue

J'ai du mal à comprendre pourquoi vouloir créer la variable X puisque ta variable existe déjà avec le nom défini TVA

Si tu écris

X=[TVA] 
Range("B1")=Range ("B2")+X

Revient à écrire

Range("B1")=Range ("B2")+[TVA]

Bon, je n'est pas testé mais ça me semble une évidence. A voir ...

A te relire

Amicalement

Nad

Salut et bienvenue sur le Forum,

Selon moi il n’est absolument pas nécessaire de faire référence à la feuille dans le code VBA, puisque celle-ci est présente dans les références du nom.

Tu peux donc te trouver sur n’importe quelle feuille au moment où tu utilises x = [TVA] et ça fonctionne. Est-ce que ton problème vient que tu compliques tes instructions ?

Sinon il serait intéressant que tu nous dises sur quelles machines ça fonctionne et sur lesquelles non.

Cordialement.

Bonjour,

Que ce soit sur xl2010 ou 2003, je n'arrive pas à reproduire l'erreur que tu mentionnes....

Dans un module standard, si je mets :

Sheets("Feuil2").Range("C3") = [TVA] * 12

et quelle que soit l'onglet actif, ça me donne bien le résultat....

Si tu pouvais joindre un fichier exemple, avec le dysfonctionnement observé, on pourrait peut-être voir...

Bon courage

merci de vos réponses,

les exemples que j'ai écrit sont fictifs (pour répondre à NAD, je n'ai pas besoin de X précisément).

C'était juste pour expliquer que selon les moments ou les ordi il faut spécifier ActiveSheet ou bien le nom de la feuille, alors que normalement il suffit de citer Range(TVA), ou même seulement [TVA].

Je tacherais de retrouver un exemple concret, mais le soucis c'est que ce comportement est aléatoire, donc pas toujours reproductible (sic).

Merci encore

Claude


[quote="Nad"]Bonsoir et bienvenue

J'ai du mal à comprendre pourquoi vouloir créer la variable X puisque ta variable existe déjà avec le nom défini TVA

Si tu écris

X=[TVA] 
Range("B1")=Range ("B2")+X

Revient à écrire

Range("B1")=Range ("B2")+[TVA]

Bon, je n'est pas testé mais ça me semble une évidence. A voir ...

Pour être plus clair, le X ne sert à rien c'était un exemple; ce n'est pas le X qui pose soucis, c'est juste le fait d'être obligé de remplacer [TVA] par Sheets("controles").[TVA] à chaque fois que je veux utiliser TVA

Je trouve plus facile d'écrire juste [TVA] que Shee.................TVA je suis "paresseux du clavier" et de plus c'est plus lisible.

Voila, voila

Claude

Re,

Si tu es paresseux, tu peux suivre mon conseil

Yvouille a écrit :

Tu peux donc te trouver sur n’importe quelle feuille au moment où tu utilises x = [TVA] et ça fonctionne.

Amicalement.

avec plaisir,

mais quel est ce conseil, que tu me préconises

Claude

Bonjour,

Le dysfonctionnement que tu constates peut provenir de la déclaration de la variable nommée.

Par défaut, un nom créé est utilisable directement dans tout le classeur mais il est également possible de créer un nom qui n’est visible que depuis une feuille spécifique.

Regarde cet exemple.

7pourkoapas.xlsm (172.72 Ko)

A+

Bonjour à tous,

Tu ne dis pas ce que tu as quand ça ne fonctionne pas bien...

Est-ce que parfois tu n'utiliserais pas des noms niveau feuille au lieu de nom niveau classeur ?

Sur le classeur joint j'ai mis TVA1 en nom niveau classeur, aucun pb.

J'ai mis TVA2 en nom niveau feuille sur Feuil1 et Feuil2. Selon la feuille active et l'emplacement du code j'obtiendrai soit la bonne valeur, soit une mauvaise valeur, soit une erreur selon si le code est dans une feuille qui connait le nom ou pas ou dans un module standard. Là il faut utiliser le nom de feuille pour être sûr de ce qu'on ramène.

A toi de voir si ça s'approche de ton problème.

eric

edit: ah, j'aurais dû rafraichir, salut frangy...

edit2: mettre le nom dans une variable peut être intéressant.

[nom] est un range sur la feuille. Très long s'il est lu dans une grande boucle ou si c'est une grande matrice.

La variable est en mémoire.

7noms.zip (9.00 Ko)
Rechercher des sujets similaires à "definition variable reaction alleatoire vba"