mémoire pile inssufisante erreur d'exécution 28

roybaf

XLDnaute Occasionnel
Bonjour le forum,

J'ai une macro qui me donne une erreur d'exécution sur 2007 :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

 Dim tablo, i As Long, t
 tablo = [c3:c500]
 For i = 1 To UBound(tablo)
   t = tablo(i, 1)
   If Not (IsEmpty(t) Or IsError(t)) Then _
      If IsNumeric(Replace(t, ".", ",")) _
        Or IsNumeric(Replace(t, ",", ".")) _
          Then tablo(i, 1) = Val(Replace(t, ",", "."))
 Next
 [c3:c500] = tablo
 End Sub
C'est une macro de JOB75 et je précise qu'elle tourne sur du 2010.

Quelqu'un aurait-il une piste?

Merci.
 

ROGER2327

XLDnaute Barbatruc
Re : mémoire pile inssufisante erreur d'exécution 28

Bonjour roybaf,


Cette procédure s'appelle elle-même et ne comporte pas de clause d'interruption : une fois lancée, elle ne s'achèvera donc jamais. Permettez-moi de douter que job75 ait réellement écrit cette procédure !

Pour éviter le bouclage indéfini, vous pouvez écrire :​
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo, i As Long, t
    tablo = [C3:C500]
    For i = 1 To UBound(tablo)
        t = tablo(i, 1)
        If Not (IsEmpty(t) Or IsError(t)) Then
            If IsNumeric(Replace(t, ".", ",")) Or IsNumeric(Replace(t, ",", ".")) Then
                tablo(i, 1) = Val(Replace(t, ",", "."))
            End If
        End If
    Next
    Application.EnableEvents = False
    [C3:C500] = tablo
    Application.EnableEvents = True
 End Sub
Reste à voir l'intérêt de cette procédure...​



ROGER2327
#6467


Samedi 28 Gueules 140 (Sainte Hylactor et Pamphagus - fête Suprême Quarte)
4 Ventôse An CCXXI, 3,8528h - troêne
2013-W08-5T09:14:48Z
 
Dernière édition:

Gareth

XLDnaute Impliqué
Re : mémoire pile inssufisante erreur d'exécution 28

Bonjour,

Je n'ai malheureusement pas Excel 2007 pour tester mais d'apres ce que je comprends de ce que fait cette macro ce code devrait faire la meme chose :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Application.Intersect(Target, [c3:c500]) Is Nothing Then Range("c3:c500").Replace What:=IIf(Application.International(xlDecimalSeparator) = ".", ",", "."), Replacement:=".", LookAt:=xlPart
Application.EnableEvents = True
End Sub
Sous réserve du type de données dans la zone [c3:c500]
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
949
Réponses
1
Affichages
977
Réponses
7
Affichages
816

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG