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

  • Votes
  • Date
  • Date décroissante
  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"
    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
      1. Éric le problème est que la feuille ne sera jamais activé.
        1. Contributeur
          Bon, si tu ne veux pas tout lire...
          Abandon du suivi
        2. J'ai bien lu ce que tu dis mais cette worksheet ne sera jamais activé!
      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)
        1. Probablement excellent le seul problème je commence dans le domaine alors pourrais tu m'expliquer comment je doit l'inscrire svp.
          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 
            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. Contributeur
                Ce que j'ai écris au-dessus ne t'interesse pas du tout ?
                eric