Fonction de recherche de feuille excel

Résolu
Signaler
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007
-
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007
-
bonjour,
j'ai une fonction me permettant de rechercher une feuille excel existanta afin de lui appliquer un traitement ultérieur:

Function WsExist(Nom$) As Boolean
On Error Resume Next
WsExist = Sheets(Nom).Index
End Function

mon problème se situe sur l'argument Nom
si je saisis l'argument nom à partir d'une textbox d'un formulaire, comme suit:

If WsExist(saisie2.Controls("txtnaff" & j).Value) = True Then
ActiveWorkbook.Sheets(saisie2.Controls("txtnaff" & j).Value).Select: GoSub coloration:
Else...

...pas de problème

par contre si je saisis l'argument à partir d'une cellule d'une autre feuille excel du style:

If WsExist(avancement!Range("a5").Value) = True Then
ActiveWorkbook.Sheets(avancement!Range("a5").Value).Select
Else...

....là j'ai une erreur d'excution de type "424"

ou est mon erreur?

11 réponses

Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

Dim z$
For n = 5 To 7
If WsExist(Worksheets("avancement").Range("a" & n).Value) Then
z = Worksheets("avancement").Range("a" & n).Value
MsgBox (z)
ActiveWorkbook.Sheets(z).Select: GoSub calcul
End If
Next n: End

voila ça ça marche
3
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Ton erreur se situe ici si je ne m'abuse :
ActiveWorkbook.Sheets(avancement!Range("a5").Value).Select

En vba, il ne reconnait pas la syntaxe NomFeuille!Range ...
Il faut remplacer par :
ActiveWorkbook.worksheets("Avancement").range("A5").select

si bien entendu, ta feuille s'appelle Avancement ^^

Molenn
0
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

hum non je crois que tu n'as pas saisi mon pb
le code que tu m'as fourni ne me permet que de sélectionner la cellule A5 de la feuille avancement
ce que je veux faire c'est sélectionner la feuille excel qui porte le nom (le numéro) inscrit dans la cellule A5 de la feuille avancement
effectivement la syntaxe NomFeuille!Range ne fonctionne pas (erreur de ma part j'avoue) ....mais pas plus que NomFeuille.Range...ou worksheets("Nomfeuille").Range... dans le cas ou NomFeuille est donné par la valeur de la cellule A5
voilà
0
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Ah ok ... Ce n'est pas très compliqué en fait.

2 étapes :
1 - Récupérer le nom de la feuille dans une variable :

Dim NomFeuille as string
NomFeuille = worksheets("Avancement").range("A5").value

2 - Sélectionner la feuille voulue
worksheets(NomFeuille).select

Molenn
0
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

effectivemment ça doit marcher
le problème vient du fait que dans mon exemple, et c'est ma faute, je me suis limité à range("a5") (car je testais déjà pour une cellule) alors que concrètement je voudrais l'étendre à une boucle for.... ça donnerait:

for n=..
...
ActiveWorkbook.Sheets(Worksheets("avancement").Range("a"& n).Value).Select:
...
next n

et là je ne sais pas passer range("a"&n) en variable
0
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Alors, pour cela, il te faut plusieurs variables.
Un truc du style (on va considérer que tu cherches sur la plage A10 à B20 ... Tant qu'à faire, si tu te poses la question pour les lignes en plus des colonnes :p) :

Dim NomFeuille as String
Dim Référence as string
Dim n as Integer

For n= 10 to 20.
Référence = "A" & n
NomFeuille = Worksheets("avancement").Range(Référence).Value
Worksheets(NomFeuille).select
Référence = "B" & n
NomFeuille = Worksheets("avancement").Range(Référence).Value
Worksheets(NomFeuille).select
Next n

Avec cette boucle, tu vas donc sélectionner à la respectivement les feuilles dont le nom sera dans les cellules A10, B10, A11, B11, ..., A20, B20.

J'ai pas envie de me fouler à créer la 2ème boucle imbriquée pour les colonnes, mais c'est faisable si tu as envie ^^

Molenn.
0
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

marche po
quelquesoit la manière de passer le nom de la feuille en argument VBA la rejette.... dans le cas que tu m'as fourni c'est une erreur de type 9
ce que je ne comprend pas c'est que le membre:

If WsExist(Worksheets("avancement").Range("a" & n).Value)

fonctionne alors que c'est ce membre qui rejette l'argument

ActiveWorkbook.Sheets(Worksheets("avancement").Range("a"&n).Value).Select
0
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

marche po
quelquesoit la manière de passer le nom de la feuille en argument VBA la rejette.... dans le cas que tu m'as fourni c'est une erreur de type 9
ce que je ne comprend pas c'est que le membre:

If WsExist(Worksheets("avancement").Range("a" & n).Value)

fonctionne alors que c'est ce membre qui rejette l'argument

ActiveWorkbook.Sheets(Worksheets("avancement").Range("a"&n).Value).Select
0
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
A mon avis, ton problème se situe là parce que ce bout de code, je ne te l'ai jamais marqué :
ActiveWorkbook.Sheets(Worksheets("avancement").Range("a"&n).Value).Select

C'est soit Sheets(NomFeuille), soit Worksheets(NomFeuille) parce que les 2 arguments dans une même formule à mon avis, ça doit faire conflit.
Tu as essayé avec une variable pour désigner le nom de la feuille comme je t'ai indiqué ?

Le premier fonctionne parce que WsExist, c'est une fonction.
le 2ème, c'est un argument que tu rentres, et je pense que ça coince.
0
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

j'ai essayé de passer en variable
et rien n'y fait
il rejete l'argument sous quelque forme qu'il soit
0
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

est-il possible de faire en sorte que la variable Nomfeuil soit indicée et que son indice corresponde au n que l'ontrouve dans range("a"&n)??
0