IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Calcul de cap sous vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut Calcul de cap sous vba
    Bonjour,
    Je suis novice en vba et j'ai un calcul de cap à effectuer à partir de la latitude et la longitude de 2points consecutifs fournis à partir d'un fichier Excel.
    Sous Excel ça donne ça (sachant que la latitude se situe colonne 12 et la longitude colonne 11):

    N1: latitude du point de départ
    N2: latitude du point d'arrivée
    E1:longitude du point de départ
    E2:longitude du point d'arrivée
    Npole=1.570796
    a=Npole-N2
    b=Npole-N1
    c=arcos(sin(N1).sin(N2)+cos(N1).cos(N2).cos(E1-E2))

    Avant correction trigonométrique:

    F=(cos(a)-cos(b).cos(c))/(sin(b).sin(c))
    cosA=SI(F>1;1;SI(F<-1;-1;F))
    A=arcos(cos(A))
    Cap1=A*57.295779 (//pour avoir le cap en degré)

    Après correction eventuelle:

    Cap=SI(ET(E1=E2;N2>N1);0;SI(ET(E1=E2);N2<N1);180;SI(ET(E1=E2;N2=N1;0;SI(E1<E2;Cap1;360-Cap1))))


    Sous VBA j'ai fait ça (c'est surement pas très concis!):

    Option Explicit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub cap()
    Dim caz As Integer
    caz = 1
    Const Npole = 1.570796
    Dim cap1
    For caz = 1 To 5000
    Cells(caz, 46).Value = Npole - CStr(Cells((caz + 1), 12).Value)
    Cells(caz, 47).Value = Npole - CStr(Cells(caz, 12).Value)
    Cells(caz, 48).Value = Sin(CStr(Cells(caz, 12).Value)) * Sin(CStr(Cells(caz + 1, 12).Value)) + Cos(CStr(Cells(caz, 12).Value)) * Cos(CStr(Cells(caz + 1, 12).Value)) * Cos(CStr(Cells(caz, 11).Value) - CStr(Cells(caz + 1, 11).Value))
    Cells(caz, 49).Value = Atn(-(Cells(caz, 48).Value) / Sqr(-(Cells(caz, 48).Value) * (Cells(caz, 48).Value) + 1)) + 2 * Atn(1)
    Cells(caz, 50).Value = (Cos(Cells(caz, 46).Value) - Cos(Cells(caz, 47).Value) * Cos(Cells(caz, 49).Value)) / (Sin(Cells(caz, 47).Value) * Sin(Cells(caz, 49).Value))
    If Cells(caz, 50).Value > 1 Then
    Cells(caz, 51).Value = 1
    ElseIf Cells(caz, 50).Value < -1 Then
    Cells(caz, 51).Value = -1
    Else
    Cells(caz, 51).Value = Cells(caz, 50).Value
    End If
    Cells(caz, 52).Value = Atn(-(Cells(caz, 51).Value) / Sqr(-(Cells(caz, 51).Value) * (Cells(caz, 51).Value) + 1)) + 2 * Atn(1)
    Cells(caz, 53).Value = 57.295779 * Cells(caz, 52).Value
    If CStr(Cells(caz, 11).Value) = CStr(Cells(caz + 1, 11).Value) And CStr(Cells(caz + 1, 12).Value) > CStr(Cells(caz, 12).Value) Then
    Cells(caz, 45).Value = 0
    ElseIf CStr(Cells(caz, 11).Value) = CStr(Cells(caz + 1, 11).Value) And CStr(Cells(caz + 1, 12).Value) < CStr(Cells(caz, 12).Value) Then
    Cells(caz, 45).Value = 180
    ElseIf CStr(Cells(caz, 11).Value) = CStr(Cells(caz + 1, 11).Value) And CStr(Cells(caz + 1, 12).Value) = CStr(Cells(caz, 12).Value) Then
    Cells(caz, 45).Value = 0
    ElseIf CStr(Cells(caz, 11).Value) < CStr(Cells(caz + 1, 11).Value) Then
    Cells(caz, 45).Value = Cells(caz, 53).Value
    Else
    Cells(caz, 45).Value = 360 - Cells(caz, 53).Value
    End If
    Next caz
    End Sub
    Mais ça marche pas!
    Est-ce que je suis obligée de faire apparaitre les colonnes 46,47,48...qui ne me servent que pour le calcul du cap.
    Si quelqu'un peut m'aider, merci!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Je précise un peu mon problème...
    C'est notamment dans mon itération, à la 1ère ligne, il n'a pas l'air de comprendre qu'à la ligne i de la colonne 46, j'affecte la valeur de la différence entre Npole et la valeur de la i+1 ligne de la colonne 12...J'ai une erreur d'incompatibilité de type...
    voilà, si quelqu'un pouvait m'aider...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 191
    Par défaut
    Le CStr ne te renvoi pas un réel mais un string ou booléen. Regarde l'aide F1 pour cette commande. Enlève le et ça devrait passer

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    J'ai enlevé les CStr mais à la première ligne de l'itération il ne comprend toujours pas le "caz+1" il m'indique toujours une erreur d'incompatibilité de types...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 191
    Par défaut
    t' as fait un déboguage par étape ? Il bloque pour Caz=1 ? Essaie peut etre avec Dim Npole as Single on sait jamais

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Merci peaceandloveman01 pour ton aide mais Dim Npole as Single ne change rien et quand je fais un débogage étapes par étapes il se bloque à la ligne

    Cells(caz, 46).Value = Npole - Cells((caz + 1), 12).Value

    En me mettant toujours incompatibilité de types...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb de formule de calcul sous VBA
    Par bagheria85 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/09/2010, 11h58
  2. Réponses: 7
    Dernier message: 09/02/2010, 12h03
  3. Insertion dans une table d'une valeur calculée sous VBA
    Par fbourdon dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/11/2009, 20h52
  4. Calcul sur une partie d'un tableau défini sous VBA
    Par VBA_LOVER dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2009, 12h27
  5. [Calculs VBA] Test de condition sous VBA
    Par guen dans le forum VBA Access
    Réponses: 8
    Dernier message: 28/11/2007, 17h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo