Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

annuler une action macro private

2 réponses
Avatar
Freedo
Bonjour =E0 toutes et =E0 Tous,
Avec l'aide du NG, j'avais recu la macro suivante et=20
j'aimerais la modifier pour que la macro se d=E9sactive d=E8s=20
que la derni=E8re cellule de la colonne de travail aura =E9t=E9=20
d=E9pass=E9e mais si l'on reste vers le haut du tableau sans=20
d=E9passer la derni=E8re cellule de la colonne de travail la=20
macro resterait active.=20
Merci de suivre,
Freedo
voici la macro :
Private Sub Worksheet_SelectionChange(ByVal Target As=20
Range)
Dim Adr As Range
Dim MaPlage As Range, maRef As Range
Dim memoEvents As Boolean
Dim decalage As Integer
Set MaPlage =3D Range("h:h") 'plage de travail
Set maRef =3D Range("g:g") 'plage de r=E9f=E9rence
decalage =3D MaPlage.Column - maRef.Column 'd=E9calage entre=20
la plage de travail et la plage de r=E9f=E9rence
If Not Intersect(MaPlage, Target) Is Nothing Then
If Selection.Cells.Count > 1 Then Exit Sub
If ActiveCell.Address =3D Range("h1").Address Then
Set MaPlage =3D Nothing ' lib=E8re l'espace m=E9moire
Set maRef =3D Nothing ' lib=E8re l'espace m=E9moire
Exit Sub
End If
With maRef
memoEvents =3D Application.EnableEvents
Application.EnableEvents =3D False
Set Adr =3D .Find("*", Range(ActiveCell.Offset(-1, -
decalage).Address), , , , xlNext)
Adr.Offset(0, decalage).Select
Application.EnableEvents =3D memoEvents 'conserve l'=E9tat=20
ant=E9rieur FALSE ou TRUE
End With
End If
Set MaPlage =3D Nothing ' lib=E8re l'espace m=E9moire
Set maRef =3D Nothing ' lib=E8re l'espace m=E9moire
End Sub

2 réponses

Avatar
Julien
Bonjour,

Pour que la macro ne fonctionne qu'entre les ligne 10 et 100, par ex,
modifie le code de la manière suivante :

Private Sub Worksheet_SelectionChange(ByVal Target As
Range)
Dim Adr As Range
Dim MaPlage As Range, maRef As Range
Dim memoEvents As Boolean
Dim decalage As Integer

If Target.Row < 10 Or Target.Row > 100 Then Exit sub

Set MaPlage = Range("h:h") 'plage de travail
Set maRef = Range("g:g") 'plage de référence
...
Suite de ton traitement
...
End Sub





"Freedo" a écrit dans le message de
news:08bb01c490d2$dca7e8a0$
Bonjour à toutes et à Tous,
Avec l'aide du NG, j'avais recu la macro suivante et
j'aimerais la modifier pour que la macro se désactive dès
que la dernière cellule de la colonne de travail aura été
dépassée mais si l'on reste vers le haut du tableau sans
dépasser la dernière cellule de la colonne de travail la
macro resterait active.
Merci de suivre,
Freedo
voici la macro :
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)
Dim Adr As Range
Dim MaPlage As Range, maRef As Range
Dim memoEvents As Boolean
Dim decalage As Integer
Set MaPlage = Range("h:h") 'plage de travail
Set maRef = Range("g:g") 'plage de référence
decalage = MaPlage.Column - maRef.Column 'décalage entre
la plage de travail et la plage de référence
If Not Intersect(MaPlage, Target) Is Nothing Then
If Selection.Cells.Count > 1 Then Exit Sub
If ActiveCell.Address = Range("h1").Address Then
Set MaPlage = Nothing ' libère l'espace mémoire
Set maRef = Nothing ' libère l'espace mémoire
Exit Sub
End If
With maRef
memoEvents = Application.EnableEvents
Application.EnableEvents = False
Set Adr = .Find("*", Range(ActiveCell.Offset(-1, -
decalage).Address), , , , xlNext)
Adr.Offset(0, decalage).Select
Application.EnableEvents = memoEvents 'conserve l'état
antérieur FALSE ou TRUE
End With
End If
Set MaPlage = Nothing ' libère l'espace mémoire
Set maRef = Nothing ' libère l'espace mémoire
End Sub
Avatar
Bonjour Julien,
merci pour ta solution et bien que les limites imposées
fonctionnent bien ce n'était pas le but recherché mais
seulement désactiver la macro dès que la dernière cellule
de la colonne de travail est dépassée ou bien dès que le
curseur revient en haut du tableau après dépassement
en fait, à partir du moment où j'ai déjà introduit toutes
données dans la colonne de travail et que j'arrive à la
dernière cellule +1 , la macro doit se désactiver une fois
pour toute car le but de la macro est de sauter les lignes
vides de la plage de référence pour une saisie plus rapide
lors de longs documents.Donc une fois toutes saisies
faites, la macro ne doit plus être active.(mais pas
supprimée)
Voilà , j'espère avoir donné un peu plus d'info pour
comprendre la macro.
Merci de suivre,
Freedo
-----Message d'origine-----
Bonjour,

Pour que la macro ne fonctionne qu'entre les ligne 10 et
100, par ex,

modifie le code de la manière suivante :

Private Sub Worksheet_SelectionChange(ByVal Target As
Range)
Dim Adr As Range
Dim MaPlage As Range, maRef As Range
Dim memoEvents As Boolean
Dim decalage As Integer

If Target.Row < 10 Or Target.Row > 100 Then Exit sub

Set MaPlage = Range("h:h") 'plage de travail
Set maRef = Range("g:g") 'plage de référence
....
Suite de ton traitement
....
End Sub





"Freedo" a écrit
dans le message de

news:08bb01c490d2$dca7e8a0$
Bonjour à toutes et à Tous,
Avec l'aide du NG, j'avais recu la macro suivante et
j'aimerais la modifier pour que la macro se désactive dès
que la dernière cellule de la colonne de travail aura été
dépassée mais si l'on reste vers le haut du tableau sans
dépasser la dernière cellule de la colonne de travail la
macro resterait active.
Merci de suivre,
Freedo
voici la macro :
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)
Dim Adr As Range
Dim MaPlage As Range, maRef As Range
Dim memoEvents As Boolean
Dim decalage As Integer
Set MaPlage = Range("h:h") 'plage de travail
Set maRef = Range("g:g") 'plage de référence
decalage = MaPlage.Column - maRef.Column 'décalage entre
la plage de travail et la plage de référence
If Not Intersect(MaPlage, Target) Is Nothing Then
If Selection.Cells.Count > 1 Then Exit Sub
If ActiveCell.Address = Range("h1").Address Then
Set MaPlage = Nothing ' libère l'espace mémoire
Set maRef = Nothing ' libère l'espace mémoire
Exit Sub
End If
With maRef
memoEvents = Application.EnableEvents
Application.EnableEvents = False
Set Adr = .Find("*", Range(ActiveCell.Offset(-1, -
decalage).Address), , , , xlNext)
Adr.Offset(0, decalage).Select
Application.EnableEvents = memoEvents 'conserve l'état
antérieur FALSE ou TRUE
End With
End If
Set MaPlage = Nothing ' libère l'espace mémoire
Set maRef = Nothing ' libère l'espace mémoire
End Sub


.