koolman61
Messages postés25Date d'inscriptionvendredi 11 mars 2005StatutMembreDernière intervention17 août 2008
-
15 juil. 2008 à 21:52
koolman61
Messages postés25Date d'inscriptionvendredi 11 mars 2005StatutMembreDernière intervention17 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
koolman61
Messages postés25Date d'inscriptionvendredi 11 mars 2005StatutMembreDernière intervention17 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)
koolman61
Messages postés25Date d'inscriptionvendredi 11 mars 2005StatutMembreDernière intervention17 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
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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.
MasterCent
Messages postés83Date d'inscriptionjeudi 22 septembre 2005StatutMembreDernière intervention14 décembre 20111 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
koolman61
Messages postés25Date d'inscriptionvendredi 11 mars 2005StatutMembreDernière intervention17 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.