VBA Excel: travailler avec fichiers fermes

Pascal126

Nouveau membre
Bonjour,

J'ai vu qu'il y a deja eu quelques posts sur ce sujet mais aucune des reponses que j'ai pu lire ne semble correspondre a mon probleme.

Voici mon "cas":

J'ai un fichier Master ouvert dans Excel qui me montre les depenses de mes centres de cout par ligne (j'ai 80 lignes) ainsi que le budget correspondant et l'ecart entre le reel et le budget. Dans ce fichier, je peux choisir un mois de l'annee 2006 ainsi qu'un centre de cout. Suivant mon choix, ma macro va chercher dans un fichier intitule Targets qui se trouve dans le meme repertoire le budget correspondant au mois pour chacune des 80 lignes.

J'ai ouvert le fichier Targets par l'instruction Open tName For Input as #1 (ou tName comprend le chemin d'acces complet du fichier Targets).

Jusque la, pas de problemes, c'est apres que cela se complique. Je veux faire une recherche dans ce fichier pour trouver la bonne worksheet (j'ai une worksheet par centre de cout). J'ai donc ecrit (note: toutes les variables ont ete definies prealablement of course):

' Identifies the correct tab in the file
myWSName = myCostCenter & " " & myPeriod1
myTargetsTabs = Workbooks(tName).Worksheets.Count
For t = 1 To myTargetsTabs
If Workbooks(myTargets).Worksheets(t).Name = myWSName Then
Workbooks(myTargets).Worksheets(t).Activate
c = 1
Do Until ActiveSheet.Cells(6, c).Value = myMonth
c = c + 1
Loop
ActiveSheet.Cells(6, c).Select
ActiveCell.Offset(5, 0).Select
ActiveSheet.Range(Selection, Selection.End(xlDown)).Copy

mySGA.Activate
Range("F18").Select
ActiveCell.PasteSpecial (xlPasteValues)

Exit For
End If
Next t

Ca marche impeccable quand mon fichier tName est ouvert dans Excel. Si j'essaie de faire tourner la macro avec le fichier ferme, l'instruction Open... fonctionne bien mais la macro plante a la ligne myTargetsTabs = Workbooks(tName).Worksheets.Count ou j'obtiens l'erreur "Subscript out of Range". Pour info aussi, j'ai defini tName comme une String, je pense que le probleme pourrait venir de la, mais je ne vois pas comment faire une reference a ce fichier autrement. Merci d'avance pour votre aide. J'espere avoir ete clair dans mes explications, n'hesitez pas a me demander si je me suis mal explique.

Pascal
 

Pascal126

Nouveau membre
Desole, je ne comprends pas balise
Code:
. Dois-je rajouter kekechose au code, ai-je oublie une info dans mon message?
 

zeb

Modérateur
Lis le topik "Quelques règles simples à respecter -- /!\ A lire avant de poster !". Tu sauras ce que signifie le message laconique "balise
Code:
 :o"
 

Pascal126

Nouveau membre
Bonjour,

J'ai vu qu'il y a deja eu quelques posts sur ce sujet mais aucune des reponses que j'ai pu lire ne semble correspondre a mon probleme.

Voici mon "cas":

J'ai un fichier Master ouvert dans Excel qui me montre les depenses de mes centres de cout par ligne (j'ai 80 lignes) ainsi que le budget correspondant et l'ecart entre le reel et le budget. Dans ce fichier, je peux choisir un mois de l'annee 2006 ainsi qu'un centre de cout. Suivant mon choix, ma macro va chercher dans un fichier intitule Targets qui se trouve dans le meme repertoire le budget correspondant au mois pour chacune des 80 lignes.

J'ai ouvert le fichier Targets par l'instruction Open tName For Input as #1 (ou tName comprend le chemin d'acces complet du fichier Targets).

Jusque la, pas de problemes, c'est apres que cela se complique. Je veux faire une recherche dans ce fichier pour trouver la bonne worksheet (j'ai une worksheet par centre de cout). J'ai donc ecrit (note: toutes les variables ont ete definies prealablement of course):

Code:
' Identifies the correct tab in the file 
            myWSName = myCostCenter & " " & myPeriod1 
            myTargetsTabs = Workbooks(tName).Worksheets.Count 
                For t = 1 To myTargetsTabs 
                    If Workbooks(myTargets).Worksheets(t).Name = myWSName Then 
                        Workbooks(myTargets).Worksheets(t).Activate 
                        c = 1 
                            Do Until ActiveSheet.Cells(6, c).Value = myMonth 
                                c = c + 1 
                            Loop 
                        ActiveSheet.Cells(6, c).Select 
                        ActiveCell.Offset(5, 0).Select 
                        ActiveSheet.Range(Selection, Selection.End(xlDown)).Copy 
                         
                        mySGA.Activate 
                        Range("F18").Select 
                        ActiveCell.PasteSpecial (xlPasteValues) 
                         
                        Exit For 
                    End If 
                Next t

Ca marche impeccable quand mon fichier tName est ouvert dans Excel. Si j'essaie de faire tourner la macro avec le fichier ferme, l'instruction Open... fonctionne bien mais la macro plante a la ligne myTargetsTabs = Workbooks(tName).Worksheets.Count ou j'obtiens l'erreur "Subscript out of Range". Pour info aussi, j'ai defini tName comme une String, je pense que le probleme pourrait venir de la, mais je ne vois pas comment faire une reference a ce fichier autrement. Merci d'avance pour votre aide. J'espere avoir ete clair dans mes explications, n'hesitez pas a me demander si je me suis mal explique.

Pascal

 

zeb

Modérateur
Tu as fait un effort de présentation, c'est bien :)
Encore une critique : le bouton
Vous devez être connecté pour voir les images.
est là pour ça, pas besoin de tout réécrire :D

Tu veux ouvrir un classeur au sens Excel. Mais en fait, tu ouvres un fichier au sens VB !
Donc quand il est DEJA ouvert, pas de problème, et quand il n'est pas ouvert, ça plante.

Pour ouvrir un classeur, utilise :
Code:
Workbooks.Open FileName:="ton_classeur.xls"
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 131
Messages
6 717 958
Membres
1 586 383
Dernier membre
potofeu
Partager cette page
Haut