Commande vba excel

Résolu
Bonjour,

Voici ma commande :

Private Sub Worksheet_Activate()
Range("A1:c800").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range _
("c1"), Order2:=xlDescending, Key3:=Range _
("b1"), Order3:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
:=False, Orientation:=xlTopToBottom
Range("A9").Select
End Sub

Le seul problème est que ma feuille n'est jamais activée alors je pourrais changer Private Sub Worksheet_Activate() par quoi ?

8 réponses

  1. Quelque chose comme :

    Private Sub Workbook_Open()
    Range("A1:c800").Select
    Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range _
    ("c1"), Order2:=xlDescending, Key3:=Range _
    ("b1"), Order3:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
    :=False, Orientation:=xlTopToBottom
    Range("A9").Select
    End Sub

    mais il me manque la partie ou j'identifie la feuille "Base de donnée"
    0
    1. Contributeur
      Bonjour,

      ta feuille sera activée si tu en sélectionnes une autre et que tu la re-sélectionne.

      Sinon tu as d'autres évèments utilisables : change, selectionChange et voire même ajouter un bouton.

      Tout dépend quand et comment tu désires rafraichir ton tri.

      Par exemple avec :
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          If Target = [A1] Then
              'ton code
          End If
      End Sub
      ton tri se fera si tu sélectionnes A1.

      eric
      0
      1. Éric le problème est que la feuille ne sera jamais activé.
        0
        1. Contributeur
          Bon, si tu ne veux pas tout lire...
          Abandon du suivi
          0
        2. J'ai bien lu ce que tu dis mais cette worksheet ne sera jamais activé!
          0
      2. Salut,
        Pourquoi ne pas insérer un petit
        Worksheets("Base de données").Activate
        dans la macro s'exécutant à l'ouverture du classeur ?

        Edit : Je viens de voir une réponse de eljojo_e sur un autre sujet :
        Après si tu veux pas voir l'autre feuille, tu peux mettre
        Application.ScreenUpdating = False
        Peut-etre est-ce ce que tu cherches ?
        (Pour que ça fonctionne il faut bien sûr mettre le rafraîchissement avant l'activate)
        0
        1. Probablement excellent le seul problème je commence dans le domaine alors pourrais tu m'expliquer comment je doit l'inscrire svp.
          0
          1. Eh bien dans ton code tu rajoutes ces deux lignes, ce qui donne :

            Private Sub Workbook_Open() 
            
            Application.ScreenUpdating = False
            Worksheets("Base de données").Activate
            Range("A1:c800").Select 
            Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range _ 
            ("c1"), Order2:=xlDescending, Key3:=Range _ 
            ("b1"), Order3:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _ 
            :=False, Orientation:=xlTopToBottom 
            
            End Sub 
            0
            1. Private Sub Workbook_Open()
              Worksheets("Base de donnée")
              Range("A1:c800").Select
              Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range _
              ("c1"), Order2:=xlDescending, Key3:=Range _
              ("b1"), Order3:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
              :=False, Orientation:=xlTopToBottom
              Range("A9").Select
              End Sub

              Dans le fond c'est quelque chose comme ça que je veux mais il doit manquer un petit quelque chose
              -1
              1. Contributeur
                Ce que j'ai écris au-dessus ne t'interesse pas du tout ?
                eric
                0