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 :

Comment stocker beaucoup de données dans une variable? [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par défaut Comment stocker beaucoup de données dans une variable?
    Bonjour le forum,

    Je vous explique mon problème :
    Afin de faire tourner un algorithme génétique, j'ai besoin de mettre une grande quantité de données dans un tableau que je stocke dans une variable VBA (qui est d'un 'Type' que j'ai créé).

    Or Excel VBA limite la taille des variables de type perso à 64 Ko... trop petit pour mon application!
    En gros je créé un individu qui a un certain nombre de caractéritiques (dont 4600 entiers) pas toutes du même type, et une population qui contient un certain nombre d'individus ainsi qu'un entier pour l'indexer.

    Voici mon code :
    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
    public const TailleIndividu = 4600
    public const TaillePopulation = 100
     
    Public Type Individu
        Index as integer
        Caracteritique(TailleIndividu) as integer
        Poids as Single
    End Type
     
    Public Type Population
        Personne(TaillePopulation) as Individu
        Index as Integer
    End Type
     
    Dim Generation1 as Population '===> bim erreur de compilation,
                                  'une donnée fixe ou statique
                                  'ne peu pas dépasser 64 Ko
    Dans quel genre de structure dois-je alors stocker mon tableau 'Population'?
    Est-il possible de stocker plusieur type de variables dans une Collection?
    Est-ce que je peu utiliser une classe? On peu mettre un tableau dans une classe?
    Est-ce que je devrait pas faire ça en C???

    I'am in the shit help me please!!!

    Merci les Devellopeurs!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    Bonjour,

    Je ne suis pas un grand expert vba mais je vais tenter d'apporter de l'aide.

    Dans quel genre de structure dois-je alors stocker mon tableau 'Population'?
    Je crois que le problème sera récurant pour chaque type de structure.

    Est-il possible de stocker plusieurs type de variables dans une Collection?
    la je ne peut répondre désoler.

    Est-ce que je peu utiliser une classe? On peu mettre un tableau dans une classe?
    Oui on peut mettre un tableau dans une classe, mais le problème de mémoire sera également présent. Mais ceci est intéressant a tester.
    Est-ce que je ne devrais pas faire ça en C???
    A mon avis tu va te confronter a beaucoup de problème de ce style pour développer un algorithme génétique en vba. Connaissant assez bien l'algorithme en question vba n'est pas très adapté à ceci, et le langage n'est d'ailleurs pas fait pour réaliser des applications évolué.
    Tu peux appeler un programme c depuis ta macro, celui ci exécutera l'algorithme, puis récupérer les résultats. De plus je suis persuadé que ton programme sera plus rapide en c qu'en vba.

    Tetar

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par défaut
    Merci pour la vitesse de ta réponse!

    Mon problème c'est que je ne maîtrise pas la notion de pointeurs dont j'aurai besoin en C

    Il n'y a pas un moyen de contourner la limite de 64 Ko fixée pas le logiciel? (à part en coupant mon tableau en plein de petits bouts)

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    Tu peux transformer tes Types en classes mais le plus simple semble de définir la taille de tes tableaux de manière dynqmique:

    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
    Public Const TailleIndividu = 4600
    Public Const TaillePopulation = 100
     
    Public Type Individu
        Index As Integer
        Caracteritique(TailleIndividu) As Integer
        Poids As Single
    End Type
     
    Public Type Population
        Personne() As Individu
        Index As Integer
    End Type
     
    Dim Generation1 As Population
     
    Sub Essai()
        ReDim Generation1.Personne(1 To TaillePopulation)
        Generation1.Personne(1).Poids = 60
        MsgBox Generation1.Personne(1).Poids
    End Sub
    Cordialement,

    Tirex28/

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    Mon problème c'est que je ne maîtrise pas la notion de pointeurs dont j'aurai besoin en C
    en effet mais l'apprentissage peut être intéressant . Il y as également d'autre langage pour faire ceci: vb.net,c#,java,scheme,caml...

    Il n'y a pas un moyen de contourner la limite de 64 Ko fixée pas le logiciel?
    Je viens de chercher rapidement sur le web et je n'ai rien trouvé pour.

    (à part en coupant mon tableau en plein de petits bouts)
    Alors la tu vas en ch..r tu iras peut être plus vite à comprendre l'utilisation des pointeurs.

    Tetar

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par défaut
    le plus simple semble de définir la taille de tes tableaux de manière dynqmique:
    sauf que le tableau dépassera la limite de 64Ko de toute façon!

    Bon je pense avoir trouvé une solution grâce aux Collections :
    au lieu de déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    caracteristique(TaillePopulation) as Integer
    je fais juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    caracteristique as New Collection
    et ça a l'air de passer... (en tout cas j'ai réussi à exploser ma mémoire cache avant que VBA ne limite les 64Ko...)
    par contre je dois me retapper tout mon code car on ne rempli pas de la même façon un tableau et une collection...

    si ça vous interresse je vous envoi mon fichier complet avec tout l'algorithme génétique. Ca peu être pas mal de le faire en VBA quand même!

    Vous connaissez un bon tuto pour se former aux pointeurs?

    Merci!

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Re,

    par contre je dois me retapper tout mon code car on ne rempli pas de la même façon un tableau et une collection...
    Pourtant cela semble fonctionner correctement, as tu essayé? Un extrait de l'aide:

    Citation Envoyé par F1
    Vous avez essayé d'allouer plus de 64 Ko de données de niveau module.
    Réduisez la quantité de données déclarées. Notez que bien que la taille des données de niveau module soit limitée à 64 Ko, la taille des tableaux et des chaînes de longueur variable de niveau module peut être supérieure.
    Cordialement,

    Tirex28/

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par défaut
    @Tirex28 :
    ah ok tiens j'avais pas lu ça...
    bon bah je vais essayer parceque là je me galère avec les Collections en fait c'est qu'une sale pile trop galère à gérer!

    grrrrrrr c'est pas tout de suite que je vais être en week-end moi

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par défaut
    Citation Envoyé par tirex28 Voir le message
    Pourtant cela semble fonctionner correctement, as tu essayé?
    Bon je viens d'essayer, et oui en effet ça marche... c'est là qu'on voit la difficulté de ce langage:
    Je créé un tableau à taille fixe 100*4600 => message d'erreur
    Je créé un tableau à taille dynamique, je le dimensionne direct à 100*4600 => tout roule !

    En tout cas merci Tirex mon algo fonctionne mais wahou ça va pas vite!

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

Discussions similaires

  1. [MySQL] Comment stocker un $_POST['mail'] dans une variable le temps de le traiter
    Par Dendrite dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/06/2008, 01h03
  2. [VB.NET] lien d'une base de donnée dans une variable
    Par Anubis666 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 19/01/2006, 10h56
  3. Comment stocker des mots clés dans une bas Mysql
    Par renofx1 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 05/01/2006, 00h57
  4. Réponses: 2
    Dernier message: 14/10/2005, 10h11
  5. Paradox 7 Comment trier et marquer données dans une DBgrid
    Par technico dans le forum Bases de données
    Réponses: 12
    Dernier message: 04/07/2004, 11h08

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