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 exécution 7 : mémoire insuffisante sur un UserForm [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Oenologue
    Inscrit en
    Juin 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Oenologue
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2011
    Messages : 79
    Par défaut Erreur exécution 7 : mémoire insuffisante sur un UserForm
    Bonjour, me revoilà avec un nouveau souci

    Une erreur d'exécution : '7', mémoire insuffisante apparaît lors de l'utilisation d'un UserForm.
    J'utilise la même architecture sur d'autres feuilles sans souci mais sur l'une d'elle si je veux masquer des lignes dès la première sélection l'erreur se produit.
    Lors du débogage c'est la ligne en rouge qui est surlignée, erreur d'autant plus bizarre que sur des feuilles similaires avec le même code aucune erreur :

    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
    Option Explicit
    Dim N As Long, P, Ferme As Boolean
    Private Sub CloseButton_Click()
        SelectProcessRG.Hide
    End Sub
    Private Sub UserForm_Initialize()
        ListBox1.RowSource = Range("BaseRG!F1:F27").Address
        P = Array("5:7", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20:21" _
        , "25", "26", "28:30", "31", "32", "33", "34:35", "39", "40", "41", "42:43", _
        , "44", "45", "48", "49")
    End Sub
    Private Sub SelectAll_Click()
        Ferme = True
        Application.ScreenUpdating = False
        Rows("5:49").EntireRow.Hidden = False
        For N = 0 To ListBox1.ListCount - 1
            ListBox1.Selected(N) = True
        Next
        Ferme = False
    End Sub
    Private Sub DeselectAll_Click()
        Application.ScreenUpdating = False
        Rows("5:49").EntireRow.Hidden = True
        For N = 0 To ListBox1.ListCount - 1
            ListBox1.Selected(N) = False
        Next
    End Sub
    Private Sub ListBox1_Change()
        If Ferme = True Then Exit Sub
        Application.ScreenUpdating = False
        For N = 0 To ListBox1.ListCount - 1
            Rows(P(N)).EntireRow.Hidden = Not ListBox1.Selected(N)
        Next
    End Sub
    Private Sub ShowButton_Click()
        Dim derlig As Long, DerCol As Byte, Plage
        derlig = Range("A65536").End(xlUp).Row
        DerCol = Range("a1").End(xlToLeft).Column
        Set Plage = Range(Cells(1, 1), Cells(derlig, DerCol))
        SelectProcessRG.Hide
        With Sheets("BaseRG")
            With .PageSetup
                .PrintArea = Plage
                .Orientation = xlPortrait
                .FitToPagesWide = 1
                .FitToPagesTall = 1
            End With
            .PrintPreview
        End With
        SelectProcessRG.Show 0
    End Sub
    Je ne pense pas que ce soit à proprement parler une "mémoire insuffisante" ou saturée qui soit à l'origine de ce problème.
    Une idée svp ?

    Merci d'avance, Paul.

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 30
    Par défaut
    Hey,
    Simple idée, mais recréer la feuille/le fichier (dans la mesure ou il n'y a pas un nombre important de feuilles et entrées) et ré-insérer le code redonne toujours la même erreur?

    Cordialement,
    Jordan

  3. #3
    Membre confirmé
    Homme Profil pro
    Oenologue
    Inscrit en
    Juin 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Oenologue
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2011
    Messages : 79
    Par défaut
    Bonjour,
    Je viens de tester ta proposition, et je t'en remercie, mais cela ne change rien du tout, toujours la même erreur au même endroit.
    Je n'y comprend rien du tout...HELP ME....si une âme charitable pouvait regarder vite fait car je suis vraiment bloqué là.
    Merci d'avance.

    Je viens de tester en créant un nouveau classeur et en y copiant seulement la feuille qui pose problème et les userform qui la concerne.
    Le problème est identique

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Que vaut N lorsque l'erreur se produit?

    Peut-être qu'il y a un décalage dans les indices (vu qu'on peut utiliser Option Base 0 ou 1 pour les indices des tableaux...).

    Du coup si ça part de 1, ça fait que tu essaies d'accéder à un emplacement mémoire qui n'existe pas...

  5. #5
    Membre confirmé
    Homme Profil pro
    Oenologue
    Inscrit en
    Juin 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Oenologue
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2011
    Messages : 79
    Par défaut
    Bon je viens de dégoter une information qui me semble importante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub UserForm_Initialize()
        ListBox1.RowSource = Range("BaseRG!F1:F20").Address
        P = Array("5:7", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20:21" _
        , "25", "26", "28:30", "31", "32", "33", "34:35", "39", "40", "41", "42:43", _
        , "44", "45", "48", "49")
    End Sub
    Dans le code ci-dessus lorsque je réduit la "Range" de la ListBox1 en passant comme ci-dessus à "F1:F20" et non plus "F1:F27" ça marche !
    D'ailleurs je ne peux excéder "F1:F23" après ça bug de nouveau.

    Par contre j'en ai besoin et je ne peux la réduire, donc y-a-t-il une astuce pour contourner ce problème ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Oenologue
    Inscrit en
    Juin 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Oenologue
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2011
    Messages : 79
    Par défaut
    Citation Envoyé par Sclarckone Voir le message
    Que vaut N lorsque l'erreur se produit?

    Peut-être qu'il y a un décalage dans les indices (vu qu'on peut utiliser Option Base 0 ou 1 pour les indices des tableaux...).

    Du coup si ça part de 1, ça fait que tu essaies d'accéder à un emplacement mémoire qui n'existe pas...
    Bonjour Sclarckone,
    Pour être franc je ne comprend pas ta question

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Citation Envoyé par PaulG2B Voir le message
    Bonjour Sclarckone,
    Pour être franc je ne comprend pas ta question
    Pour accéder au i-ème élément de ton tableau P, tu utilise P(i). Mais en VBA on peut aussi bien faire partir la numérotation de 0 que de 1!

    Pour spécifier que l'on veut utiliser l'une ou l'autre on peut écrire au même endroit que Option Explicit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Option Base 0 'l'indice du premier élément d'un tableau sera alors tableau(0)
    Option Base 1 'l'indice du premier élément d'un tableau sera alors tableau(1)
    Mais pour en revenir à nos moutons, si quand tu réduit le nombre d'éléments de la ListBox ça ne plante plus, c'est plutôt sur les derniers indices qu'il doit y avoir un problème.


    Pour essayer de savoir d'où ça vient:

    - Rajoute Option Base 0 au tout début

    - Lance le programme et quand ça plante appuie sur Débogage et surtout ne stoppe pas l'exécution
    ->Regarde alors dans la fenêtre "Variables Locales" ce que valent N, P(N) et Listbox.Item(N) (s'ils existent...)

  8. #8
    Membre confirmé
    Homme Profil pro
    Oenologue
    Inscrit en
    Juin 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Oenologue
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2011
    Messages : 79
    Par défaut
    Bonjour Sclarckone,
    Tout d'abord je te remercie pour le temps que tu passes sur mon soucis , j'ai bien effectué la manip demandée.
    J'ai pour N la valeur "23" type "Long".
    J'ai pour P tout une série de valeur mais au milieu il y a P(23) qui a la valeur "Manquant" pour un type "Variant/String". La série de valeur commence à P(0).
    Je n'ai pas de ListBox.Item.

    En base 1 l'erreur devient erreur 9, et c'est p(24) qui est manquant.

    Donc si je comprend bien il s'agit d'un souci au niveau de ma zone array.

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Citation Envoyé par PaulG2B Voir le message
    J'ai pour P tout une série de valeur mais au milieu il y a P(23) qui a la valeur "Manquant" pour un type "Variant/String". La série de valeur commence à P(0).
    Je n'ai pas de ListBox.Item.

    En base 1 l'erreur devient erreur 9, et c'est p(24) qui est manquant.

    Donc si je comprend bien il s'agit d'un souci au niveau de ma zone array.
    Oui, car étant donné que les indices sont parcourus de 0 à ListBox1.ListCount - 1 il n'est normalement pas possible de ListBox1.Selected(i) n'ait pas de valeur définie.

    C'est donc que le problème vient de ton tableau. Et j'imagine d'ailleurs qu'il n'y a pas non plus de P(25), P(26)...

    Je vois 2 causes possibles à ton erreur:

    - Ou bien il y a une erreur de typo dans la déclaration de ton tableau, puisque les valeurs situées sur la 3ème ligne ne sont manifestement pas ajoutées à ton tableau (P(23) est la première valeur de ta 3ème "ligne" d'arguments que tu passes à Array(), et c'est également P(24) en "base 1"). Dans ce cas, essaie de supprimer les "_ + sauts de ligne" (donc tout écrire sur une seule ligne) pour voir si l'erreur disparait.

    - Ou bien la fonction Array() a une limitation sur le nombre d'arguments que l'on peut lui passer (mais je n'en sais rien...).

    PS: c'est quoi le type de l'erreur 9? C'est quand même bizarre que l'erreur change de type en changeant de numérotation.

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Tu as un trou dans ton Array après la valeur "42:43" il te faut faire attention aux retours à la ligne avec virgule et tiret bas. Tu as deux virgules qui se suivent donc, valeur manquante.

    Hervé.

  11. #11
    Membre confirmé
    Homme Profil pro
    Oenologue
    Inscrit en
    Juin 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Oenologue
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2011
    Messages : 79
    Par défaut
    Bonjour,
    Voilà d'où provenait l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    P = Array("5:7", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20:21" _
        , "25", "26", "28:30", "31", "32", "33", "34:35", "39", "40", "41", "42:43", _
        , "44", "45", "48", "49")
    Je tiens à vous remercier tous les deux car sans vous je pense que j'aurais galéré longtemps...Sclarckone pour le temps qu'il m'a consacré et ses remarques pertinentes et aussi pour m'avoir aiguillé sur l'array et la suppression des retours à la ligne et Theze pour les deux virgules successives et la valeur manquante.
    Merci, résolu

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

Discussions similaires

  1. erreur d'exécution '7' : mémoire insuffisante
    Par Popeye63 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 06/10/2010, 12h37
  2. [LV 8.2] Mémoire insuffisante sur appel .exe
    Par 0live dans le forum LabVIEW
    Réponses: 2
    Dernier message: 04/08/2010, 13h27
  3. Mémoire insuffisante sur le serveur pour traiter cette commande
    Par Cr@zyDeep dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 04/06/2008, 11h34
  4. Mémoire insuffisante sur le PDA
    Par patsolaar dans le forum Windows Mobile
    Réponses: 3
    Dernier message: 25/03/2008, 12h47
  5. "Mémoire insuffisante" sur Win98
    Par slimjoe dans le forum Delphi
    Réponses: 14
    Dernier message: 22/06/2006, 19h47

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