Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

nom à une plage


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    nom à une plage
    Bonjour,
    Je voudrais, que lorsque l'on change de feuille, que ce bout de code fonctionne afin d'attribuer un nom à une plage.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Worksheets("DATA").Sort.SortFields.Clear
    Worksheets("DATA").UsedRange.Sort key1:=Range("A1"), order1:=xlAscending, DataOption1:=xlSortTextAsNumbers, _
                            key2:=Range("L1"), order2:=xlAscending, dataoption2:=xlSortNormal, _
                            Header:=xlYes
    
    ThisWorkbook.Worksheets("DATA").UsedRange.Select
      Names.Add Name:="TABDATA", RefersTo:="=" & ThisWorkbook.Worksheets("DATA").Name & "!" & Selection.Address
        Range("A1").Select


    Il bloque à la ligne en gras et je ne sais pas pourquoi car si je le lance simplement, ,cela fonctionne.
    Merci pour votre aide.

  2. #2
    Membre expert
    Citation Envoyé par rossemma Voir le message
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Worksheets("DATA").Sort.SortFields.Clear
    Worksheets("DATA").UsedRange.Sort key1:=Range("A1"), order1:=xlAscending, DataOption1:=xlSortTextAsNumbers, _
                            key2:=Range("L1"), order2:=xlAscending, dataoption2:=xlSortNormal, _
                            Header:=xlYes
    
    ThisWorkbook.Worksheets("DATA").UsedRange.Select
      Names.Add Name:="TABDATA", RefersTo:="=" & ThisWorkbook.Worksheets("DATA").Name & "!" & Selection.Address
        Range("A1").Select


    Il bloque à la ligne en gras et je ne sais pas pourquoi car si je le lance simplement, ,cela fonctionne.
    Est-ce le même classeur ?
    Ligne 1 et 2 c'est le classeur actif, ligne 6 c'est le classeur qui contient la macro !
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Membre du Club
    oui c'est le même classeur.
    classeur actif.

    a mon sens quand je désactive la feuille, la ligne Select (ligne6) bloque car je sors de la feuille.

  4. #4
    Rédacteur

    Bonjour,
    On ne répétera jamais assez qu'il ne sert à rien, sauf cas exceptionnel, d'utiliser en VBA, les méthodes Select, Activate, etc
    En effet il est impossible de sélectionner la plage d'une feuille qui n'est pas active

    Un exemple qui fonctionne (à condition bien entendu que la feuille existe dans le classeur ThisWorkbook )
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     Dim rng As Range
     Set rng = ThisWorkbook.Worksheets("Data").UsedRange
     MsgBox rng.Address(External:=True)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

  5. #5
    Membre du Club
    j'ai modifié le code
    cela semble correct ?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub worksheet_deactivate()
     
    Call tri
     
    End Sub
     
    Sub tri()
     
    Dim rng As Range
    Dim wsh As Object
    Set wsh = ThisWorkbook.Worksheets("DATA")
    Set rng = wsh.UsedRange
        Debug.Print rng.Address(External:=True)
     
    wsh.Sort.SortFields.Clear
    rng.Sort key1:=Range("A1"), order1:=xlAscending, DataOption1:=xlSortTextAsNumbers, _
                key2:=Range("L1"), order2:=xlAscending, dataoption2:=xlSortNormal, _
                Header:=xlYes
     
    rng.Select
      Names.Add Name:="TABDATA", RefersTo:="=" & wsh.Name & "!" & Selection.Address
        Range("A1").Select
     
    End Sub

  6. #6
    Rédacteur

    Ce message n'a pas pu être affiché car il comporte des erreurs.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

  7. #7
    Membre du Club
    Merci cela fonctionne
    Pq object ? car j'ai repris cette ligne d'une autre code perso.

    petite question :
    dans mon tableau, a la demande de mon chef il y aura une somme en dernière ligne et je ne souhaite pas qu'elle soit reprise.
    comment lui dire de ne pas tenir compte de cette ligne pour le tri et pour le nom de la plage ?

  8. #8
    Rédacteur

    Bonjour,
    Pq object ? car j'ai repris cette ligne d'une autre code perso.
    Sauf cas particulier, Il est préférable de définir l'objet explicitement. Cela facilite la programmation puisque tu bénéficies du intellisense

    dans mon tableau, a la demande de mon chef il y aura une somme en dernière ligne et je ne souhaite pas qu'elle soit reprise.
    comment lui dire de ne pas tenir compte de cette ligne pour le tri et pour le nom de la plage ?
    La propriété Resize permet de redimensionner une plage de cellules

    Exemple En supposant que la plage de cellules commence à B4 et que la dernière ligne contient les totaux (le fait qu'il y ait des totaux n'a évdidemment rien à voir)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub t4()
      Dim sht As Worksheet
      Dim rng As Range
      Dim txt As String
      Set sht = ThisWorkbook.Worksheets("Feuil11")
      Set rng = sht.Range("B4").CurrentRegion
      '
      With rng
       txt = "Avt = " & .Address(External:=True)
       Set rng = .Resize(.Rows.Count - 1)
      End With
      txt = txt & vbCrLf & "Apr = " & rng.Address(External:=True)
      MsgBox txt
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

  9. #9
    Membre du Club
    merci beaucoup
    j'ai adapté et cela fonctionne parfaitement

  10. #10
    Rédacteur

    Bonjour,
    Magnifique.
    Manifestement d'après tes explications tu n'utilises pas les tableaux structurés. Tu aurais intérêt à t'y intéresser car c'est nettement plus intéressant à utiliser et également à programmer.

    A lire éventuellement Apprendre à utiliser les tableaux structurés Excel : création, manipulations et avantages(1)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA