Erreur d'exécution '9' : l'indice n'appartient pas à la sélectio

Guiboule1015 Messages postés 11 Statut Membre -  
Guiboule1015 Messages postés 11 Statut Membre -
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...

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.

2 réponses

  1. Paf
     
    Bonjour

    Sur quelle ligne l'erreur ?

    Peut-être :
    Worksheets("Donnees")...

    Worksheets("meteo")...

    A+
    0
    1. Guiboule1015 Messages postés 11 Statut Membre
       
      Bonjour Paf,

      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...
      0
    2. Utilisateur anonyme > Guiboule1015 Messages postés 11 Statut Membre
       
      Bonsoir, normalement l'éditeur VBA mets le curseur sur la ligne ou apparait le bug.
      0
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      tu peux tester en mettant les " " à tes noms de feuille comme indiqué par paf.
      eric
      0
    4. Guiboule1015 Messages postés 11 Statut Membre > eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonjour Whismeril,

      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...
      0
    5. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      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
      0
  2. ThauTheme Messages postés 1564 Statut Membre 160
     
    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 :

    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
    0
    1. Guiboule1015 Messages postés 11 Statut Membre
       
      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...
      0