VBA: portée des variables

Résolu/Fermé
NyectoD Messages postés 23 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 6 juin 2014 - 12 mai 2014 à 16:15
NyectoD Messages postés 23 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 6 juin 2014 - 13 mai 2014 à 11:51
Bonjour,

J'ai un premier Userform dans mon document qui demande à l'utilisateur de saisir des données de type dates et autres, à partir de ces données le code va créer un nouveau document et réaliser des opérations (copie et analyse).

A la fin de mon code, j'appelle un autre Userform pour une nouvelle saisie de données de la part de l'utilisateur dans le but de réaliser des graphiques.

Pour cela j'ai essayé d'utiliser :

Workbooks("Nomdufichier").Activate
ou Workbooks("Nomdufichier").Select

Les mêmes méthodes avec le numéro du fichier (Workbooks(2).Select/Activate) ou avec ActiveWorkBook/ThisWorkBook me renvoient la même erreur.

J'ai un retour comme quoi l'indice d'appartient pas à la sélection (Erreur 9)

Mes Sub sont définies en public tout du long car des variables peuvent être réemployées plus tard.

Comment faire pour récupérer le focus sur mon document ?

Je ne sais pas si je suis clair, je reste à disposition pour de plus amples informations si besoin.
Merci d'avance,


5 réponses

NyectoD Messages postés 23 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 6 juin 2014 1
12 mai 2014 à 16:25
Avec une analyse pas à pas détaillé, je me rends compte que ma variable n'est plus déclarée et ne possède plus de valeur.
0
NyectoD Messages postés 23 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 6 juin 2014 1
12 mai 2014 à 16:52
Je continue à chercher de mon côté, j'ai déclaré ma variable en public avant l'initialisation de mon premier UserForm mais elle n'est dorénavant plus visible même dans celui ci.

J'ai mis
Public NomCplt As String

Plus tard dans mon code, je lui donne une valeur de cette manière
NomCplt = Nom & "texte variable"

En pas à pas, la variable NomCplt n'est plus déclarée et ne renvoie rien.

Quelqu'un a une piste pour moi ?
0
benol3 Messages postés 569 Date d'inscription lundi 29 juillet 2013 Statut Membre Dernière intervention 7 mai 2015 87
12 mai 2014 à 22:29
Salut,

Ou déclares tu ta variable NomCplt ? Dans un programme, dans un module ?

Sinon je comprend pas très ton problème... Quelle ligne de code provoque ton erreur ?

Je te propose de mettre ton fichier de manière anonymisé pour mieux comprendre les problèmes que tu rencontrent a l'aide de www.cjoint.com
0
NyectoD Messages postés 23 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 6 juin 2014 1
13 mai 2014 à 08:12
Bonjour,

J'ai vu ton message hier mais impossible de me connecter pour répondre.
J'ai continué mes recherches durant un moment et j'ai finis par résoudre le problème. Cela venait du fait que ma variable NomCplt état déclarée dans mon premier Userform et non dans le module.

L'erreur était que l'objet était introuvable, en l'occurrence ma variable NomCplt qui n'était pas considérée comme existante.

J'ai trouvé ce site, en autres (en anglais) qui m'a éclairé.
http://www.cpearson.com/excel/codemods.htm

Je remercie aussi michel_m pour avoir déplacé mon message, je pense qu'il sera plus à sa place ici, et pour son message de 2008 sur le sujet sur lequel je bloquais.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NyectoD Messages postés 23 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 6 juin 2014 1
13 mai 2014 à 10:57
Bon en fin de compte, je n'ai fait que déplacer le problème... *joie*

Je mets plus d'infos ici,

Je déclare ma variable NomCplt en public dans un module,
Sa valeur est fonction des données saisies par l'utilisateur dans mon premier Userform.

Le code de mon premier Userform récupère des données (variables) de classeurs fermés pour les copier dans un nouveau classeur (créer pour l'occasion) pour les analyser. Cette partie fonctionne, mes tests ne me renvoient plus d'erreurs.
A la fin de mon code, j'appelle un autre UserForm pour que l'utilisateur décide quels sont les graphiques qu'il veut voir apparaître.

C'est dans cet autre UserFrom que se pose mon soucis.
Je désire pour le moment, uniquement insérer un graphique vide dans un onglet spécifique du nouveau fichier dans lequel je pourrais insérer des données plus tard.

Sub BtnValider_Click()

Dim Graph As Chart

xlBook.Sheets("Graphs").Range(1, 1).Select
Charts.Add


Me renvoie une erreur 1004 : Erreur définie par l'application ou par l'objet

Workbooks(NomCplt).Sheets("Graphs").Range(1, 1).Select
Charts.Add


Me renvoie une erreur 13 : Incompatibilité de type

Après je n'utilise surement pas la bonne méthode pour créer un graphique mais je dois avouer que je trouve la documentation en ligne assez floue.

Idée subsidiaire :
Est ce que si j'appelle mon deuxième Userform pour connaitre les graphiques que désire l'utilisateur et que je continue mon code dans le premier UserForm cela devrait fonctionner ?

Désolé de facto d'avoir de-résolu le sujet.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 13/05/2014 à 11:44
Bonjour
Range("A1") ou cells(1,1) et non range(1,1)

Et peut-^tre aussi dire "Merci" d'avoir eu une réponse demandée en MP concernant la déclaration de variable

de rien....
0
NyectoD Messages postés 23 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 6 juin 2014 1
Modifié par NyectoD le 13/05/2014 à 12:00
Merci pour la correction, j'ai tendance à toujours confondre ces deux points.

En corrigeant, cela donne
xlBook.Sheets("Graphs").Range("A1").Select
Charts.Add


J'ai donc une erreur 91 : variable objet ou variable de bloc with non définie

Dans l'autre cas (corrigé lui aussi), toujours le même problème. (Erreur 13).

Merci encore de se pencher sur mon problème.
0