Rechercher une feuille par une variable en VBA

Résolu
koolman61 Messages postés 25 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 17 août 2008 - 15 juil. 2008 à 21:52
koolman61 Messages postés 25 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 17 août 2008 - 16 juil. 2008 à 21:06
bonjour,

voila mon prob, j'ai une vaiable nma (numero machine) avec laquelle je désire ouvrir la feuille correspondant à la machine.
Onglet dans le classeur nommé par numéro de machine.
voici mon bout de code :
If typ "ETX" Or typ "EKX" Then
Workbooks.Open (pat) & ("ETXEKX.xls")
With Workbooks("ETXEKX").Sheet(nma).Select

Et là : erreur d'exécution "9"

l'indice n'appartient pas à la sélection

Dans le mode debbogage, il me surligne : With Workbooks("ETXEKX").Sheet(nma).Select

merci pour vos idées et éventuellement solution

16 réponses

koolman61 Messages postés 25 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 17 août 2008
16 juil. 2008 à 20:55
bonsoir,

grand merci à tous, mais j'ai trouvé une soluce simplicime.

J"ai simplement déclaré ma cellule de saisie en texte au kieu de standart.

Pourquoi chercher simple quant on peux faire compliqué.

J"aurais dû y songer avant de """helper""
Le nom d'une feuille est du texte, ma variable en standart est numérique.  CQFD

ùerci encore à tous et désolé du dérangement, cece dit, je tiens compte de vos suggestions et remarques pour la suite de mon code qui est loin d'être terminé (même si je connait assez bien les procédures d'archivages qu"il me reste à encoder)

encore merci
3
bonjourcheval Messages postés 228 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 8 août 2011
15 juil. 2008 à 22:31
Vous êtes ici : Thèmes / Visual Basic 6 / Divers / Débutants / rechercher une feuille par une variable en VBA

VBA <> VB6

Il y a une section déjà faite pour VBA. Le prochain post, essaie de choisir la bonne section  =)


Pour ton probleme, vérifie la valeur de ta variable nma et vérifie s'il y a vraiment une feuille qui correspond à ce que contient ta variable.
0
koolman61 Messages postés 25 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 17 août 2008
15 juil. 2008 à 22:39
bonsoir,

En ce qui concerne la variable, elle prend bien le num de la machine et oui, la feuille en question existe.

Ceci dit, ta réponse me fait songer à quelque chose, pourrait-il s'agir d'n prob d'espacement ?

merci
0
koolman61 Messages postés 25 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 17 août 2008
15 juil. 2008 à 22:52
re bonsoir

Apparement, pas un problème d'espacement.

Et j'oubliais, désolé pour l'erreur de section.

Bav
0

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

Posez votre question
bonjourcheval Messages postés 228 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 8 août 2011
15 juil. 2008 à 23:01
Juste une question comme ça, tu as combien de feuilles et quels sont les numéros de machine?

Si tu as 5 feuilles l'index sera de 0 à 4
Si ton numéro de machine est 33432, la sheet(33432) n'existe pas...
0
koolman61 Messages postés 25 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 17 août 2008
15 juil. 2008 à 23:06
seulement 6 types machines et max 14 feuilles dans les classeurs.

ex présenté : onglet (num machine) 10, 94, 439, 440, 488, 489

> if then pour ouvrir classeur correspondant, mais le tout géré par une fiche de travail
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
15 juil. 2008 à 23:18
Salut,

une selection sur la meme ligne quele with me parait etre une methode bien etrange !
question: le fichier est il bien ouvert ?

Donne nous la methode que tu utilises pour atribuer la valeur a la variable nma

donne nous aussi ce qu'il y a apres la ligne :

With Workbooks("ETXEKX").Sheet(nma).Select

et ce jusqu'au End With

A+
0
koolman61 Messages postés 25 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 17 août 2008
15 juil. 2008 à 23:25
voici tout le code, je le présentais avec un seul classeur car il est fait, les autres sont à faire.

Au départ j'avais pas mis le with, mais ça fonctionnait pas non plus.

'capture des données à copier
Dim plage As String
Dim nma As Integer

'num machine sur la feuille de saisie


nma = Range("b8")


'recherche et visualisation classeur machines le 14/07/08


Dim typ As String 


