Fonction de recherche de feuille excel [Résolu]

Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
4 septembre 2007
- - Dernière réponse : niikkoo
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
4 septembre 2007
- 18 oct. 2005 à 14:31
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?
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
4 septembre 2007
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Dernière intervention
23 février 2011
0
Merci
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
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
4 septembre 2007
0
Merci
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à
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Dernière intervention
23 février 2011
0
Merci
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
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
4 septembre 2007
0
Merci
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
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Dernière intervention
23 février 2011
0
Merci
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.
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
4 septembre 2007
0
Merci
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
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
4 septembre 2007
0
Merci
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
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Dernière intervention
23 février 2011
0
Merci
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.
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
4 septembre 2007
0
Merci
j'ai essayé de passer en variable
et rien n'y fait
il rejete l'argument sous quelque forme qu'il soit
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
4 septembre 2007
0
Merci
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)??

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.