petit problemes VBA

excellentt

XLDnaute Nouveau
Pas faciles les demarrages...

Je bute depuis maintenant 1 semaine sur une macro.

Je commence par enregistrer une macro puis l'execute. ca marche...

ensuite je recopie le code de cette macro dans une private sub worksheet que voici


Private Sub Worksheet_Change(ByVal target As Range)

Dim i As Integer

Dim Plage As Range, Intersection As Range

Set Plage = Range("B9:B55")
Set Intersection = Application.Intersect(Plage, target)

If Not (Intersection Is Nothing) Then
i = 9
For i = 9 To 55 Step 1

If Cells(i, 8).Value = "OK" Then

If IsNumeric(Cells(i, 7)) Then

If Cells(i, 7).Value < Cells(4, 2).Value Then

Range(Cells(i, 1), Cells(i, 7)).Select
Selection.Copy
Sheets("portefeuille- compte").Activate

Range("A9").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Rows("9:9").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown

Else
End If
Else
End If

Else
End If
Next i
Cells(1, 1).Select
Selection.Copy
End If
end sub

Lors de l'execution de cette "private sub" tout marche jusqu'a

Range("A9").Select

Ou il me dit que la methode Select de la class range deconne...

Je ne comprends pas car dans la macro seule tout va bien.

Voila mon probleme ( qui est certanement que le premier d'ue longue liste a venir....)


Merci pour votre aide
 

jp14

XLDnaute Barbatruc
Re : petit problemes VBA

Bonjour

Le couple "select sélection" que l'on obtient en utilisant l'enregistreur de macro ne pose pas de problème si on se met dans le contexte de l'enregistreur, mais dès que on l'utilise dans des procédures différentes il génère des erreurs.

Il faut supprimer ce couple et tester.

Quand on utilise des procédures évènementielle il faut mettre le code suivant
Code:
....................
dim toto as range
Application.EnableEvents = False
...............................
Application.EnableEvents = True 
end sub
pour éviter que la procédure s'appelle elle même.
Si on utilise "exit sub" il faut mettre Application.EnableEvents = True avent le point de sortie de la procédure
JP
 
Dernière édition:

jp14

XLDnaute Barbatruc
Re : petit problemes VBA

Bonjour (re)

N'ayant pas l'environnement pour tester

Ci dessous du code corrigé a tester
Code:
Private Sub Worksheet_Change(ByVal target As Range)
Dim i As Integer
Dim Plage As Range, Intersection As Range
Application.EnableEvents = False
Set Plage = Range("B9:B55")
Set Intersection = Application.Intersect(Plage, target)

If Not (Intersection Is Nothing) Then
i = 9
With Sheets(target.Worksheet.Name)
For i = 9 To 55 Step 1

If .Cells(i, 8).Value = "OK" Then
 'If IsNumeric(.Cells(i, 7)) Then
 'If .Cells(i, 7).Value < .Cells(4, 2).Value Then
.Range(.Cells(i, 1), .Cells(i, 7)).Copy
' sous toute réserve
Sheets("portefeuille- compte").Range("A9").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Sheets("portefeuille- compte").Rows("9:9").Insert Shift:=xlDown
'
Else
End If
Else
End If
Else
End If
Next i
.Cells(1, 1).Copy' ?
End With
End If
Application.EnableEvents = True
End Sub

JP
 

excellentt

XLDnaute Nouveau
Re : petit problemes VBA

Bon la macro a l'air de fonctionner normalement mais a la fin de l'execution

Excell plante systematiquement... ( depassement de memoire? ) ou autre je ne sais pas..

Microsoft Excel for Windows a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru.

C vrai que c'est desagreable....
 

jp14

XLDnaute Barbatruc
Re : petit problemes VBA

Bonjour

A priori c'est un problème de pile (stack).

En tête de module mettre

Dim flag As Boolean

Première ligne de code
If flag = True Then Exit Sub

écrire après le dernier Dim
flag = True
Application.EnableEvents = False


avant "end sub" et "exit sub"
flag = False
Application.EnableEvents = True

A tester

JP
 

Discussions similaires

Statistiques des forums

Discussions
312 231
Messages
2 086 442
Membres
103 210
dernier inscrit
Bay onais