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 :

Boucle sur lignes tableau structuré [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de LG-69
    Homme Profil pro
    Analyste statisticien
    Inscrit en
    Juillet 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste statisticien

    Informations forums :
    Inscription : Juillet 2014
    Messages : 162
    Par défaut Boucle sur lignes tableau structuré
    Bonjour,

    Je me suis lancé dans une macro mais je m'y perds un peu...

    J'ai un tableau structuré qui se nomme "Export_jira", il a pas mal de colonnes, celles qui m'intéressent sont :
    - en position 62 : "Anciennete"
    - en position 2 : "reference"

    Ce que je veux faire c'est boucler sur mon tableau, chaque fois que la valeur en colonne "Anciennete" prend la valeur "Nouvelle", je vais déclencher une action en récupérant la valeur de la colonne "reference" (dans l'exemple je fais juste une Msgbox mais j'aurai d'autres actions à faire)

    J'ai fait le code ci-dessous qui fonctionne mais je mets "en dur" les positions des colonnes, ce qui est nul sachant que mes colonnes ont de vrais noms mais je n'arrive pas à remplacer par des noms, je ne sais pas quelles fonctions/attributs utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        For Each ligne In Range("Export_jira").Rows
           If ligne.Cells(62).Value = "Nouvelle" Then
                MsgBox (ligne.Cells(2))
           End If
        Next
    Je ne fais que très peu de VBA et ne suis pas très habitué à la notion "d'objet" alors je m'y perds un peu quand ça devient compliqué... j'ai trouvé des infos sur les Listobjects, les range,... mais je m'y perds...
    Je suis donc preneur pour un petit coup de main pour adapter ma macro.

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour LG, bonjour le forum,

    Peut-être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim C As Range
     
    For Each C In Range("Export_jira[Anciennete]")
       If C.Value = "Nouvelle" Then
            MsgBox (C.Offset(0, -60).Value)
       End If
    Next

  3. #3
    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 166
    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 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai fait le code ci-dessous qui fonctionne mais je mets "en dur" les positions des colonnes, ce qui est nul sachant que mes colonnes ont de vrais noms mais je n'arrive pas à remplacer par des noms, je ne sais pas quelles fonctions/attributs utiliser
    Pour connaître le numéro de colonne d'un tableau structuré en indiquant le nom de l'étiquette, on utilise la propriété Index de la collection ListColumns
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ThisWorkbook.Worksheets("db").ListObjects(1).ListColumns("civil").Index
    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

  4. #4
    Membre confirmé Avatar de LG-69
    Homme Profil pro
    Analyste statisticien
    Inscrit en
    Juillet 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste statisticien

    Informations forums :
    Inscription : Juillet 2014
    Messages : 162
    Par défaut
    Je vous remercie tous les deux,

    J'ai transformé mon code pour récupérer les index des deux colonnes qui m'intéressent, puis en replaçant mes valeurs en dur par les index que j'ai trouvé. Ca fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        colonne_nouvelle = Worksheets("general_report").ListObjects("Export_jira").ListColumns("Anciennete").Index
        colonne_réference = Worksheets("general_report").ListObjects("Export_jira").ListColumns("reference").Index
        For Each ligne In Range("Export_jira").Rows
           If ligne.Cells(colonne_nouvelle).Value = "Nouvelle" Then
                MsgBox (ligne.Cells(colonne_réference))
           End If
        Next
    Je me serais attendu à pouvoir récupérer directement la bonne cellule en nommant la colonne concernée sur ma ligne mais sans doute que ce n'est pas le bon type d'objet. Après l'important c'est d'avoir quelque chose qui fonctionne avec un code compréhensible.

    J'ai quand même une question complémentaire : on est obligé de préciser la feuille (worksheet) sur laquelle est le tableau ? Si je ne mets pas, que j'utilise directement "Listobjects", ça plante. Pourtant mon tableau est bien déclaré au niveau du classeur, pas au niveau de la feuille de calcul me semble-t-il ?

  5. #5
    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 166
    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 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai quand même une question complémentaire : on est obligé de préciser la feuille (worksheet) sur laquelle est le tableau ? Si je ne mets pas, que j'utilise directement "Listobjects", ça plante. Pourtant mon tableau est bien déclaré au niveau du classeur, pas au niveau de la feuille de calcul me semble-t-il ?
    La collection ListObjects est lié à la feuille tout comme PivotTables donc oui, il faut préciser l'objet feuille. C'est d'ailleurs ainsi que l'on peut savoir si une feuille contient un ou plusieurs tableaux en utilisant la propriété Count
    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

  6. #6
    Membre confirmé Avatar de LG-69
    Homme Profil pro
    Analyste statisticien
    Inscrit en
    Juillet 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste statisticien

    Informations forums :
    Inscription : Juillet 2014
    Messages : 162
    Par défaut
    ok merci pour votre aide et réponses
    Je peux donc clore ce sujet.

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

Discussions similaires

  1. Explication pour une boucle sur un tableau ( débutant)
    Par serna dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/04/2015, 10h44
  2. [XL-2007] Boucle sur un tableau nommé
    Par thorgal1612 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/11/2014, 10h10
  3. [XL-2010] Boucle sur un tableau
    Par octane dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/05/2013, 02h47
  4. Boucle sur un tableau de variable en SQL
    Par sekaijin dans le forum Débuter
    Réponses: 4
    Dernier message: 27/01/2010, 20h52
  5. [Tableaux] Boucle sur un tableau associatif
    Par alexfrere dans le forum Langage
    Réponses: 11
    Dernier message: 28/06/2006, 15h44

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