Subscript out of range dans mon code

Résolu/Fermé
Swazit Messages postés 4 Date d'inscription lundi 23 juin 2014 Statut Membre Dernière intervention 27 août 2014 - 26 août 2014 à 12:17
 spider - 1 sept. 2015 à 16:41
Bonjour à tous,

Je dois créer pour mon stage une plateforme de saisie des temps sous Excel. Dans cette plateforme, j'ai notamment un classeur qui me permet pour un employé donné de récupérer tous ses temps de travail, organisés par code projet.

Pour récupérer ces temps et les données qui y sont associées, j'utilise des tableaux. Un tableau = une colonne de donnée.

Mon problème est que, bizarrement, mon code fonctionne mais seulement de temps en temps. La plupart du temps il m'affiche un "Suscribe ouf of range" pour chaque tableau ou je stocke mes données.

Je ne vois vraiment pas d'ou vient mon erreur. Et le plus bizarre dans tout ça, c'est que j'ai utilisé le même code à très peu de chose près pour un autre classeur. Et qu'il fonctionne très bien....

Pouvez vous m'aider ?
Merci !

Public Periode
Public Pers
Sub Projet()

Pers = Workbooks(1).Sheets(2).Range("B1")
Periode = Workbooks(1).Sheets(2).Range("D1")

Dim Rep, F, Obj, sRep, F1, sf
Dim Chem As String
Dim Chemin As String
Dim tab_donnee(1000)
Dim tab_donnee1(1000)
Dim tab_donnee2(1000)
Dim tab_donnee3(1000)
Dim tab_donnee4(1000)
Dim tab_donnee5(1000)
Dim indic As Integer
indic = 0

'Chemin = "C:\Users\baptiste.pialot\Desktop\Saisie\2014"
'Dim emplacement
'emplacement = Chemin & "Résumé par projet.xlsm"

If Periode = "Année" Then

Chem = "C:\Users\baptiste.pialot\Desktop\Saisie\2014\"
Set Obj = CreateObject("Scripting.FileSystemObject")
Set Rep = Obj.Getfolder(Chem)
Set sRep = Rep.subfolders
For Each sf In sRep
Set F = sf.Files
For Each F1 In F
If Right(F1.Name, 4) = "xlsm" Then

Workbooks.Open (F1.Path)
'Debug.Print F1.Path
'Debug.Print F1.Name

For i = 0 To 1000 'Récupération colonne Timesheet

If ActiveSheet.Cells(1, 2) = Pers Then

tab_donnee(indic) = Cells(i + 4, 1) 'Date 'PROBLEME ICI
tab_donnee1(indic) = Cells(i + 4, 2) 'Projet 'PROBLEME ICI
tab_donnee2(indic) = Cells(i + 4, 3) 'Designation 'PROBLEME ICI
tab_donnee3(indic) = Cells(i + 4, 4) 'Activité 'PROBLEME ICI
tab_donnee4(indic) = Cells(i + 4, 5) 'Nombre d'heures 'PROBLEME ICI
tab_donnee5(indic) = Cells(i + 4, 6) 'Commentaires 'PROBLEME ICI

indic = indic + 1

End If
Next

Workbooks(F1.Name).Close

End If
Next F1
Next sf

Set Obj = Nothing
Set Rep = Nothing
Set F = Nothing

'For i = 0 To 32 'Vérification du contenu des tableaux

'Debug.Print tab_donnee(i)

'Next

For i = 0 To 1000 'Pour placer les colonnes dans le résumé

Workbooks(1).Sheets(2).Cells(i + 4, 2) = tab_donnee(i) 'Date
Workbooks(1).Sheets(2).Cells(i + 4, 1) = tab_donnee1(i) 'Projet
Workbooks(1).Sheets(2).Cells(i + 4, 3) = tab_donnee4(i) 'Nombre d'heures
Workbooks(1).Sheets(2).Cells(i + 4, 4) = tab_donnee2(i) 'Désignation
Workbooks(1).Sheets(2).Cells(i + 4, 5) = tab_donnee3(i) 'Type d'activité
Workbooks(1).Sheets(2).Cells(i + 4, 6) = tab_donnee5(i) 'Commentaire

Next

End If

End Sub

4 réponses

rEVOLV3r Messages postés 223 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 21 septembre 2022 28
26 août 2014 à 15:18
Bonjour,

Subscript out of range selon Microsoft :

*You referenced a nonexistent array element.

Vous avez donc un problème soit avec indic soit avec i. Lorsque votre macro bug, mettez vous en debogage et cliquez sur indic ou i pour voir sa valeur actuelle. Ca peut aider à comprendre d'où vient le problème.

Bonne journée
0
rEVOLV3r Messages postés 223 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 21 septembre 2022 28
26 août 2014 à 15:20
Ah et :

Dim tab_donnee(1000) as string

pourrait grandement aider ;-)
0
Swazit Messages postés 4 Date d'inscription lundi 23 juin 2014 Statut Membre Dernière intervention 27 août 2014
27 août 2014 à 09:25
Merci de votre réponse rEVOLV3r

J'ai utilisé le Debug comme indiqué (merci d'ailleurs, je ne savais pas que l'on pouvait faire ça)

En fait, la variable indic prend la valeur 1001 lorsque i est toujours égal à 0. Ce qui provoque le out of range.
J'ai essayé de changer la taille des tableaux, ça n'a pas d'effet. La variable indic augmente en même temps que la taille.
J'ai essayé de baisser la valeur max de i et j'ai remarqué que pour des petites valeurs (par exemple 50), la boucle fonctionne.

J'ai l'impression de passer à côté de quelque chose d'évident mais je n'arrive toujours pas à trouver de solution...
0
Swazit Messages postés 4 Date d'inscription lundi 23 juin 2014 Statut Membre Dernière intervention 27 août 2014
27 août 2014 à 15:56
C'est bon j'ai trouvé !

C'était tout simplement le + 4 que j'avais oublié d'enlever dans la première boucle.
0
je trouve que les problemme se trouve au niveau ou tu note Workbooks(1).Sheets(2).Cells commence a ajouter Workbooks(1.xlsm).Sheets(2).Cells
0