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 :

[VBA]" Erreur d'exécution '28' espace pile insuffisant"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 15
    Par défaut [VBA]" Erreur d'exécution '28' espace pile insuffisant"
    Bonjour ,

    Je débute en VBA et j'aimerai corriger l'erreur de l'espace pile insuffisant. Mon but était d'afficher une MessagBox lorsque le nombre de chiffres est différent de 14 pour la colonne G (c'est le dernier paragraphe) , or quand le nombre de chiffres est différent de 14 cela m'affiche le message ci-dessous. Il arrive parfois que Excel plante...


    Nom : Sans titre.png
Affichages : 4799
Taille : 6,5 Ko

    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
    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
     
    Private Sub CommandButton1_Click()
     
    End Sub
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
    If Len(Target) > 10 Then
    Target.Value = Left(Target.Value, 10)
    End If
    End If
     
     
    If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
    If Len(Target) > 25 Then
    Target.Value = Left(Target.Value, 25)
    End If
    End If
     
     
    If Not Application.Intersect(Target, Range("D:D")) Is Nothing Then
    If Len(Target) > 70 Then
    Target.Value = Left(Target.Value, 70)
    End If
    End If
     
     
    If Not Application.Intersect(Target, Range("F:F")) Is Nothing Then
    If Len(Target) > 50 Then
    Target.Value = Left(Target.Value, 50)
    End If
    End If
     
     
    If Not Application.Intersect(Target, Range("G:G")) Is Nothing Then
    If Len(Target) <> 14 Then
    Target.Value = Replace(Target, "-", "")
    MsgBox "Le numéro doit contenir 14 chiffres !"
    End If
    If Not IsNumeric(Target) Then
    MsgBox "Veuillez entrer des chiffres uniquement"
    End If
    End If
     
     
    End Sub
    Merci d'avance pour votre aide !

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut " Erreur d'exécution '28' espace pile insuffisant"
    Je ne répond pas vraiment à la question,

    il me semble que la validation de donnée pour chaque colonne

    répondrait à ton besoin.

    bonne soirée.

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    l'erreur signifie, en simplifiant, que tu as "empilé" trop de procédures en attente dans la pile de mémoire

    ce qui ne m'étonne pas.

    dans une procédure qui se déclenche "au changement de la valeur d'une cellule", tu enchaines des conditions qui vont .... modifier la valeur de la cellule


    ainsi, tu appelles à l'infini ta procédure évènementielle dans un système de poupées russes .... le bug est certain

    tu dois désactiver les évènements lors du traitement de ta procédure évènementielle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = False
    à SURTOUT remettre à True à la fin du traitement

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    1) Prends s'il te plait le plus vite possible la bonne habitude d'indenter ton code. Cela en facilite la lisibilité
    2) prends également la bonne habitude de préciser la propriété concernée des objets que ytu utilises. VBA est tolérant, mais il lui arrive de "rouspéter"


    Tu verras qu'en précisant la propriété (Value) de l'objet range Target, tu n'auras alors plus ce message d'erreur.
    Mais tu entreras bien évidemment dans une boucle sans fin puisque tu as mis dans ton code une instruction qui, modifiant la valeur de l'objet target, lancera à nouveau l'évènement Change, etc ...
    C'est d'ailleurs ce fait (rentrer en boucle sans fin sur une erreur -celle de la propriété non précisée - qui a sacrément courroucé VBA

    EDIT : croisés, Joe.levrai
    Reste que l'empilement de ses erreurs est celui du trouble de VBA du fait de la non précision de la propriété concernée.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 15
    Par défaut
    Bonjour à tous merci pour vos réponses !

    a_diard la valdiation des données ne prend pas en compte tous les éléments de mon code comme le remplacement, mais merci tout de même.
    Joe le vrai, j'ai appliqué ta correction est ça fonctionne parfaitement bien ! Merci beaucoup !
    Unparia j'ai suivi tes conseils mais je ne suis pas sûr de comprendre pour la précision des propriétés de Target et Range, je dois déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim Target As Long
    Dim Range As (je ne sais pas quel type)
    C'est bien ça ?
    Du coup cela me donne ça:

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Application.EnableEvents = False
     
     
            If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
                If Len(Target) > 10 Then
                Target.Value = Left(Target.Value, 10)
                End If
            End If
     
            If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
                If Len(Target) > 25 Then
                Target.Value = Left(Target.Value, 25)
                End If
            End If
     
            If Not Application.Intersect(Target, Range("D:D")) Is Nothing Then
                If Len(Target) > 70 Then
                Target.Value = Left(Target.Value, 70)
                End If
            End If
     
     
            If Not Application.Intersect(Target, Range("F:F")) Is Nothing Then
                If Len(Target) > 50 Then
                Target.Value = Left(Target.Value, 50)
                End If
            End If
     
            If Not Application.Intersect(Target, Range("G:G")) Is Nothing Then
                If Len(Target) <> 14 Then
                Target.Value = Replace(Target, "-", "")
                MsgBox "Le numéro doit contenir 14 chiffres !"
                End If
                If Not IsNumeric(Target) Then
                MsgBox "Veuillez entrer des chiffres uniquement"
                End If
            End If
     
        Application.EnableEvents = True
     
    End Sub
    Merci !

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Dim Target As Long
    Dim Range As (je ne sais pas quel type)
    Target est d'un type DEJA déclaré.
    Range est déjà un objet
    Ces deux lignes n'ont aucun sens et sont à supprimer !
    C'est ce que je mets là en rouge dans ton code , qui précise les propriétés utilisées
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
             Application.EnableEvents = False
             If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
               If Len(Target.value) > 10 Then
                  Target.Value = Left(Target.Value, 10)
               End If
            End If
     
            If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
               If Len(Target.value) > 25 Then
                  Target.Value = Left(Target.Value, 25)
               End If
            End If
      
            If Not Application.Intersect(Target, Range("D:D")) Is Nothing Then
               If Len(Target.value) > 70 Then
                  Target.Value = Left(Target.Value, 70)
               End If
            End If
      
            If Not Application.Intersect(Target, Range("F:F")) Is Nothing Then
                If Len(Target.value) > 50 Then
                    Target.Value = Left(Target.Value, 50)
                End If
            End If
     
            If Not Application.Intersect(Target, Range("G:G")) Is Nothing Then
                If Len(Target.value) <> 14 Then
                  Target.Value = Replace(Target.value, "-", "")
                  MsgBox "Le numéro doit contenir 14 chiffres !"
                End If
                If Not IsNumeric(Target.value) Then
                   MsgBox "Veuillez entrer des chiffres uniquement"
                End If
            End If
     
        Application.EnableEvents = True
     
    End Sub

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 15
    Par défaut
    Ok d'accord, autant pour moi j'avais mal lu. Toujours indiquer la propriété derrière l'objet. J'ai modifié. J'en prend note, merci pour vos contributions en tout cas et merci à toi unparia

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

Discussions similaires

  1. [XL-2000] VBA Erreur 1004 espace pile insuffisant
    Par L'Albatros dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 17/07/2013, 13h34
  2. [XL-2010] Erreur d'exécution '28' Espace pile insuffisante
    Par Soph70 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/01/2011, 20h24
  3. Réponses: 1
    Dernier message: 30/05/2007, 10h41
  4. [VBA-E] Erreur d'exécution '1004'
    Par bibi5883 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/03/2007, 14h31
  5. [VBA-E] erreur d'exécution 1004 ?
    Par toy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2006, 13h15

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