La fonction Indirect() =Indirect(chaine)La fonction Indirect() évalue une chaîne en adresse de champ. Sur l'exemple, on veut obtenir le contenu de la cellule
B2 de l'onglet Janvier, Février, Mars,..
Si le nom de l'onglet comporte des espaces ou caractères spéciaux: =INDIRECT("'" & B5&"'!b2") Pour récupérer les noms d'onglets automatiquementS'il y a une apostrophe dans le nom de l'onglet (L'Hermitte par exemple): =SI(A5<>"";INDIRECT("'"&SUBSTITUE(A5;"'";"''")&"'!B7");"") Choix d'un tableauLa table des remises est choisie en fonction du choix Interne/Externe =RECHERCHEV(B6;INDIRECT(B3);2;VRAI) Sur l'exemple, on recherche dans le tableau Garçon ou Fille suivant le genre =INDEX((INDIRECT(B12));EQUIV(B13;sp;1);EQUIV(B14;cyl;1)) Récupération d'informations sur un autre ongletDans l'onglet Annuel, on veut obtenir en B2 le total de Jacques en Janvier =INDEX(janvier!B4:G4;EQUIV($A2;janvier!B1:G1;0)) Pour obtenir une formule recopiable =INDEX(INDIRECT(B$1&"!B4:G4");EQUIV($A2;INDIRECT(B$1&"!B1:G1");0)) Autre exemple=INDEX(INDIRECT("'"&$A2&"'!$B$2:$E$4");EQUIV(C$1;'123'!$A$2:$A$4;0);EQUIV($B2;'123'!$B$1:$E$1;0)) Indirect() /Adresse(ligne;colonne;;;feuille)Sur la feuille Recap, on veut récupérer
les quantités de Janvier,Février, .... En B2: =INDIRECT(B$1&"!"&ADRESSE(LIGNES($1:2);2)) IndirectAdresse Autre exemple L'opérateur choisit en A1 le mois (janvier,février,mars,... ) qui doit apparaître sur la feuille Accueil En B3: =INDEX(INDIRECT($A$1&"!$B$3:$B$7");EQUIV(Accueil!$A3;Janvier!$A$3:$A$7;0)) Adressage indirect vers un autre classeur ouvertLe classeur ouvert se nomme Stock.xls La formule pour adresser la cellule B2 de l'onglet Janvier de Stock.xls est: =[Stock.xls]janvier!$B$2 Avec Indirect, nous avons: =INDIRECT("["&$B$2&"]"& B6 & "!b2") Si le nom de l'onglet a des espaces ou des caractères spéciaux: =INDIRECT("'["&$B$2&"]"& B6 & "'!b2") Recherchev avec classeur ouvert variableEn B4:=RECHERCHEV(A4;INDIRECT("[Sem"&$B$1&".xls]BD!$A$2:$B$8");2;FAUX) Si en B1, on a le nom du classeur Sem45.xls, la formule devient =RECHERCHEV(A4;INDIRECT("["&$B$1&"]BD!$A$2:$B$8");2;FAUX) RechercheVclasseurOuvert Récupérer une valeur de l'onglet précédent(onglets génériques)Les noms d'onglets sont Semaine 01,Semaine 02,Semaine 03,...Pour récupérer la cellule B7 de l'onglet précédent: =INDIRECT("'Semaine " &TEXTE(DROITE(CELLULE("filename";$A$1);2)-1;"00")&"'!B7") Pour obtenir une formule copiable: =INDIRECT("'Semaine " &TEXTE(DROITE(CELLULE("filename";$A$1);2)-1;"00")&"'!"&ADRESSE(LIGNE()+1;COLONNE())) Si les noms d'onglets sont Semaine 1,Semaine 2,..., Semaine 52 =INDIRECT("'Semaine "&STXT(CELLULE("filename";$A$1);CHERCHE("]";CELLULE("filename";$A$1))+9;255)-1&"'!a7") Avec des Mois Janvier,Février,...=INDIRECT("'"&TEXTE(DATEVAL("01/"&STXT(CELLULE("filename";A1);TROUVE("]"; Avec Janvier 08, Février 08,...=INDIRECT("'"&TEXTE(DATEVAL("01/"&STXT(CELLULE("filename";A1);TROUVE("]"; Onglet suivant: OngletPrécédentMois Avec des onglets nommés 01, 02, 03,...=INDIRECT(TEXTE(DROITE(CELLULE("filename";$A$1);2)-1;"00")&"!A2") récupère A2 de l'onglet précédent Pour une formule copiable en ligne et colonne Avec des onglets nommés 1, 2, 3,...=INDIRECT(STXT(CELLULE("filename";$A$1);TROUVE("]";CELLULE("filename";$A$1))+1;99)-1&"!A2") Nom de l'onglet précédent pour des noms de feuilles génériques01,02,03,... 1,2,3,... Feuil1,Feuil2,... S1,S2,S3,.. Janvier,Février,Mars,... Semaine 01,Semaine 02,.. Noms de feuilles non génériques Dans le tableur Récupérer une valeur de l'onglet précédent avec noms d'onglets non génériquesCréer un nom de champ Nom de la page précédente Cellule A3 de la page précédente Cumul avec l'onglet précédent=INDIRECT("'Sem" &TEXTE(DROITE(CELLULE("filename";$A$1);2)-1;"00")&"'!B3")+B2 Si les noms des feuilles sont 1,2,3,.... Récapitulatif ongletsOn veut obtenir un recap des cellules B1 et D10 des différents
onglets -Créer un nom de champ: En A2:=SI(LIGNES($1:2)<=NBVAL(nf);
INDEX(nf;LIGNES($1:2));"") Autre exemple On veut récupérer les valeurs de Martin
des onglets aa,bb,cc,dd,ee,ff. ou =RECHERCHEV(B$2;INDIRECT(A5&"!$A$2:$B$10");2;FAUX) Pour obtenir les noms des onglets automatiquement: Nom de champ En A5:=SI(LIGNES($1:2)<=NBVAL(nf);INDEX(nf;LIGNES($1:2));"") Liste en cascade avec prixListeCascadePrix
Comparatif prix fournisseurRécupère dans un onglet Comparatif le dernier tarif de chaque produit pour chaque fournisseur. on peut ajouter des fournisseurs. =SI(D$6="";"";SI(ESTNA(EQUIV($A7;INDIRECT("'"&D$6&"'!$A$5:$A$16");0));""; MFC:=MIN($D7:$H7)=D7 ou =MIN(SI($D7:$H7<>0;$D7:$H7))=D7 (si numérique) ComparatifPrix Autre exempleSu un onglet Recap, on veut obtenir, pour Martin, une synthèse de ses congés (onglets Janvier,Février,Mars,..) En B4: Récupérer les valeurs des cellules B2 des feuilles du classeurPour récupérer les noms des feuilles -Créer un nom de champ: En A2:=SI(LIGNES($1:2)<=NBf;INDEX(nf;LIGNES($1:2));"") Menu déroulant avec les cellules B2 des feuilles du classeur-Créer les noms de champ: En A2: =SI(LIGNES($1:2)<=Nbf;INDIRECT(INDEX(nf;LIGNES($1:2))&"!B2");"") En D2: Données/Validation/Liste=DECALER($A$3;;;NB.SI($A$3:$A$12;"><"&"")) -Si les noms des feuilles sont génériques Mois1,Mois2,... En A2: =INDIRECT("'Mois"&LIGNE()-1&"'!b2") -Si les noms des feuilles sont Janvier,Février,... En A2: =INDIRECT(TEXTE(DATE(2009;LIGNE()-1;1);"mmmm")&"!b2") Consolidation de classeurs ouverts Résultats 01,Résultats 02,....En B1 : le nom du classeur IndirectConsolidation Si le nom de fichier est en B1seulement, la formule
est copiable en B3:C5 Si le nom de fichier est en B1 et C1, pour obtenir une formule recopiable en B3:G5 =INDEX(INDIRECT("'["&B$1&".xls]"&B$2&"'!$A$1:$I$10"); Si le nom de fichier est en B1 seulement, pour
obtenir une formule recopiable en B3:G5 Total Qte par produit/moisOn veut pour chaque produit et chaque mois le total des qte vendues. En C3: Plannning semainePermet de créer un planning de 52 semaines. En B6: =INDIRECT("'Sem " &TEXTE(DROITE(CELLULE("filename";$A$1);2)-1;"00")&"'!B6")+7 Consolidation d'ongletsConsolide les lignes No2 des onglets du classeur. Noms de champ En A2:=SI(LIGNES($1:1)<Nbf;INDIRECT("'"&INDEX(Nf;LIGNES($1:2))&"'!"&ADRESSE(2;COLONNES($A:A)));"") Listes dynamiques et IndirectIndirect() n'accepte pas les noms de champ dynamiques crées
avec Decaler(). Sur cette version, on peut ajouter des items 1- Nommer Marque =DECALER(Listes!$A$1;;;;NBVAL(Listes!$1:$1)) Liste des feuilles entre 2 feuillesOn veut obtenir la liste des feuilles entre les feuilles début cloture et fin cloture Créer un nom de champ Nf =STXT(LIRE.CLASSEUR(1);TROUVE("]";LIRE.CLASSEUR(1))+1;99)&INDIRECT("iv65000") En B4:=SI(EQUIV("début cloturé";Nf;0)+LIGNES($1:1)<EQUIV("fin
cloturé";Nf;0);INDEX(Nf;EQUIV("début cloturé";Nf;0)+ Liste des feuilles commençant par FRAPour obtenir les noms des feuilles commençant par FRA: -Créer un nom de champ NomsFeuilles: Liste des feuilles commençant par FRA Recherche du mot TotalCA: dans une feuilleOn recherche le total CA dans une feuille sans connaître la cellule où est situé le total. En B3: Récupération d'information dans un classeur fermé variableOn veut récupérer la cellule B15 de Ca2009,CA2010,Ca2011 Private Sub Worksheet_Change(ByVal Target As Range) Récupération d'un champPrivate Sub Worksheet_Change(ByVal Target As Range) Sub LitChamp(ChampOuCopier, Chemin, Fichier, onglet, ChampAlire) Ecriture dynamique d'une formule pour accéder à une information d'un classeur fermé variableLe chemin du fichier et le fichier sont variables. La fonction
Indirect() ne fonctionne pas avec un classeur fermé. Private Sub Worksheet_Change(ByVal Target As Range) Si la table de recherche dans le classeur fermé n'est pas nommée: Range(ChampFormule).Formula = _ Pour transformer les formules en valeur, ajouter Range(champFormule) = Range(champFormule).Value Liens hypertextes vers feuille suivante et feuille précédenteCréer un nom de champ =SI(EQUIV(STXT(CELLULE("filename";B1);TROUVE("]";CELLULE("filename";B1))+1;99);Nf;0)>1; =SI(EQUIV(STXT(CELLULE("filename";B1);TROUVE("]";CELLULE("filename";B1))+1;99);Nf;0)<NBVAL(Nf); Liens hypertextes suivant précédent
|
|