Rechercher une feuille par une variable en VBA [Résolu]

Signaler
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008
-
koolman61
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008
-
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

Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

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
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

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.
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

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
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

re bonsoir

Apparement, pas un problème d'espacement.

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

Bav
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

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...
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

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
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
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+
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

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
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
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
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

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
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
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+
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

le s ne change rien
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
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+
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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.
Messages postés
83
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
14 décembre 2011
1
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
Messages postés
25
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
17 août 2008

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