Arret execution intempestif

Will-e-coyote

XLDnaute Occasionnel
Bonjour el forum !

Voila, je voulais savoir si quelqu'un avait deja rencontré un code qui arretait de s'exécuter sans raison apparente. Vous fournir le fichier exemple ne servira pas a grand chose. Ce que je trouve bizarre, c'est que la meme commande fonctionne normalement dans un cas mais pas dans l'autre.
La macro, de type évenementielle (SelectionChange) contient le code suivant qui pose probleme :
Code:
    If Target.Column = 31 Then Target.Locked = Not IsEmpty(Target.Offset(0, -4))
    If Target.Column = 20 Then Target.Locked = Not IsEmpty(Target.Offset(0, -1))
Si l'on se trouve dans le premier cas, le code s'execute normalement (il y a une suite) mais lorsque l'on se trouve dans le second la procedure s'arrete apres l'execution de cette ligne.

Je dois dire que j'avais déja rencontré ce type de probleme dans cette meme procedure mais que j'ai contourné le problème en changeant légèrement le code. Par exemple le code suivant qui avait le meme comportement inattendu:
Code:
        Target.Offset(-1, 0).Copy Destination:= Target
a été remplacé par le code suivant qui lui ne pose pas problème :
Code:
        Target.Offset(-1, 0).Copy
        Target.PasteSpecial xlPasteFormulas
(Dans ce 2e cas on voit la selection de la cellule a copier en pointillé. Moins sexy mais ca marche)

Bien entendu j'ai essayé de trouver une autre solution au problème du Target.Locked mais rien ne fonctionne....

Merci par avance pour vos idées et expériences vécues....

Will
 

Pierrot93

XLDnaute Barbatruc
Re : Arret execution intempestif

Bonjour,

Code:
    If Target.Column = 31 Then Target.Locked = Not IsEmpty(Target.Offset(0, -4))
    If Target.Column = 20 Then Target.Locked = Not IsEmpty(Target.Offset(0, -1))
en l'état ce code fonctionne sous 2003...

Vous fournir le fichier exemple ne servira pas a grand chose.
si tu le dis....

bonne journée
@+
 

Will-e-coyote

XLDnaute Occasionnel
Re : Arret execution intempestif

Bonjour Pierrot


Je confirme parce-que lorsque j'ai isolé cette partie de mon appli sur un autre classeur, tout fonctionnait parfaitement, et mea culpa, mea maxima culpa, j'aurai du le mentionner dans mon premier post.

Ceci etant, cela n'enlève en rien le comportement bizarre de VBA que je ne peux donc retransmettre sans donner le fichier original, ce que je ne puis faire malheureusement pour moi....

Ma question était surtout de savoir si quelqu'un avait une explication plausible sur ce genre de comportement, sachant qu'il n'y a pas d'interactions avec d'autres macros puisqu'il s'agit quasiment de la seule....

Ceci etant dit merci quand meme pour ton post :D
 

Will-e-coyote

XLDnaute Occasionnel
Re : Arret execution intempestif

Non, ca ne fonctionne pas, j'ai mis ta suggestion juste avant (Disabling) et juste après (Enabling) et lorsque j'arrive sur ce cas precis il faut que je re-enable les évènements manuellement pour que les autres refonctionnent...:(

Mon fichier fait environ 2,5 Mo contient 5 feuilles dont une avec environ 7000 lignes sur 32 colonnes dont 7 contiennent des formules que je protège des utilisateurs qui font souvent des recopies de formules en décalant parfois les références. Je m'occupe donc de la recopie de ces formules pour m'assurer de leur intégrité.

Le code complet de cette evenementielle est le suivant:
Code:
    If Target.Row = 1 Then Exit Sub

    ' Recopie la formule lorsque manquante
    If Not Target.Offset(-1).HasFormula Then Exit Sub
    ' Offre la possibilite a l'utilisateur de saisir un taux de change non courrament usité
    ' Si la cellule monnaie est vide, la cellule taux de change est disponible pour entrée manuelle
    If Target.Column = 31 Then Target.Locked = Not IsEmpty(Target.Offset(0, -4))
    If Target.Column = 20 Then Target.Locked = Not IsEmpty(Target.Offset(0, -1))
    If Not Target.Locked Then Exit Sub
    If Cells(Target.Row, 1) = "" Then
    ' Efface la formule si la ligne est destinee a etre effacee
        If Target.HasFormula Then Target.Value = ""
    ElseIf Not Target.HasFormula Then
        Target.Offset(-1, 0).Copy
        Target.PasteSpecial xlPasteFormulas
    End If
    Beep
 

Pierrot93

XLDnaute Barbatruc
Re : Arret execution intempestif

Re,

oui, normal, tu as des "exit sub", donc ce n'est pas réinitialisé à "True".... plutôt que les "exit sub' faire des "goto fin" et en fin de procédure :
Code:
fin:
Application.EnableEvents = True
End Sub
sinon, pas d'autre idée sans pouvoir reproduire le cas...
 

Discussions similaires

Réponses
1
Affichages
128

Statistiques des forums

Discussions
312 366
Messages
2 087 643
Membres
103 627
dernier inscrit
nabil