Préambule
Avant d’aborder le sujet qui traitera de l'exportation partielle de colonnes en tirant profit des formules du tableau structuré nous allons voir comment créer un code de quelques lignes pour consulter les mouvements d’un article en ayant comme plage source un objet ListObject (tableau structuré) et comme plage cible un objet Range.
Cette procédure est basée sur la méthode AdvancedFilter de l’objet Range.
Scénario
Le but est de consulter les mouvements de stock (Achats, Ventes ou les deux) pour un article défini dans une feuille nommée Consultation
Illustration
Présentation des trois feuilles utilisées pour l’exportation
N’est pas repris sur cette illustration
La feuille nommée Article qui contient un tableau structuré nommé T_Article et dont la première colonne nommée Ref sert de référence à la liste déroulante de la cellule E2
Cette feuille sert également de référence à la fonction RECHERCHEV présente dans les cellules I2:I3 de la feuille [Consultation] pour aller chercher les informations (Libellé, Prix). de l’article sélectionné mais cette partie est hors sujet pour ce billet qui ne concerne que la partie exportation.
Organisation des données
Pour l'utilisation du filtre avancé (méthode AdvancedFilter)
La zone des données : Tableau structuré seul présent dans la feuille dont la propriété CodeName est shtMvt
La zone des critères : Plage nommée areaCriteria avec comme portabilité la feuille de consultation
La zone cible : plage nommée areaTarget
La sélection dynamique des critères
La sélection des critères est faite dans une plage de cellules nommée
pQuestion (plage
E2:E3) présente dans la feuille de Consultation
E2 : La référence de l’article : sélectionné grâce à une liste déroulante avec comme formule
=INDIRECT("T_Article[Ref]")
E3 : Le type de mouvement : est le résultat de la sélection dans une liste déroulante des valeurs "
Vente", "
Achat", "
Achat/Vente" présentent dans la feuille nommée [
Param]
Code de la procédure
Le code est contenu dans la procédure événementielle nommée Worksheet_Change de la feuille [Consultation]
1 2 3 4 5 6 7 8 9
| Private Sub Worksheet_Change(ByVal Target As Range)
' Ne réagit à l'événement que s'il y a changement dans la plage nommée "pQuestion"
If Not Application.Intersect(Target, Range("pQuestion")) Is Nothing Then
Application.EnableEvents = False ' Désactive l'interception d'événements
' Exportation des données suivant critères
shtMvt.ListObjects(1).Range.AdvancedFilter xlFilterCopy, Range("areacriteria"), Range("areatarget")
Application.EnableEvents = True ' Active l'interception d'événements
End If
End Sub |
A lire
Pour bien comprendre
Classeur à télécharger
le classeur ayant servi à préparer cette contribution
[EDIT]
Attention Avant de déposer mon classeur; j'ai effacé par erreur la ligne qui désactive la procédure événementielle (Ligne 4), et j'ai effectué un copier/coller sans modifier la valeur de l'argument (True)
Application.EnableEvents = False ' Désactive l'interception d'événements
Même s'il n'y a pas de risque, pour ceux qui ont téléchargé le classeur il y a lieu de faire cette modification.
L'erreur est corrigée dans le code et j'ai joint un nouveau classeur.
Partager