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 :

Erreur 28 sur un GoSub


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Par défaut Erreur 28 sur un GoSub
    Bonjour,

    J'ai une base de donnée à traiter.. un peu longue 73202 lignes..
    Je sais qu'il y a des lignes à supprimer que je ne connais pas mais que je peux retrouver avec un raisonnement et une fonction.

    Mon but :

    - j'ai une base de donnée avec les prix des puts et calls du cac40 avec leur strike,... (s'il y a des financiers ils comprendront)

    - je l'ai tri manuellement et range les colonnes pour avoir cet ordre
    date (croissant), strike price(croissant), échéance(croissant), heure (croissant)..

    - Je veux donc que VBA se place dans un intervalle de date identique le 03.02.00 par exemple ne me garde qu'un prix pour chaque type de call.
    exemple : le 03.02.00, un call à 5000, échéance le XX.XX.00 et son prix de clôture.

    Le principe : automatiser un truc qu'il faut que je fasse à la main....

    Programme que j'ai écrit mais j'ai une erreur 28 de "pile" sur un gosub.. Je n'arrive pas à trouver de solution en cherchant en francais et en anglais sur google..

    Je suis pas expert mais quand même plus avancé qu'un débutant disons et l'erreur ne me saute pas aux yeux

    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
    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
    Sub tri()
    'case de début a=A et b=2 ici
     
        Dim i, j As Long
        dd = 2
        i = 2
        j = 1
     
    jour: 'marque gosub
        i = dd
     
        If Cells(i, 1).Value = "" Then 'si vide on stoppe le programme (correspondrait ‡ la derniËre ligne)
            GoSub fin
        End If
     
        Do While Cells(i, 1).Value = Cells(i + 1, 1).Value 'cherche l'intervalle avec les dates identiques
            i = i + 1
        Loop
     
     
    strike:  'marque gosub
     
        jourd = dd 'fixe intervalle date début
        jourf = i  'fixe intervalle date fin
        i = jourd  'donne le dÈbut du nouvel intervalle
     
        Do While Cells(i, 2).Value = Cells(i + 1, 2).Value And i < jourf 'cherche l'intervalle de ma deuxième colonne ou les valeurs sont identiques
            i = i + 1
        Loop
     
    echeance: 'marque gosub
     
        striked = jourd 'fixe l'intervalle..
        strikef = i
        i = striked
     
        'verifie que l'on ne soit pas sur un cas avec une seule ligne de strike
        If striked = strikef Then
            dd = dd + 1
            GoSub strike 8O
        'fin de la verif
     
        End If
     
        Do While Cells(i, 3).Value = Cells(i + 1, 3).Value And i < strikef
               i = i + 1
        Loop
     
        echeanced = striked
        echeancef = i
     
        'verifie que l'on ne soit pas sur un cas avec une ligne d'échéance
        If echeanced = echeancef And echeancef < strikef Then
            striked = echeancef + 1
            GoSub echeance
     
        ElseIf echeanced = echeancef And echeancef = strikef Then
            jourd = echeancef + 1
            GoTo strike
     
        ElseIf echeanced = echeancef And echeancef = jourf Then
            dd = echancef + 1
            GoSub jour
            'fin de la verif
     
        End If
        Range(Cells(echeanced, 1), Cells(echeancef - 1, 10)).Delete
     
            If echeancef < strikef Then
                striked = echeancef + 1
                GoSub echeance
            ElseIf echeancef = strikef Then
                jourd = echeancef + 1
                GoSub strike
     
            ElseIf echeancef = jourf Then
                dd = echeancef + 1
                GoSub jour
            End If
    fin:
         MsgBox "Tri terminé"
     
    End Sub
    J'obtiens l'erreur sur le gosub strike avec le smiley.
    J'espère que quelqu'un arrivera à me sauver.. parce que les 73000 lignes me donnent déjà envie de vomir

    Bien cordialement
    Olivier

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Tu parles de 73000 lignes, tu es donc en 2007... (merci le préfixe à gauche tu titre... )

    Pourquoi ne pas utiliser la fonctionnalité consistant à extraire les doublons, éventuellement en VBA?

    Les GOSUB, c'est loin d'être le top en matière de programmation.

    Si les critères de sélection font que tu ne peux utiliser la fonctionnalité d'extraction des doublons, tu pourrais:

    1) Trier tes données selon tes critères
    2) Remonter du bas vers le début de ton tableau et extraire/supprimer ce qui doit l'être.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Par défaut
    Désolé pour la version de Excel.

    Le problème c'est que ce n'est pas des doublons, ils sont identiques pour certaines caractéristiques mais pas au niveau de leurs prix et de l'heure du prix.

    Je suis un peu perdu pour le coup.. Je n'ai pas exactement compris ce que tu entendais par remonter..

    merci pour ton aide.

  4. #4
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour bookada,

    peut tu montrer quelque ligne avec deux groupes et indiquer les deux lignes à garder, je crois que ton probleme peut être résolu plus rapidement avec une formule.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par bookada Voir le message
    ...mais que je peux retrouver avec un raisonnement et une fonction....
    Quel raisonnement? Ton code n'est pas suffisamment explicite pour comprendre quoi prendre et quand le prendre

    Citation Envoyé par bookada Voir le message
    ...
    - je l'ai tri manuellement et range les colonnes pour avoir cet ordre
    date (croissant), strike price(croissant), échéance(croissant), heure (croissant)..
    Cela peut être fait en VBA (histoire de ne pas oublier de le faire)

    Citation Envoyé par bookada Voir le message
    ...
    - Je veux donc que VBA se place dans un intervalle de date identique le 03.02.00 par exemple...
    Donne le déroulement générique plutôt qu'un exemple. Veux-tu rechercher pour un jour particulier, pour chaque jour d'une plage, pour chaque jour présent dans la base?

    Citation Envoyé par bookada Voir le message
    ...ne me garde qu'un prix pour chaque type de call.
    exemple : le 03.02.00, un call à 5000, échéance le XX.XX.00 et son prix de clôture...
    Sur quelle base garder une ligne plutôt qu'une autre? Que veux-tu dire par "garder"? Supprimer les autres? Copier celle que tu veux "garder" sur une autre feuille? ...? Peut-on imaginer une formule Excel (via evaluate, éventuellement)?


    Ton code n'est pas du tout optimisé pour travailler avec des objets. Les GOSUB, c'est vraiment à proscrire.

    Perso, je découperais le travail en petites procédures propres et autonomes.
    - Une pour trier
    - Une pour déterminer la ligne à "garder"
    - Une pour supprimer ou déplacer

    Citation Envoyé par bookada Voir le message
    ...Je n'ai pas exactement compris ce que tu entendais par remonter..
    Si on doit supprimer des lignes, il est préférable de commencer par le bas du tableau, pour éviter de "sauter" des lignes lors du traitement.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Erreur 145 sur table mysql
    Par ramses83 dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/09/2007, 21h09
  2. [VB.NET] Erreur OnMouseUp sur Datagrid
    Par daner06 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/01/2005, 10h26
  3. [Kylix] erreur time.sur kylix avec redhat 9.0
    Par sumco dans le forum EDI
    Réponses: 4
    Dernier message: 20/05/2004, 15h13
  4. Réponses: 9
    Dernier message: 27/04/2004, 11h01
  5. [VB6] Erreur 9 sur redim preserve
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/10/2002, 17h29

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