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

VBA Discussion :

[VBA] taille max d'une variable public


Sujet :

VBA

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 16
    Points
    16
    Par défaut [VBA] taille max d'une variable public
    Salut,

    Existe-t-il une taille maximal pour une variable de type public dans VBA (pour excel) ?

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ... et tu ve y mettre quoi de si gros dans tes variables...

    je ne connais pas la taille maximale autorisé pour les variables (qu'elle soit publique ou pas) , mais je pense que c'est la même taille pour les variables publiques ... ou pas...

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par bbil
    ... et tu ve y mettre quoi de si gros dans tes variables...

    je ne connais pas la taille maximale autorisé pour les variables (qu'elle soit publique ou pas) , mais je pense que c'est la même taille pour les variables publiques ... ou pas...
    je veux utiliser un tableau d'environ 6000 lignes et colonnes de double ce qui me fait une variable de qql centaines de mega ce qui est gerable pour ma RAM mais il me plante tout de meme pour manque de memoire et j'ai cru comprendre en lisant l'aide qu'il doit y avoir une limite de taille pour les variables Public mais elle n'est pas indique

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par Mdsn Mibrary
    Limites de la taille d'un tableau

    La longueur de chaque dimension d'un tableau est limitée à la valeur maximale d'un type de données Long, qui est (2 ^ 64) - 1. La taille totale limite d'un tableau varie en fonction de votre système d'exploitation et de la quantité de mémoire disponible. L'utilisation d'un tableau qui dépasse la quantité de RAM disponible sur votre système est plus lente, car les données doivent être lues à partir du disque et être écrites sur celui-ci.

    http://msdn.microsoft.com/library/fr...ringArrays.asp

    moi avec mes 1,5Go de ram j'arrive à une taille maximale de mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public t(82483, 1000) As Double
     
     
     
    Sub test()
      Debug.Print t(1, 3)
     
     
    End Sub
    ...

    est-tu vraiment obligé d'utiliser un si gros tableau ? , n'as tu pas pensé à une solution ... utilisant une table (base de donnée) pour stoker ton tableau ?
    :

  5. #5
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Au vu de ce que tu dis
    je veux utiliser un tableau d'environ 6000 lignes et colonnes de double ce qui me fait une variable de qql centaines de mega ce qui est gerable pour ma RAM mais il me plante tout de meme pour manque de memoire ...
    Peut-être que tu as trop de fichiers ou application d'ouverte qui te prennent beacoup de RAM et que du coup, il ne t'en reste pas assez pour ton application Excel (Excel aussi nécessite de la place mémoire, mais je ne sasi pas combien

    Bon courage

    Igloobel
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  6. #6
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Franchement, je suis d'accord avec bbil. Tu arrives dans le domaine des bases de données. Pourquoi ne mets-tu pas tes données dans Access.
    En plus, je ne sais pas ce que tu comptes faire avec tes "doubles", mais quand tu auras des recherches ou des tris à faire... Aïe Aïe Aïe!!

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    En fait j'utilise juste excel pour peupler une matrice et l'inverser via une ddl. Car malheureusement les bases de donnee sont souvent tres differente par leur format et afin d'eviter de devoir apprendre a manipuler entre entre 3 et 5 format qui ne sont pas des fichier .txt, j'utilise un traitement "a la main" avec des traducteur en general basique (mais rapide a prendre en main) et excel pour le faire, bref....

    Sinon ma memoire vive est de 2 giga, donc toutes a fait suffisante bien entendu j'evite de faire tourner film et unreal en meme temps comme vous pouvez vous en douter.

    Il ne me reste plus que qql explication:
    - j'a fait une erreur dans la frappe de la commande
    - utilisation mal placer de la commande Redim (faut dire que je ne suis pas toujours rigoureux avec tout ce qui est declaration, procedure, module, etc...)

    Sinon le nom de l'erreur est un erreur 7. Afin d'y remedier j'ai tenter de faire passer mes variable de type Public en Private car il ecrit dans l'help qu'il est possible de depasser la memoire allouable au variable Public ( ne sachant pas trop ce qu'il veulent dire par la j'ai tenter le proceder susmentionne)

    Voila la ligne de code qui me pose probleme ( avec matrixsize = 5854 et sinkzone = 4):

    ReDim matA(1 To matrixsize - sinkzone, 1 To matrixsize - sinkzone) As Double

    La variante utiliser (zonetot = 5850) :
    ReDim matA(1 To zonetot, 1 To zonetot) As Double

    ne fonctionne pas non plus...

    voila tout, que faire ?
    Merci de votre aide

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    en fait voici voici le code (juste le main les sub fonctionne sans prob), sa foire au niveau de l'etoile *:

    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    '  airSet matrix calculation base, declare NAG function used in calcs for multizones, and establish multi-zone calc dim statements
       Option Base 1
     
       Declare Sub F04AAF Lib "F:\NAGF0345.DLL" (a As Double, ia As Long, _
       b As Double, ib As Long, n As Long, m As Long, c As Double, ic As Long, _
       wkspce As Double, ifail As Long)
     
       Dim m As Long, i As Long, n As Long, j As Long, ifail As Long
       Dim matA() As Double, matB() As Double, matC() As Double, wkspace() As Double
     
    '   Set dim statements for all calcs and calcs for single zones
     
        Dim airzone As Integer
        Dim sinkzone As Integer
     
        Dim temp1 As Integer        'sert pour les mutliple scenario de vent
        Dim temp2 As Integer        'sert pour les mutliple scenario de vent (temps total)
        Dim pag2 As Integer         'sheets number data
     
        Dim emission As Integer     'sert pour les emission multiple
        Dim emission_bis As Integer 'sert pour les emission multiple
     
        Dim matrixsize As Integer
     
        Dim volume As Double
        Dim activezone As Integer
        Dim fraction As Double
     
        Dim outputwb As String          'workbook name resultat
        Dim sheetname As String         'sheet name resultat
        Dim modelfile As String
     
        Dim count As Integer
        Dim count1 As Integer
        Dim count2 As Integer
     
        Dim matAbase() As Double
     
        Dim airhormatrix() As Variant
        Dim airvertmatrix() As Variant
        Dim airname() As Variant
        Dim airsizehor As Integer
        Dim airsizevert As Integer
     
        Dim volumematrix() As Variant
     
        Dim airdata() As Variant
        Dim geopotential() As Variant
        Dim emissionsdata() As Variant
     
        Dim resultsdata() As Variant
     
     
    Sub calculate()
    '
    ' overall calculation procedure Macro 14/08/2000 and modified by F.Gigante 09.05
    '
        Application.ScreenUpdating = False
        modelfile = ActiveCell.Parent.Parent.Name
     
        Sheets("air data").Select
        airzone = Cells(3, 6)
        sinkzone = Cells(3, 7)
     
        temp1 = 0
        temp2 = 0
     
    For pag2 = 4 To 6
     
        Worksheets(pag2).Select
     
        While IsEmpty(Cells(2, 63 + (temp1 * 7))) = False
     
            Call createbook
     
            For emission = 1 To 450
     
            '  create results output sheet and adds resume titles
                Call createresultsheet
     
            '  set number of zones, compartments, and matrix size
                Call pastegeo
                Call inputdata
                Call setupmatrix
                Call volumedata
     
            '  Establish air and water advection matrices
                ReDim matAbase(1 To matrixsize, 1 To matrixsize) As Double
                Call setuphorizadvectionmatrix
                Call setupverticaladvectionmatrix
     
            '  input degradation and intermedia transport rate coefficients into overall matrix
      * ReDim matA(1 To matrixsize - sinkzone, 1 To matrixsize - sinkzone) As Double
                Call matrixcompin
                ReDim matAbase(1, 1)
     
            '  Input Emissions data - can add loop here for calculations and results outputs for emission scenarios
                Call emissionsinput
     
            '  Calculate overall mass balance matrix calculation
                Call matrixcalc
     
            '  Output results
                Call clearresultsdata
                Call results
     
                ReDim matA(1, 1)
                ReDim matB(1, 1)
                ReDim matC(1, 1)
     
            '  Creates output sheets and resume data
                Call createoutput
     
                emission_bis = emission_bis + 1
            Next emission
     
        temp1 = temp1 + 1
        temp2 = temp2 + 1
     
        Worksheets(pag2).Select
     
        Wend
     
        temp1 = 0
     
    Next pag2
     
    ' moves cursor to original position, returns to results sheet and deletes spare sheet before closing
     
         Sheets("Controls").Select
         Windows(outputwb).Activate
     
        Application.ScreenUpdating = True
     
    End Sub
    voila

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Déjà, seule la dernière dimension peut être modifiée par un redim.

    Je ne sais pas si c'est de là que vient ton problème mais il faudra le prendre en compte.

    De plus, si je ne me trompe, on ne peut pas modifier la borne inférieure. Donc, pas de 1 to ...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    juste en complement d'information, voila l'erreur qui m'est affiche:

    Out of memory (Error 7)


    More memory was required than is available, or a 64K segment boundary was encountered. This error has the following causes and solutions:

    You have too many applications, documents, or source files open.
    Close any unnecessary applications, documents, or source files that are open.

    You have a module or procedure that's too large.
    Break large modules or procedures into smaller ones. This doesn't save memory, but it can prevent hitting 64K segment boundaries.

    You are running Microsoft Windows in standard mode.
    Restart Microsoft Windows in enhanced mode.

    You are running Microsoft Windows in enhanced mode, but have run out of virtual memory.
    Increase virtual memory by freeing some disk space, or at least ensure that some space is available.

    You have terminate-and-stay-resident programs running.
    Eliminate terminate-and-stay-resident programs.

    You have many device drivers loaded.
    Eliminate unnecessary device drivers.

    You have run out of space for Public variables.
    Reduce the number of Public variables.

    For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).


    si cela peut aider qql'un a... m'aider!

Discussions similaires

  1. Taille max d'une variable
    Par Super_carotte dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/04/2011, 15h01
  2. Taille max d'une image
    Par Risike dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/05/2006, 17h16
  3. [VBA-E] guillements dans une variable string
    Par repié dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/03/2006, 13h42
  4. [VBA] ne reconnait pas une variable
    Par gyzmo5 dans le forum Access
    Réponses: 6
    Dernier message: 26/01/2006, 12h26
  5. [MASM] Quelle est la longueur max d'une variable?
    Par Crisanar dans le forum Assembleur
    Réponses: 2
    Dernier message: 17/11/2004, 21h47

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