IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Accéder à un tableau dont on ne connait pas le nom


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut Accéder à un tableau dont on ne connait pas le nom
    Bonjour le forum,

    Voilà j'ai pas mal de feuille dans mon classeur, chacune de ces feuilles contient un tableau (ListObject). J'ai créé le contenu de ces feuilles par copier/coller. Donc les noms de tableaux ont été renommé par Excel.

    J'aimerais donc écrire une macro me permettant de renommer dynamiquement ces tableaux. Mais le hic, comment accéder/manipuler un tableau dont on ne connait pas le nom ?

    J'avais pensé à qqchose du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub RenomerTableau()
     
    Dim Feuille As Sheets
     
    For Each Feuille In ThisWorkbook.Sheets
     
        'Code permettant de renommer le tableau présent sur cette feuille
     
    Next Feuille
     
    End Sub
    Merci d'avance pour l'aide !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Si tu parle de zone nommées (Nom), tu peux parcourir la collection comme par exemple ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub Test()
     
        Dim NomTbl As Name
     
        For Each NomTbl In ThisWorkbook.Names
     
            MsgBox NomTbl.Name & vbCrLf & Range(NomTbl).Address(0, 0)
     
        Next NomTbl
     
    End Sub
    Hervé.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut
    Bonjour à toi,

    Un tableau Excel, donc un ListObject dans vba, c'est considéré comme une plage nommée ?

    Je viens de tester ton code mais malheureusement, absolument rien ne se passe

    Je viens de checker aussi le gestionnaire de nom et en effet, les tableaux sont bien repris comme des plages nommées ... Donc comment se fait-il que ton code ne donne aucun résultat ?


    Merci pour ta réponse

    Re encore,

    J'ai finalement trouvé la solution, je la poste ici

    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
    Public Sub RenomerTableau()
     
    Dim i As Integer
    Dim NomTableau As String
     
        With ThisWorkbook
            For i = 3 To ThisWorkbook.Worksheets.Count
     
                NomTableau = "Tableau" & Replace(.Worksheets(i).Name, " ", "")
     
                Worksheets(i).ListObjects(1).Name = NomTableau
                Debug.Print Worksheets(i).ListObjects(1).Name
     
            Next i
        End With
     
    End Sub
    Bonne journée !

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub oo()
    Dim L As ListObject
    Dim Sh As Worksheet
        For Each Sh In ThisWorkbook.Worksheets
            For Each L In Sh.ListObjects
                MsgBox L.Name & " " & Sh.Name
            Next L
        Next Sh
    End Sub

    EDIT : je pense qu'il est plus rapide de boucler sur la collection ListObjects ... ta proposition postée en même temps part du postulat que tes ListObjects ont un nom qui commence par "Tableau" ... donc avec des Tableaux renommés personnellement ça ne fonctionnera pas

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut
    Re Joe,

    En fait je pense que ton code a une portée plus générale: dans le cas où il y a plusieurs ListObject/Tableaux par feuille.

    Par contre, je ne recherche pas par tableau commençant "Tableau", c'est ma manière de le renommer: "Tableau" + (Nom de la feuille) sans les espaces.

    Le postulat que je fais est qu'il n'y a qu'un seul tableau par page à partir de la troisième page


    Mais je remercie au passage car ton code me servira pour un autre cas de figure où là j'ai bel et bien plusieurs tableaux :p

    C.

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    ma proposition peut être utilisée également si tu n'as qu'un seul Tableau par Feuille

    regarde comment gérer les deux cas :

    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
    Sub oo()
    Dim i As Integer
    Dim Sh As Worksheet
     
        For Each Sh In ThisWorkbook.Worksheets
            ' feuille avec 1 tableau
            If Sh.ListObjects.Count = 1 Then
     
                ' traitement du tableau
                MsgBox Sh.ListObjects(1).Name & " dans la feuille " & Sh.Name
     
            Else ' feuille avec plusieurs tableaux
     
                ' balayage des tableaux
                For i = 1 To Sh.ListObjects.Count
     
                    'traitement de chaque tableau
                    MsgBox Sh.ListObjects(i).Name & " dans la feuille " & Sh.Name & " qui contient " & Sh.ListObjects.Count & " tableaux"
     
                Next i
            End If
        Next Sh
    End Sub

    ton défaut est de ne jamais penser "collection" et l'ensemble des méthodes/propriétés associées, j'ai l'impression

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut
    Re,


    En tout cas, ce n'est pas parce que je ne veux pas mais parce que je ne connais pas encore : p

    Même si je vois plus ou moins ce que tu veux dire, est-ce que tu sais étayer un peu plus et m'expliquer/illustrer ce que tu dis ? Que je sache quelle démarche de réflexion il faut que j'adopte à l'avenir ?

    Bien à toi,

    C.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/04/2014, 23h45
  2. Réponses: 12
    Dernier message: 21/03/2008, 11h52
  3. Réponses: 6
    Dernier message: 20/12/2007, 15h04
  4. Réponses: 9
    Dernier message: 27/07/2007, 08h49
  5. [algorythmie] remplir un tableau dont on ne connait pas encore la taille
    Par d_token dans le forum Collection et Stream
    Réponses: 27
    Dernier message: 26/09/2006, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo