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 :

Comment déclarer une plage dans un tableau en VBA [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    métreur en architecture
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : métreur en architecture
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut Comment déclarer une plage dans un tableau en VBA
    Bonjour,
    Je veux me servir de la fonction Countif pour rechercher dans un tableau (listobject) le nombre d'occurences entre ma 1ère ligne de tableau et ma cellule sélectionnée (Target), mais je ne parviens pas à déclarer le range. : est-ce que c'et possible à faire ?
    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 170
    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 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Bien entendu
    Pour déclarer une variable objet Tableau Structuré, c'est par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oList As ListObject
    Set oList = Range("T_maTable").ListObject
    Les propriétés qui renvoient un objet Range
    Toute la table, c'est Range
    Uniquement les données c'est dataBodyRange
    Les données d'une colonne, c'est ListColumns("Nom de l'étiquette").DataBodyRange

    C'est une façon de le faire, mais il y en a d'autres

    Exemple
    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
    Sub t()
     Dim oList As ListObject
     Dim oRange As Range
     Dim oDataRange As Range
     Dim oColumnName As Range
     Dim txt As String
     Set oList = Range("T_MyTable").ListObject
     With oList
       Set oRange = .Range
       Set oDataRange = .DataBodyRange
       Set oColumnName = .ListColumns("Nom").DataBodyRange
     End With
     txt = "Table complète : " & oRange.Address
     txt = txt & vbCrLf & "Uniquement les données : " & oDataRange.Address
     txt = txt & vbCrLf & "La colonne des noms : " & oColumnName.Address
     MsgBox txt
     Set oList = Nothing
     Set oRange = Nothing
     Set oDataRange = Nothing
     Set oColumnName = Nothing
    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
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Homme Profil pro
    métreur en architecture
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : métreur en architecture
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    Merci Philippe Tulliez, je regarde ça dès que j'ai 5 minutes.

  4. #4
    Membre averti
    Homme Profil pro
    métreur en architecture
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : métreur en architecture
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    Du coup, j'essaie de mettre ça en forme avec WorksheetFunction.CountIf() mais je n'arrive pas à y déclarer ma plage
    j'ai essayé avec ça et come par magie... ça ne marche pas

    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
    Sub Numero_auto(ByVal Target As Range)
    Dim Num_Titre as integer
    Dim MaPlage as Range
    Dim Debut as Range
    Dim Fin as Range
    Dim oList as ListObject
     
    Set oList = Range("Electricite1").ListObject
    Set Debut = oList.DataBodyRange.Rows(1)
    Set Fin = Target.Row
    Set MaPlage = Range(Debut,Fin)
     
    Num_Titre = WorksheetFunction.CountIf(MaPlage, "[MB] Titre")
    MsgBox(Num_Titre)
     
    End Sub

  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 170
    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 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je vous donne la manière de définir une plage de colonne et je ne vois nulle part l'application de ce que j'ai donné comme réponse. Pourquoi les variables debut et fin
    Dans cette ligne, Num_Titre = WorksheetFunction.CountIf(MaPlage, "[MB] Titre"), qu'essayez-vous de dénombrer ?

    [EDIT]
    Dans l'illustration ci-dessous, j'affiche les valeurs au-dessus de 10 dans la colonne dont l'étiquette est Qté du tableau structuré nommé T_Stock et il n'y a pas de magie, cela fonctionne.

    Le code de la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub t()
      Dim oList As ListObject
      Dim oColumnRange As Range
      Dim fn As WorksheetFunction
      Set oList = Range("T_Stock").ListObject
      Set oColumnRange = oList.ListColumns("Qté").DataBodyRange
      Set fn = Application.WorksheetFunction
      '
      MsgBox fn.CountIf(oColumnRange, ">10")
      '
      Set oList = Nothing: Set oColumnRange = Nothing: Set fn = Nothing
    End Sub
    On peut faire plus court
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub t()
      Dim oColumnRange As Range
      Dim fn As WorksheetFunction
      Set oColumnRange = Range("T_Stock[Qté]")
      Set fn = Application.WorksheetFunction
      '
      MsgBox fn.CountIf(oColumnRange, ">10")
      '
      Set oColumnRange = Nothing: Set fn = Nothing
    End Sub
    et encore plus court
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
      Dim fn As WorksheetFunction
      Set fn = Application.WorksheetFunction
      '
      MsgBox fn.CountIf(Range("T_Stock[Qté]"), ">10")
      '
      Set fn = Nothing
    End Sub
    On pourrait bien entendu se passer également de la variable fn mais la question initiale était "Comment déclarer une plage dans un tableau en VBA"

    Nom : ListObject CountIf.png
Affichages : 419
Taille : 27,1 Ko
    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 averti
    Homme Profil pro
    métreur en architecture
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : métreur en architecture
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Dans cette ligne, Num_Titre = WorksheetFunction.CountIf(MaPlage, "[MB] Titre"), qu'essayez-vous de dénombrer ?
    j'essaie de compter le nombre de fois où "[MB] Titre" apparait dans la colonne "Forme" entre la 1ère ligne du tableau et la ligne dans laquelle j'ai ma cellule sélectionnée.

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

Discussions similaires

  1. Comment trouver une valeur dans un tableau ?
    Par wizou44 dans le forum Excel
    Réponses: 20
    Dernier message: 29/08/2008, 10h57
  2. Réponses: 1
    Dernier message: 29/07/2008, 22h40
  3. Réponses: 4
    Dernier message: 17/01/2008, 17h06
  4. Réponses: 1
    Dernier message: 24/04/2007, 17h20
  5. Comment déclarer une DataSource dans server.xml
    Par guillaume06 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 16/06/2004, 14h27

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