Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
J'ai un fichier excel qui a 1 feuille qui contient un tableau avec 3 colonnes : Intitulé; prix; catégarie
Dans mon second fichier, j'ai 1 onglet par jour calendrier, avec des colonnes : Description; prix; catégorie et autre
Dans la colonne prix j'ai la formule =+SI(ESTVIDE(D6);" ";RECHERCHEV(D6;'[Donnees_Liste_Produits.xlsx]Liste des produits'!$A$1:$C$799;2;0))
Le souci, j'ai la référence au tableau $A$1:$C$799 qui ne suit pas le maximum de lignes si je rajoute des produits dans mon tableau , ici 799 alors que j'ai 810 lignes
Comment faire pour que le nbre de lignes se met à jour automatiquement ?
Bonjour à toutes et à tous, @Electronull , j'ai donc fait une (grosse) adaptation pour faire fonctionner cela avec les versions antérieures à Excel 2021 et 365.
Cela passe par des macros et des noms définis.
J'ai sorti du classeur modèle la création des journaux pour un mois donné à partir du modèle.
J'ai enlevé toutes les macros et événements qui ne servaient pas à notre propos pour que ce soit plus clair à lire.
Il y a maintenant 3 classeurs
Les données : "Données_Liste_Produits.xlsm" (sans liaisons)
Le modèle : "Modèle Journal de ventes.xlsm" (avec liaisons vers les données à mettre à jour après l'import des fichiers joints)
Le générateur de journal ; "Générer Nouveau Journal.xlsm" (à utiliser...
si le "tableau" qui est dans "[Donnees_Liste_Produits.xlsx]Liste des produits" est un tableau structuré les références devraient ressembler à ça Tableau1[[nom_col_1]:[nom_col_2]] et alors ça suit le nombre de ligne
Bon, j'ai rectifiéune erreur de ma part pour lea référence au tableau de données
J'avais mis le nom et nom la plage qui est T_Produits
=+SI(ESTVIDE(D6);" ";RECHERCHEV(D6;Donnees_Liste_Produits.xlsx!T_Produits[#Données];2;0))
MAIS comme vous le voyez, j'ai entre crochets [#Données] c'est quoi ce trucs ?
Ca fonctionne mais j'aimerais savoir pourquoi il y a ceci
Bonjour à toutes et à tous, bonjour @Electronull
Malheureusement les références aux adresses structurées ne sont pas interprétées quand le fichier source est fermé (on obtient alors des #REF!)
Par contre, un nom défini faisant référence à une plage de cellules (du style feuil1!$A$2:$G$16) est lui interprété même si le classeur source est fermé.
La solution consiste à ajouter une petite ligne dans l'événement Worksheet_Change de la feuille contenant le tableau structuré pour mettre à jour un nom défini (disons "MaSource") qui couvre le TS à chaque fois que celui ci est modifié :
Si ton tableau structuré s'appelle "tb"
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([tb], Target) Is Nothing Then ThisWorkbook.Names.Add Name:="MaSource", RefersTo:=[tb]
End Sub
Tu ouvres les deux fichiers et dans le fichier cible tu places des formules du style
Code:
=RECHERCHEV(A2;WbkSOURCE.xlsm!MaSource;4;FAUX)
"WbkSOURCE.xlsm" étant le nom du classeur contenant le tableau structuré "tb"
Re,
Reste le problème que j'évoque dans le post #7, quand on ferme le fichier source, si l'on utilise le nom du tableau, on obtient des #REF! lors du recalcul...
D' où ma proposition de mise à jour d'un nom défini qui se réfère à une adresse (celle du TS)
À bientôt
Re,
Merci pour tes fichiers AtTheOne, j'ai la même chose, pourtant je dois quand même ouvrir mon fichier source pour avoir les articles dans ma liste déroulante dans le fichier cible.
Je cherche
Cette solution utilise les formules matricielles dynamiques disponibles dans les version 2021 et ultérieures.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
La parade est un peu la même qu'au post#7 : Définir dans la classeur source un nom qui fait référence, par une adresse, à ta liste de choix.
En supposant que la liste de choix soit la colonne "Col1" du TS "tb" de la feuille "Données".
J'ai ajouté une feuille "Tables" au fichier source "WbkSOURCE b.xlsm" avec une liste des choix possibles (formule matricielle dynamique =TRIER(UNIQUE(tb[col1]) par exemple) dans une cellule nommée "Liste" (ici $A$2).
On obtient une liste triée des valeurs uniques de Col1. (alors Liste# fait référence au résultat de la formule matricielle dynamique.
Ensuite j'ai ajouté une ligne à la macro Worksheet_Change de la feuille de données :
Enrichi (BBcode):
Private Sub Worksheet_Change(ByVal Target As Range)If Not Intersect([tb], Target) Is Nothing Then ThisWorkbook.Names.Add Name:="MaSource", RefersTo:=[tb]If Not Intersect([tb[col1]].EntireColumn, Target) Is Nothing Then ThisWorkbook.Names.Add Name:="MaListeSource", RefersTo:=[Liste#]End Sub
Cette ligne de code met à jour le nom défini "MalisteSource" à chaque changement dans la colonne "Col1" (on surveille tout changement dans la colonne entière en cas de suppression de ligne en fin du tableau "tb")
Dans le fichier cible j'ai créé une feuille "Tables" dans une cellule de laquelle (ici $A$2) je fait référence au nom "MaListeSource" du classeur "WbkSource b.xlsm" (='WbkSOURCE b.xlsm'!MaListeSource).
J'ai nommé cette cellule "MaListeCible"
Maintenant dans les cellules où je veux une liste de choix j'ai mis une validation de données, Autoriser : liste, source : =MaListeCible#
Cette manipulation, un peu élaborée, permet de conserver la liste de choix même quand le fichier source est fermé.
Remarque : lorsque l'on ouvre le fichier cible Excel émet un message avertissement informant l'existance de liaison extérieures, ce qui est normal, accepter la mise à jour.
Pour toi utiliser mon exemple, il faudra mettre à jour les liaisons en modifiant la source (car actuellement ces liaisons pointent sur un de mes répertoires 😉
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD