Un code pour qu'un module ne se lance pas?

Bonjour à tous,

J'ai une macro qui classe (colonne I) par ordre alphabétique (colonnes A à K).

Sub TrieAZ()
'
' TrieAZ Macro

    Columns("I:I").Select
    Range("H166").Activate
    ActiveWorkbook.Worksheets("Dramas").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Dramas").Sort.SortFields.Add2 Key:=Range("I166"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Dramas").Sort
        .SetRange Columns("A:K")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Une autre macro, qui change de feuille.

Sub Change_Page_Photo()
'
' Change_Page_Photo Macro
'
    ActiveSheet.Previous.Select
    ActiveSheet.Next.Select

End Sub

Et du code dans la feuille, qui lance la macro qui change de feuille, quand je clique dans la colonne J.

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Selection.Count = 1 Then
        If Not Intersect(Target, Range("J1:J3000")) Is Nothing Then
        Application.Wait (Now + TimeValue("0:00:00"))
            Call Change_Page_Photo

  End If
  End If

 Dim ecran
 Set ecran = ActiveWindow.VisibleRange
 With ActiveSheet

 Shapes("Image 2").Left = ecran.Left + 971 ' adapter le nom de l'image et les dimensions
 Shapes("Image 2").Top = ecran.Top + 18

 End With
 End Sub

Mais quand je lance la macro qui classe par ordre, jai une erreur puisqu'apparemment la macro qui change de page se elle aussi.

capture d ecran 2025 12 07 190236

Existe-t-il une ou des lignes à mettre dans le début du code de la feuille pour empêcher le changement de page?

Merci à tous pour votre aide!

Bonsoir,

vous pouvez par exemple mettre une variable interrupteur en début de code de tri, dont vous ferez le test dans la sub de change page photo.

Variable public EnCours as boolean

Au début de la sub de tri : EnCours = true

Au debut de la sub Change page : If EnCours then Exit sub

A la fin du tri : EnCours = False

Ou bien faut revoir tout le code.

@ bientôt

LouReeD

re,

il faut éviter les "select" et "activate" quand cela n'est pas nécessaire, cela coût du temps

Sub TrieAZ()
'
' TrieAZ Macro

    application.enableEvents=false 'bloquer les évents
    Columns("I:I").Select 'est-ceci vraiment nécessaire ????
    Range("H166").Activate 'idem
   application.enableEvents=true ' l'inverse
    ActiveWorkbook.Worksheets("Dramas").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Dramas").Sort.SortFields.Add2 Key:=Range("I166"), ......
    

Bonjour,

Merci pour vos aides!

C'est parfait! Il y a certainement des lignes en trop, mais ça fonctionne.

Sub TriAZ()
    Application.EnableEvents = False
    On Error GoTo Finalize

    With Worksheets("Dramas")
        .Sort.SortFields.Clear
        ' Clé de tri : colonne I (ligne 166), sans sélectionner
        .Sort.SortFields.Add2 Key:=.Range("I166"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        ' Applique le tri sur A:K
        .Sort.SetRange .Columns("A:K")
        .Sort.Header = xlNo
        .Sort.Apply
    End With

Finalize:
    Application.EnableEvents = True
End Sub

Merci beaucoup !

re,

je ne connais pas le contenu de votre feuille, mais si c'est un tableau structuré, on peut faire ceci. Normallement, il n'y a pas d'évenements après un tri et si ce TS existe, on n'aura pas d'erreurs, donc

Sub TriAZ()
     With Worksheets("Dramas").Range("I166").ListObject.Range     'le TS autour de I166
          .Sort .Range("I1"), xlAscending, Header:=xlYes
     End With
End Sub

Si ce n'est pas un tableau structuré, ce sera quelque chose pareil, mais il faut voir votre mise en page.

Re,

Pour vous faire une idée, le lien est dans le fichier:

9lien.xlsx (8.79 Ko)

C'est un peu compliqué.

J'ajoute, j'enlève, j'essaye...

je n'ouvre pas des liens inconnus.

Ok,

Merci et au revoir !

Rechercher des sujets similaires à "code module lance pas"