Code qui fait crasher excel??

Code qui fait crasher excel?? - VB/VBA/VBS - Programmation

Marsh Posté le 22-10-2010 à 00:43:11    

Bonjour,
j'essaye d'exécuter le code suivant directement dans ma feuille de calcul, mais il fait immédiatement crasher excel 2007. Sauriez-vous pourquoi ?? :
 
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    'Macro Dan pour Kiriko le 21/10/2010
    If Not Intersect(Target, Columns("A:A" )) Is Nothing Then
    Target = UCase(Target)
    End If
    If Not Intersect(Target, Columns("B:B" )) Is Nothing Then
    Target = Application.Ceiling(Target, 0.25)
    End If
    End Sub
 
Merci par avance de l'aide que vous pourriez m'apporter....

Reply

Marsh Posté le 22-10-2010 à 00:43:11   

Reply

Marsh Posté le 22-10-2010 à 10:27:39    

Hello
 
Je n'ai pas de crash d'excel sous 2007
Parcontre, comme ton second If ne teste pas si c'est du texte de saisi, Excel renvoie une erreur si on saisit du texte en colonne B


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 19-11-2010 à 10:36:04    

C'est la récursivité de ton évenement qui peut faire planter.
 
Target = UCase(Target) reprovoque l'évenement  
Worksheet_Change

Reply

Marsh Posté le 19-11-2010 à 13:48:35    

Salut, pas de crash sous 2002 (?) mais sous 2007 oui, avec msg d'erreur suivant
Erreur d'éxécution -2147417848(80010108)
La méthode '_Default' de l'object 'Range' a échoué avec arrêt sur Target = UCase(Target)
cela quand on efface le contenu d'une cellule de la colonne A : cellule vierge ou pas
 
Remplacer par


    If Not Intersect(Target, Columns("A:A" )) Is Nothing Then
        If Not IsEmpty(Target) Then
            Target = UCase(Target)
        End If
    End If


qui semble fonctionner

Message cité 1 fois
Message édité par kiki29 le 19-11-2010 à 13:49:02
Reply

Marsh Posté le 19-11-2010 à 13:54:25    

kiki29 a écrit :

Salut, pas de crash sous 2002 (?) mais sous 2007 oui, avec msg d'erreur suivant
Erreur d'éxécution -2147417848(80010108)
La méthode '_Default' de l'object 'Range' a échoué avec arrêt sur Target = UCase(Target)
cela quand on efface le contenu d'une cellule de la colonne A : cellule vierge ou pas
 
Remplacer par


    If Not Intersect(Target, Columns("A:A" )) Is Nothing Then
        If Not IsEmpty(Target) Then
            Target = UCase(Target)
        End If
    End If


qui semble fonctionner


 
L'interret de l'intersect me parait bizare :D
ça serait pas plus simple comme ça ? :
 
 


    If Target.Column = 1 And Not IsEmpty(Target.Value) Then
        Target.Value = UCase(Target.Value)
    End If


 
et rajouter le .Value c'est plus propre...


Message édité par Xxxaaavvv le 19-11-2010 à 13:55:24
Reply

Marsh Posté le 19-11-2010 à 13:57:00    

Salut, sans aucun doute , je ne me suis préoccupé que du code donné et non de son optimisation, de même pour le 2eme Intersect


    If Not Intersect(Target, Columns("B:B" )) Is Nothing Then
        If IsNumeric(Target) Then
            Target = Application.Ceiling(Target, 0.25)
        End If
    End If


ce qui avec ta remarque opportune donne


    If Target.Column = 2 And IsNumeric(Target.Value) Then  
        Target.Value = Application.Ceiling(Target.Value, 0.25)
    End If  


Message édité par kiki29 le 19-11-2010 à 14:01:28
Reply

Marsh Posté le 19-11-2010 à 14:02:58    

je pense qu'il faut enlever le "Not"
mais je ne suis pas sur, je ne connais pas la fonction Ceiling
 


    If Target.Column = 2 And IsNumeric(Target.Value) Then  
        Target.Value = Application.Ceiling(Target.Value, 0.25)
    End If  


 
 
Edit : oups :p


Message édité par Xxxaaavvv le 19-11-2010 à 14:03:16
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed