Subscript out of range dans mon code
Résolu
Swazit
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
spider -
spider -
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
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
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
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
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...
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...
Dim tab_donnee(1000) as string
pourrait grandement aider ;-)