L'indice n'appartient pas à la sélection
Bonjour à tous,
Comme la plus part des personnes qui poste un message sur ce forum, j'au un problème avec ma petite programmation en VBA.
Si une personne plus douée que moi (et la je n'en doute pas) peu me sortir de ma problématique je lui en serais très reconnaissant.
J'ai un classeur Excel dans lequel il y a deux feuilles :
- Feuil1 "suivi"
- Feuil2 "graph"
Dans la Feuil1 donc "suivi", il y a tableau de 62 colonnes et d'un nombre de ligne qui s'accroit au fur et a mesure du temps. Pour résumer un nombre de colonne constant un le nombre de ligne variable.
J'essai de créer un graphique dans le Feuil2 "graph", avec pour abscisse les valeurs d'une colonne x (35 par exemple) et pour ordonnée la colonne y (4 car elle correspond à la date de la rentrée des informations de la ligne correspondante).
Pour compliquer les choses le graphique ne commence pas forcement par la première ligne du tableau et ne termine pas forcement par la dernière ligne. C'est l'utilisateur du fichier Excel qui décidera par un choix de date de début et de date de fin qui est fait sur une autre Feuil.
Pour créer ce graphique j'ai réalisé ce petit programme:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| Sub BoutonCreer1_Click()
Dim date1 As Date
Dim date2 As Date
Dim celluletrouve, celluletrouvee As Range
Dim m, j As Long
Dim Derna As Long
Dim i As Long
Dim Tableau() As Variant, Tableau2() As Variant
'choix des dates debut et fin par l'utilisateur sur Feuil12
date1 = Feuil12.Cells(5, 2)
date2 = Feuil12.Cells(5, 4)
'recherche des numeros de ligne correspondant aux date demandées
Set celluletrouve = Sheets("suivi").Range("D:D").Find(date1, lookat:=xlWhole)
Set celluletrouvee = Sheets("suivi").Range("D:D").Find(date2, lookat:=xlWhole)
If celluletrouvee Is Nothing Then
MsgBox ("pas de production ce jour : " & date2)
End If
If celluletrouve Is Nothing Then
MsgBox ("pas de production ce jour : " & date1)
Else
ligne = celluletrouve.Row
ligne2 = celluletrouvee.Row
End If
'boucle pour ajouter ligne ayant la même date en fin de serie
Sheets("Suivi").Activate
Derna = Sheets("Suivi").Range("D65536").End(xlUp).Row
Dim Résultat As Long
For m = ligne To Derna
If Sheets("Suivi").Range("D" & m) = date1 Then
ligne = m + 1
End If
Next m
ligne = ligne - 1
'MsgBox ligne
'MsgBox ligne2
'calcul du nombre de ligne pour declaration tableau
ligne3 = (ligne - ligne2) + 1
'MsgBox ligne3
Sheets("Suivi").Activate
ReDim Tableau(ligne3)
ReDim Tableau2(ligne3)
'Création du tableau pour les Abscisses
For i = ligne2 To ligne
'ligne qui declenché le message d'erreur
Tableau(i) = Feuil7.Cells(i, 35)
Next i
'Création d'un tableau pour les Ordonnées
For i = ligne2 To ligne
'Le tableau est rempli par des valeurs aléatoires pour
'cet exemple
Tableau2(i) = Feuil7.Cells(i, 4)
Next i
'Création graphique
Charts.Add
'Définit la localisation du graphique:
'dans la feuille de calcul Feuil1 pour cet exemple
ActiveChart.Location _
Where:=xlLocationAsObject, Name:="graph"
'Ajoute une série dans le graphique
With ActiveChart
.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = Tableau() 'Abscisses
.SeriesCollection(1).Values = Tableau2() 'Ordonnées
'Définit le type (Courbe)
.ChartType = xlLine
End With
End Sub |
Le message d'erreur est le suivant :
erreur d'exécution '9' :
l'indice n'appartient pas à la sélection
Je specifie la ligne qui declenche l'erreur en rouge.
j'espère trouver de l'aide et remercie d'avance toutes les personnes qui pourront m'aider.