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 :

listObject et listObjects - Rendre un tableau indépendant de la feuille où il se trouve [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut listObject et listObjects - Rendre un tableau indépendant de la feuille où il se trouve
    Bonjour à tous,

    Mes combobox son sur la feuille "FormulaireHeure" (Feuil1), et mes données sont sur la feuille "ListeText"(Feuil3).
    La partie de code qui "anime" les combobox sont donc sur Feuil1(FormulaireHeure).
    Je voudrais arriver à ne plus mentionner le nom de la feuille "ListeText" en dur dans le code:
    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
     
    Private Sub CB_NumAff_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim numAff As Variant, c As Range
    Debug.Print "CB_NumAff.ListCount: " & Me.CB_NumAff.ListCount
        If KeyCode = 13 Then  'And Me.CB_NumAff.ListIndex >= 0
            numAff = Me.CB_NumAff.Value
     
            'Ce qui fonctionne:
            Set c = Sheets("ListeText").ListObjects("T_Affaire").DataBodyRange.Find(numAff)
     
            'Ce que je voudrais obtenir:
            Set c = ThisWorkbook.[T_Affaire].DataBodyRange.Find(numAff)
     
     
            MsgBox c.Row
            Set c = Nothing
        End If
    End Sub
    J'ai compris qu'un tableau structuré est un objet "ListObjets" qui appartient à la collection "ListObjet" appartenant à l'objet "WorkSheet" de la collection....
    Mais je ne comprends pas le concept de collection...

    Au final ma question est comment rendre l'appel d'un "listObjects" indépendamment de la feuille où il se trouve?
    Je cherche à pouvoir déplacer le tableau sur une autre feuille sans à avoir à rechercher et modifier dans le code tout les ' Sheets("listeText") par le nom de la nouvelle feuille.

    J'espère avoir été explcite...
    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour vous affranchir du parent de l'objet ListObjet (lWorksheet), vous pouvez utiliser l'instruction Range("Nom du Tableau") qui renvoie un objet Range qui représente la propriété DataBodyRange de l'objet ListObject

    Autrement dit si le tableau structuré nommé t_MyData se trouve dans la feuille nommée maFeuille
    Range("t_MyData"), c'est l'équivalent de Worksheets("maFeuille").LIstObjects("t_MyData").DataBodyRange

    et pour répondre à votre question
    Mais je ne comprends pas le concept de collection...
    Une collection regroupe, tout objet de même nature et se caractérise dans sa syntaxe par un s final.
    Worksheets(1) est un objet de type Worksheet qui représente la première feuille de la collection Worksheets

    Pour en savoir plus sur l'objet ListObject, ses méthodes et propriétés, je ne peux que vous conseiller la lecture de Excel: Les tables de données en VBA
    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
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    Bonjour Philippe,
    j'ai essayé d'appliquer votre démonstration sans succès:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub tatita()
    Dim numAff As Variant, c As Range
            numAff = "3137"
            Set c = Range("T_Affaire").Find(numAff)
            MsgBox c.Row
            Set c = Nothing
    End Sub
    Le fait est que dans un module "hors feuille" cela fonctionne très bien, mais dans un module 'Feuil1(maFeuille)' Excel me renvoie une erreur 1004, erreur défini par l'application ou par l'objet.

    Alors j'ai essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub tatita()
    Dim numAff As Variant, c As Range
            numAff = "3137"
            Set c = Worksheets.Parent.Range("T_Affaire").Find(numAff)
            MsgBox c.Row
            Set c = Nothing
    End Sub
    Sans succès... erreur 438 ou 424 ( avec Worksheets.Parent.Range("T_Affaire").Find(numAff) ou Worksheet.Parent.Range("T_Affaire").Find(numAff) )

    Je suppose que le souci est de l'arborescence des collections et objets... Mais je n'en comprends pas les mécanismes...

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le fait est que dans un module "hors feuille" cela fonctionne très bien, mais dans un module 'Feuil1(maFeuille)' Excel me renvoie une erreur 1004, erreur défini par l'application ou par l'objet.
    Si vous avez écrit la procédure dans un module feuille et que le tableau ne se trouve pas dans cette feuille, c'est tout à fait normal

    Vous devez alors écrire une procédure avec paramètres que vous placez dans un module standard et qui sera invoquée depuis votre procédure événementielle
    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
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    C'est normal à partir du moment où ton range n'est pas positionné sur la feuille dont tu pilotes le module.

    Normalement, un module de feuille ne devrait rien faire d'autre que de gérer la feuille dont il est le module. Si tu as besoin de code qui triture d'autres feuilles (ou des plages placées sur d'autres feuilles), tu devrais déporter ton code dans un module standard et l'appeler de la feuille que tu pilotes.

    Par exemple, si tu as un listobject "t_Données" sur Feuil1 et que tu veux rechercher une donnée dans cette plage au départ de Feuil2, tu devrais utiliser une fonction dans un module standard qui renvoie la cellule trouvée et utiliser cette cellule au sein de Feuil2.

    Dans le module standard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function getCell(Value) As Range
      Set getCell = Range("t_Données").Find(Value)
    End Function

    Dans Feuil2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Dim r As Range
     
      Set r = getCell(Target.Value)
      If Not r Is Nothing Then MsgBox r.Address
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par weetoz Voir le message
    [...]
    J'ai compris qu'un tableau structuré est un objet "ListObjets" qui appartient à la collection "ListObjet" appartenant à l'objet "WorkSheet" de la collection....
    Mais je ne comprends pas le concept de collection...[...]
    C'est l'inverse: Un tableau structuré est un ListObject (sans s à la fin) qui fait partie de la collection ListObjects (avec s à la fin) d'une feuille. Une collection est simplement un ensemble d'éléments de même nature. Si tu as plusieurs tableaux structurés sur une feuille, cette feuille contient une collection ListObjects qui reprend tous les tableaux structurés de la feuille.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    Bonjour et merci Pierre,

    c'est déjà plus clair

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

Discussions similaires

  1. [Toutes versions] ListObject ListRows et Tableau
    Par pascal_sautot dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 08/02/2017, 14h34
  2. Rendre un jar indépendant de ses lib extern
    Par moris113 dans le forum NetBeans
    Réponses: 4
    Dernier message: 20/07/2007, 14h21
  3. Modèles : Rendre un tableau modifiable
    Par sevenweb dans le forum Dreamweaver
    Réponses: 2
    Dernier message: 07/06/2007, 12h23
  4. Probleme pour rendre un programme indépendant
    Par Flow_75 dans le forum C++Builder
    Réponses: 10
    Dernier message: 18/04/2007, 07h25
  5. Rendre un tableau inextensible sous ie?
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 23/12/2005, 10h49

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