typ = Range("d10") 'type de machine sur la feuille de saisie
pat = ("C:\Documents and Settings\*****\Bureau\fiche de travail")If typ "ERE" Or typ "BT" Then
Workbooks.Open (pat) & ("ere.xls")
ElseIf typ "KMS" Or typ "EKS" Then
Workbooks.Open (pat) & ("KMSEKS.xls")
ElseIf typ "ECE" Or typ "ECP" Then
Workbooks.Open (pat) & ("ECPECE.xls")
Else
If typ = "EFG" Then
Workbooks.Open (pat) & ("EFG.xls")
Else
If typ = "ETV" Then
Workbooks.Open (pat) & ("ETV.xls")
ElseIf typ "ETX" Or typ "EKX" Then
Workbooks.Open (pat) & ("ETXEKX.xls")
With Workbooks("ETXEKX").Sheet(nma).Select
End With
End If
End If
End If
End If
End If
End If
End Sub
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
15 juil. 2008 à 23:51
les modif en bleu

    Dim plage As String
    Dim nma As Integer
    Dim typ As String
    Dim pat As String
   
    'num machine sur la feuille de saisie
   
    nma = Range("b8").Value
   
    'recherche et visualisation classeur machines le 14/07/08
   
    typ = Range("d10").Value 'type de machine sur la feuille de saisie
    pat = "C:\Documents and Settings\*****\Bureau\fiche de travail"    If typ "ERE" Or typ "BT" Then
        Workbooks.Open (pat & "ere.xls")    ElseIf typ "KMS" Or typ "EKS" Then
        Workbooks.Open (pat & "KMSEKS.xls")    ElseIf typ "ECE" Or typ "ECP" Then
        Workbooks.Open (pat & "ECPECE.xls")
    ElseIf typ = "EFG" Then
        Workbooks.Open (pat & "EFG.xls")
    ElseIf typ = "ETV" Then
        Workbooks.Open (pat & "ETV.xls")    ElseIf typ "ETX" Or typ "EKX" Then
        Workbooks.Open (pat & "ETXEKX.xls")
        Workbooks("ETXEKX").Sheet(nma).Activate
    End If

Je ne peux pas verifier mais cela doit aller mieux

interesse toi a la fonction case
0
koolman61 Messages postés 25 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 17 août 2008
16 juil. 2008 à 00:01
J viens de tester, code plus propre mais même résultat :

Workbooks("ETXEKX").Sheet(nma).Activate  surligné

erreur d'exécution '9'

l'indice n'appartient pas à la sélection
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
16 juil. 2008 à 00:10
erreur d'exécution '9'

l'indice n'appartient pas à la sélection

cela veut dire que soit le fichier n'existe pas ou soit que la feuille n'existe pas dans le fichier specifié

voila pour l'explication du message.
mais voila parfois le message ne suffit pas a comprendre le probleme car ton probleme est different c'est un probleme de syntaxe... il manque un S

Workbooks("ETXEKX").SheetS(nma).Activate

A+
0
koolman61 Messages postés 25 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 17 août 2008
16 juil. 2008 à 00:12
le s ne change rien
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
16 juil. 2008 à 06:03
cela nous ramenes a la premiere explication de mon precedent message :

Est ce que le fichier ETXEKX.xls est bien ouvert,  si oui est ce que la variable nma contient bien un nom de feuille d'une feuille existante dans le fichier ETXEKX.xls ?


Ah mais non... ca vas pas la !... je me suis fais avoir comme un bleu ...  ta variable nma est declaree a integer alors que la propriete Sheets attend un string  

donc soit tu modifis la declaration de la variable nma a string comme ceci :  Dim nma As String

soit tu convertis la valeur de ta variable en string au moment de son utilisation : Workbooks("ETXEKX").Sheets(CStr(nma)).Activate

mais honetement je prefere la premiere solution qui me parait plus sur et plus propre.

A+
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
16 juil. 2008 à 14:17
Salut,
Si tu remplaces nma par son contenu, tu te retrouves avec:


Workbooks("ETXEKX").Sheet(Range("b8").Value).Activate 


Est-ce bien raisonnable ?!!





<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
MasterCent Messages postés 83 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 14 décembre 2011 1
16 juil. 2008 à 14:21
Salut Koolman61,
Salut bigfish_le vrai

Je pense que tu aurais avantage à décomposer tes étapes :
par exemple

   Dim chemin As String
   Dim wb As Workbook

   '...
   chemin = pat & "ETXEKX.xls"
   Debug.Print chemin
   '...
   Set wb = Workbooks.Open(chemin)
   '..

Par ailleurs, je pense aussi à un problème de typ de données :

   ' imaginons qu'il existe une feuille, en deuxiéme position, appelée 1 :
   ' soit intNma , avec nma la position de la feuille, par exemple
    dim intNma as integer
    intNma = 2 
    wb.Sheets(intNma).Select
  
   ' soit strNma , avec nma le nom de la feuille, par exemple
    dim strNma as string
    strNma = "1" '
    wb.Sheets(strNma).Select
   
Par ailleurs, est tu sur de ta méthode ?

une petite boucle de controle pourrait t'aider :

    Dim feuille As Worksheet
    For Each feuille In wb.Sheets
        Debug.Print feuille.Index & ":" & feuille.Name
       
    Next feuille

Bat
m100
0
koolman61 Messages postés 25 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 17 août 2008
16 juil. 2008 à 21:06
Dèsue j'ai terminé tout le code, je vous le poste avec les classeurs (pour vérifs et downloads).  Même si c'est pour débutants, je pense qu c'est toujours utile.

Bav
0
Rejoignez-nous