Tableau selectionné après tri sur colonne / Scroll vers fin du tableau

Bonsoir à tous,

Encore une nuit dans le VBA, du coup j'ai deux questions pour vous ce soir

1) J'ai un "bug" anodin mais perturbant et j'aimerai comprendre ce que j'ai loupé dans mon code. A l'ouverture de mon fichier, je vire les filtres laissés par les utilisateurs et remet la table d'équerre en triant sur une colonne, ceci pour la "Table_SP" sur la Feuille "Spécial" et la "Table_STD" sur la Feuille "Standard", ensuite je fais un petit username test pour la lecture seule et j'active la feuille "Gestion". Rien de bien méchant. J'ai remarqué que mes deux tables étaient complètement sélectionnées après cette ouverture, est-ce normal ?

2) Je voulais scroller vers la fin de la "Table_STD" pour éviter aux utilisateurs de devoir le faire, j'ai voulu ajouter un mais Application.Goto Reference:=Range("A" & .ListRows.Count), Scroll:=True à la fin de mon With [Table_STD].ListObject Cela fonctionne mais cela semble également s'appliquer à ma feuille "Gestion" que j'active en fin de macro, car je me retrouve tout en bas de cette page, j'ai encore raté quelque chose ?

Voici le code utilisé :

Option Explicit
Private Sub Workbook_Open()

    'Déclaration des variables
    Dim User As Byte

    Application.ScreenUpdating = False

    With Spécial
        .Unprotect "****"
        With [Table_SP].ListObject
            If Not .AutoFilter Is Nothing Then .AutoFilter.ShowAllData
            With [Table_SP].ListObject.Sort
                .SortFields.Clear
                .SortFields.Add Key:=[Table_SP].ListObject.ListColumns("Numéro d'offre").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
            .Range.AutoFilter Field:=.ListColumns("Statut de l'offre").Index, Criteria1:="En cours"
        End With
    .Protect "****", AllowFiltering:=True
    End With

    With Standard
        .Unprotect "****"
        With [Table_STD].ListObject
            If Not .AutoFilter Is Nothing Then .AutoFilter.ShowAllData
            With [Table_STD].ListObject.Sort
                .SortFields.Clear
                .SortFields.Add Key:=[Table_STD].ListObject.ListColumns("Numéro d'AR").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
        .Protect "****", AllowFiltering:=True
    End With

    With Données
        .Unprotect "****"
        With [Table_Employés].ListObject.Sort
            .SortFields.Clear
            .SortFields.Add Key:=[Table_Employés].ListObject.ListColumns("Prénom").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        With [Table_Planification].ListObject.Sort
            .SortFields.Clear
            .SortFields.Add Key:=[Table_Planification].ListObject.ListColumns("Catégorie").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        With [Table_Client].ListObject.Sort
            .SortFields.Clear
            .SortFields.Add Key:=[Table_Client].ListObject.ListColumns("Client").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        .Protect "****", AllowFiltering:=True
    End With

    Gestion.Activate
    Gestion.Range("A1").Select
    Application.ScreenUpdating = True

    'Lecture seule selon utilisateur
    Application.DisplayAlerts = False
    User = Application.IfError(Application.Match(Environ("username"), [Table_Utilisateurs].ListObject.DataBodyRange, 0), 0)
    If User = 0 Then User = Application.IfError(Application.Match(Environ("username"), [Table_Administrateurs].ListObject.DataBodyRange, 0), 0)
    If User = 0 Then
        ThisWorkbook.ChangeFileAccess xlReadOnly
    Else
        If MsgBox("Voulez-vous ouvrir le fichier en lecture seule ?", vbQuestion + vbYesNo + vbDefaultButton2, "Lecture seule") = vbYes Then ThisWorkbook.ChangeFileAccess xlReadOnly
    End If
    Application.DisplayAlerts = True

End Sub

Merci à tous.

Bonjour Heelflip, le forum,

Sans fichier, difficile de t'apporter une réponse précise...

Application.Goto Reference:=Range("A" & .ListRows.Count), Scroll:=True

Il faut préciser sur quelle feuille tu souhaite cette instruction..

A tester:

Dim Standart As Worksheet
  Set Standart = Sheets("Standart")
   With Standart
    Application.Goto Reference:=.Range("A" & .[Table_STD].ListObject.ListRows.Count + 1), Scroll:=True
   End With

Tu noteras le . (point) devant Range qui lie l'instruction à la feuille grâce au With....

13classeur1.xlsm (27.11 Ko)

Cordialement,

Bonjour Heelflip, xorsankukai,

si le TS ne commence pas dans la cellule A1

Sub test2()
     'ce n'est pas nécessaire que le TS commence sur la première ligne et/ou colonne de la feuille
     With Range("Table_STD").ListObject      'dans un module normal = sans préciser la feuille
          Application.Goto .Range.Cells(.Range.Rows.Count, 1), 1
     End With
End Sub

Bonsoir à vous deux.

En effet le "." devant le range arrange tout...

J'ai utilisé un peu des deux Application.Goto Reference:=.Range.Cells(.Range.Rows.Count - 20, 1), Scroll:=True

Cela permet d'afficher les 20 dernière lignes pour bosser dessus. Problème N°2 réglé merci.

Pour le premier soucis, j'ai ajouté un Range("A1").Select sur les deux tables et comme cela plus de soucis

Sub test2()
     'ce n'est pas nécessaire que le TS commence sur la première ligne et/ou colonne de la feuille
     With Range("Table_STD").ListObject      'dans un module normal = sans préciser la feuille
          Application.Goto .Range.Cells(application.max(1,.Range.Rows.Count-20), 1), 1
     End With
End Sub

problème 1

Application.CutCopyMode = False ?????

En effet j'aurais pu utiliser CutCopyMode

Rechercher des sujets similaires à "tableau selectionne tri colonne scroll fin"