Erreur d'exécution '9' : l'indice n'appartient pas à la sélectio
Guiboule1015
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
Guiboule1015 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Guiboule1015 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis novice en programmation et je dois créer un VBA calculant le gisement solaire pour un champ de capteurs pour une année.
J'ai créé le programme suivant sauf que j'ai l'erreur d'exécution '9' et je ne comprends pas pourquoi car mes feuilles sont correctement orthographiées et je ne vois pas d'autres erreurs...
Si quelqu'un peut m'éclairer je lui en serais très reconnaissant...
EDIT: Ajout de la coloration syntaxique.
Je suis novice en programmation et je dois créer un VBA calculant le gisement solaire pour un champ de capteurs pour une année.
J'ai créé le programme suivant sauf que j'ai l'erreur d'exécution '9' et je ne comprends pas pourquoi car mes feuilles sont correctement orthographiées et je ne vois pas d'autres erreurs...
Si quelqu'un peut m'éclairer je lui en serais très reconnaissant...
Sub Gisement_solaire() ' Déclaration des variables Dim H, L, e, ro As Double Dim gamma, beta, psy, teta, alpha As Double Dim Idirh, Idifh, Ith, Idirc, Idifc, Ir, Itc As Double Dim Nbc, Nbr, heure, m As Integer Dim Choix, Essai As String ' Calcul du gisement solaire ' Lecture des donnees etude Worksheets(Donnees).Select H = Cells(8, 9) L = Cells(10, 9) e = Cells(12, 9) gamme = Cells(14, 9) beta = Cells(16, 9) Nbc = Cells(18, 9) Nbr = Cells(20, 9) ro = Cells(22, 9) ' Periode de calcul For m = 1 To 8760 ' Lecture des donnees meteo Worksheets(meteo).Select heure = Cells(m + 1, 1) Idirh = Cells(m + 1, 3) Idifh = Cells(m + 1, 3) psy = Cells(m + 1, 6) alpha = Cells(m + 1, 7) ' Résolution teta = WorksheetFunction.Acos(Cos(alpha) * Cos(psy - gama) * Sin(beta) + Sin(alpha) * Cos(beta)) Idirc = (Idirh * Cos(teta)) / Cos(90 - alpha) Idifc = (Idifh * (1 + Cos(beta))) / 2 Ith = Idirh + Idifh Ir = (Ith * ro * (1 - Cos(beta))) / 2 Itc = Idirc + Idifc + Ir ' Ecriture des resultats Worksheets(Feuil3).Select Cells(m + 1, 1) = heure Cells(m + 1, 2) = Itc Next End Sub
EDIT: Ajout de la coloration syntaxique.
A voir également:
- Erreur d'exécution '9' : l'indice n'appartient pas à la sélectio
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
2 réponses
Bonsoir le fil, bonsoir le forum,
Deux remarques sur ton code :
D'abord au niveau de la déclaration des variables. Tu peux déclarer plusieurs variables dans la même ligne mais il faut impérativement spécifier le type de chacune d'entre elles. Sinon elles auront le type Variant (le plus gourmand en mémoire) par défaut. Donc :
Pas glop !
Glop, glop...
Ensuite, évite autant que tu le peux les Select qui ne font que ralentir l'exécution du code. With... End With permet cela. Ton code modifié qui, chez moi ne plante pas :
À plus,
ThauTheme
Deux remarques sur ton code :
D'abord au niveau de la déclaration des variables. Tu peux déclarer plusieurs variables dans la même ligne mais il faut impérativement spécifier le type de chacune d'entre elles. Sinon elles auront le type Variant (le plus gourmand en mémoire) par défaut. Donc :
Dim H, L, e, ro As Double Dim gamma, beta, psy, teta, alpha As Double Dim Idirh, Idifh, Ith, Idirc, Idifc, Ir, Itc As Double Dim Nbc, Nbr, heure, m As Integer Dim Choix, Essai As String
Pas glop !
Dim H As Double, L As Double, e As Double, ro As Double Dim gamma As Double, beta As Double, psy As Double, tetaas As Double, alpha As Double Dim Idirh As Double, Idifh As Double, Ith As Double, Idirc As Double, Idifc As Double, Ir, Itc As Double Dim Nbc As Integer, Nbr As Integer, heure As Integer, m As Integer Dim Choix As String, Essai As String
Glop, glop...
Ensuite, évite autant que tu le peux les Select qui ne font que ralentir l'exécution du code. With... End With permet cela. Ton code modifié qui, chez moi ne plante pas :
Sub Gisement_solaire() ' Déclaration des variables Dim H As Double, L As Double, e As Double, ro As Double Dim gamma As Double, beta As Double, psy As Double, tetaas As Double, alpha As Double Dim Idirh As Double, Idifh As Double, Ith As Double, Idirc As Double, Idifc As Double, Ir, Itc As Double Dim Nbc As Integer, Nbr As Integer, heure As Integer, m As Integer Dim Choix As String, Essai As String ' Calcul du gisement solaire ' Lecture des donnees etude With Worksheets("Donnees") H = .Cells(8, 9).Value L = .Cells(10, 9).Value e = .Cells(12, 9).Value gamme = .Cells(14, 9).Value beta = .Cells(16, 9).Value Nbc = .Cells(18, 9).Value Nbr = .Cells(20, 9).Value ro = .Cells(22, 9).Value End With ' Periode de calcul For m = 1 To 8760 ' Lecture des donnees meteo With Worksheets("meteo") heure = .Cells(m + 1, 1).Value Idirh = .Cells(m + 1, 3).Value Idifh = .Cells(m + 1, 3).Value psy = .Cells(m + 1, 6).Value alpha = .Cells(m + 1, 7).Value End With ' Résolution teta = WorksheetFunction.Acos(Cos(alpha) * Cos(psy - gama) * Sin(beta) + Sin(alpha) * Cos(beta)) Idirc = (Idirh * Cos(teta)) / Cos(90 - alpha) Idifc = (Idifh * (1 + Cos(beta))) / 2 Ith = Idirh + Idifh Ir = (Ith * ro * (1 - Cos(beta))) / 2 Itc = Idirc + Idifc + Ir ' Ecriture des resultats With Worksheets("Feuil3") .Cells(m + 1, 1) = heure .Cells(m + 1, 2) = Itc End With Next m End Sub
À plus,
ThauTheme
Désolé pour mon temps de réponse j'avais laissé ce projet un peu en suspend.
Je te remercie très fortement pour ta réponse tu as résolu tous mes problèmes ! Merci beaucoup !
J'ai juste un dernier soucis : mes résultats se marquent sur ma première feuille et non dans Feuil3 comme je le voudrais. Je ne comprends pas pourquoi vu que je ne lui demande pas de les marquer...
Je te remercie très fortement pour ta réponse tu as résolu tous mes problèmes ! Merci beaucoup !
J'ai juste un dernier soucis : mes résultats se marquent sur ma première feuille et non dans Feuil3 comme je le voudrais. Je ne comprends pas pourquoi vu que je ne lui demande pas de les marquer...
Il ne m'indique pas la ligne c'est ca le soucis...
J'ai essayé et il marque erreur '13'...
Je ne sais pas d'où vient l'erreur...
tu peux tester en mettant les " " à tes noms de feuille comme indiqué par paf.
eric
Non la il m'ouvre juste la fenêtre de l'erreur mais impossible de savoir ou est le problème...
Et non eriiic ca ne marche pas avec les guillements...
Quand tu écris Worksheets(Donnees).Select
Donnees est soit une variable chaine qui contient le nom de feuille, soit une variable entière qui contient l'index de la feuille.
Si tu écris Worksheets("Donnees").Select
tu t'adresses à la feuille nommée "Donnees", qui est différente de "Données", de "donnees" et de "Donnees "
Tu peux faire un effort si tu veux de l'aide. Tu n'as toujours pas dit la ligne en cause. Tu parles d'erreur 9, ensuite d'erreur 13...
Et tu peux déposer un fichier. On ne va pas essayer d'imaginer toutes les erreurs possibles et imaginables que tu as pu faire.
eric