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 :

Boucler sur les en-tête d'un tableau


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 Boucler sur les en-tête d'un tableau
    Bonjour à vous,

    Tout est dans le titre pour une fois, je souhaite boucler sur les en-tête d'un tableau car elles sont communes à des en-tête d'un autre tableau.

    Ce bout de code ne fonctionne pas ... Pourquoi ?

    Au passage, je vous mets la suite de la boucle car je ne sais pas pourquoi, mais je sens qu'elle va planter aussi donc si qqchose vous saute au yeux... :p

    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
     
    Dim Cell As Range, Cell1 as Range
    Dim TblExt As ListObject, TblProv as ListObject, TblInt as ListObject
     
    Set TblProv = Sheets("Données Provisoires Formations").ListObjects("TableauDonnéesProvisoiresFormations")
    Set TblExt = Sheets("ExtractionsFormations").ListObjects("TableauExtractionsFormations")
    Set TblInt = Sheets("Intermédiaire Formation").ListObjects("TableauEtatInscriptions")
     
    i = TblInt.ListColumns(1).DataBodyRange.Cells.Count
     
    '#### Ligne problématique #####
    For Each Cell In TblExt.ListRows(1)  'Pour chacune des en-tête "utiles",
     
    j = 1
        For Each Cell1 In TblInt.ListColumns(Cell).DataBodyRange.SpecialCells(xlCellTypeVisible) 'On récupère tous les résultats de tri
     
            TblProv.ListColumns(Cell).DataBodyRange.Cells(i + j, 1) = Cell1 'Et on les place dans le tableau provisoires
            j = j + 1
     
        Next Cell1
    Next Cell
    Merci à vous

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Bonjour,

    conformément aux règles du forum, quelle est précisément la question, la difficulté rencontrée, le but ?

    Car « ne fonctionne pas » est par trop vague !


    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  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 169
    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 169
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Et cette fois ci, c'est un tableau type ListObject ou bien une plage de cellules de type Range ?

    Si c'est un tableau type ListObject voir dans le code que je t'ai donné dans cette discussion à la ligne 8 de la procédure.
    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é
    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
    De fait, je m'en excuse

    L'erreur qui s'affiche est: "L'indice n'appartient pas à la sélection". Avec Debug.Print j'ai pu identifier le problème:

    La ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Cell In TblProv.ListRows(1).Range
    Me fait boucler sur la première ligne du tableau et non sur la ligne des en-têtes ... Donc comment, boucler sur la ligne des en tête pour en récupérer le nom ?


    Merci pour l'aide

  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 169
    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 169
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Est-ce que tu lis les réponses que l'on donne ?
    Tu trouveras la propriété adéquate à la ligne 8 du code qui se trouve dans le lien que je t'ai donné dans ma réponse précédente.

    Fais au moins tourner cette procédure pour comprendre
    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é
    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 Philippe,

    Je n'avais pas vu ton message entre temps. C'est de fait exactement ça qu'il me fallait, ça fonctionne parfaitement. Par contre quand j'ai mis le ".Adress" ça n'a pas fonctionné ... Mais pourquoi ?


    Sinon j'ai un deuxième problème, mais un tout petit petit :p

    Mon filtrage de tableau ne fonctionne pas ... Aucun des NNI de mes agents n'est "coché" dans le menu déroulant de filtrage de la colonne "NNI" alors que je les ai tous stockés dans le NNIS ... comment cela se fait-ce ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim NNIS(50) As String
     
    i = 0
     
    For Each Cell In TblAgent.ListColumns("NNI").DataBodyRange
        NNIS(i) = Cell
        i = i + 1
    Next Cell
     
        '######## Tri sur les tableaux ###########
     
    Worksheets("Intermédiaire Formation").ListObjects("TableauEtatInscriptions").Range.AutoFilter _
        Field:=Range("TableauEtatInscriptions[NNI]").Column, Criteria1:=NNIS

  7. #7
    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 169
    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 169
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Par contre quand j'ai mis le ".Adress" ça n'a pas fonctionné ... Mais pourquoi ?
    Avec deux d
    Mais afficher l'adresse d'un objet n'est pas la même chose que parcourir celui-ci.
    Petit rappel tbl est une variable objet de type ListObject
    Dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox tbl.HeaderRowRange.Address
    La propriété HeaderRowRange renvoie un objet Range donc dans cette ligne, on affiche l'adresse de celui-ci
    Alors que dans ces lignes, tu affiches les valeurs des cellules de ce range en le parcourant avec la boucle For Each...In
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim cell As Range
     For Each cell In tbl.HeaderRowRange
      MsgBox cell.Value
     Next
    [EDIT]
    Je voudrais tout de même préciser pour qu'il n'y ait pas d'ambiguïté, qu'une boucle For Each...In parcourt une collection ou un tableau (plusieurs cellules)
    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

  8. #8
    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 Qu'est-ce que .Address
    ReBonjour Philippe,


    De fait quand j'avais essayé sans, aucun problème ça fonctionnait. Et en fait je pensais que .Address était un Range, mais de fait, pas du tout, c'et un String et c'est l'expression de expression.Address qui est le Range !


    En tout cas, merci pour l'explication

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

Discussions similaires

  1. Enlever le tri sur les en-tête d'un DataGrid
    Par Destiny dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/03/2007, 14h28
  2. [VBA/Excel] Boucler sur les colonnes
    Par jefe.k dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 23/02/2007, 08h42
  3. moyenne sur les valeurs d'un même tableau
    Par DelphLaga dans le forum Langage
    Réponses: 12
    Dernier message: 25/09/2006, 11h35
  4. Boucler sur les numero champs
    Par totoche dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 30/08/2006, 06h29
  5. [VB.NET] Boucler sur les checkbox de mon formulaire
    Par malhivertman1 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/08/2006, 10h51

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