Se connecter avec
S'enregistrer | Connectez-vous

pb avec une variable et workbooks activate en vba excel

Dernière réponse : dans Programmation

Bonjour!
je suis débutante en vba pour excel, et j'ai un petit problème.
J'ai créé un userform qui permet de saisir dans une zone de texte le nom du classeur dans lequel se trouve ce userform. Le nom que j'ai donné à cette zone de texte est "classeur". Je voudrais ensuite me servir de "classeur" (c'est à dire le nom que j'ai saisi) dans une macro à l'intérieur d'un workbooks activate. j'ai déclaré "classeur" comme variable globale.

Le code que j'essaye et qui ne marche pas est:
[code]
Workbooks classeur.Activate
[\code]

Par contre si je met le code avec le nom de mon classeur ça marche:
[code]
Workbooks ("nomduclasseur").Activate
[\code]

Mais je voudrais ne pas avoir à préciser le nom, mais juste indiquer la variable "classeur" qui contient le nom...
Pouvez-vous m'éclairer??? merci!
Si je n'ai pas été claire, demandez-moi des précisions...
Lassé par la pub ? Créez un compte
Expert Programmation

( Pour un premier post, c'est plutôt pas mal, mais il faut mettre un / pas un \ pour fermer ta balise :lol:  )

Tu as essayé ça :
  1. Workbooks(classeur).Activate
?

J'ai essayé en mettant dans le code du userform:

  1. msgbox classeur


et ça indique bien ce que j'ai saisi dnas le champ "classeur".
Par contre en mettant le msgbox dans le code de ma macro, il ne contient plus rien. J'ai pourtant bien déclaré ma variable Public...
Expert Programmation

grrr.... VBA est un langage de m****.
Mais on peut améliorer ça : utilise la clause suivante partout dans ton code.
  1. Option Explicit


Tu vas t'apercevoir que classeur n'est pas connu partout dans ton programme
Expert Programmation

( Travail personnel pour littlerainbow : Rechercher dans l'aide et/ou sur la toile ce qu'est la clause explicit. Comprendre son utilité. L'utiliser systématiquement en connaissance de cause )

La clause explicit était déjà mise dans mon code de userform, je l'ai rajouté dans le code de la macro. (si j'ai bien compris c'est une clause qui m'oblige à déclarer mes variables de façon explicite avant de les utiliser ) et j'ai réessayé avec les msgbox: même résultat: ma variable perd son contenu....

Je ne trouve toujours pas l'erreur.... je ne vois pas d'où vient le problème: ma variable est déclarée Public, en dessous de Option Explicit dans mon module.
Je saisi la valeur de "classeur" dans le champ du userform, je vérifie avec un msgbox dans le code du userform: "classeur" a bien la valeur saisie. Mais dès que je lance ensuite l'éxecution de ma macro dans le module: "classeur" n'a plus de valeur, le msgbox que j'ai placé dans le code du module est vide...

J'ai trouvé la solution!!!
Pour ceux que ça intéresse je m'explique:
il a fallu que je déclare un nouvelle variable globale nclasseur.
Ensuite dans le Userform, j'ai rajouté à la suite du champs "classeur" un champ "extention" qui est une zone de texte contenant les caratères .xls

Puis
  1. nclasseur=classeur+extention


A partir de ce moment, la variable nclasseur gardait bien sa valeur.

Enfin j'ai fait:
  1. Workbooks(nclasseur).activate


Je ne sais pas pourquoi il a fallut que la variable soit issue de la somme de deux autres pour qu'elle garde sa valeur ensuite dans le module... mais je me débrouille comme ça.
Lassé par la pub ? Créez un compte