Prb fonction indirect

Bonsoir,

Tout d'abord, étant nouveau ici, un petit salut amical à tout le monde

Mon problème est le suivant :

J'ai récupéré un fichier xls comportant une centaine de pages (d'onglets, de "Feuill" ou de "sheets") numérotées de 1901 à 2006. Chaque page a la même structure en lignes et en colonnes.

Je veux, sur une page de calculs créer un tableau dont chaque colonne correspond à une page (donc, une centaine de colonnes). J'ai donc créé les en-têtes de colonne par remplissage automatique (1901, 1902, ... on sélectionne et on tire et hop, on a une centaine de colonnes de 1901 à 2006 qui avancent par pas de 1).

Les calculs d'une colonne ne font référence qu'à une seule feuille. Exemple de la 1ère case de la 1ère colonne :

=SOMME('1901'!C10:C29)

Comme je veux refaire ce calcul une centaine de fois à partir d'une centaine d'autres feuilles, je me suis proposé d'adresser la référence de la feuille avec la fonction INDIRECT (j'ai constaté, et je le savais déjà, qu'un adressage direct ne fonctionne pas ; du style =SOMME(C5!C10:C29) avec 1901 stocké dans C5 de ma feuille de calculs). J'ai donc tenté un =SOMME('INDIRECT("C5")'!C10:C29) et là j'ai une erreur REF de Excel. Par ailleurs, =INDIRECT("C5") me renvoie bien le contenu de C5 à savoir 1901.

Par ailleurs, en faisant mes tests directement sur INDIRECT, j'ai constaté que l'adressage relatif automatique ne fonctionne pas avec INDIRECT : Si je sélectionne deux cases adjacentes, sur la même linge, contenant respectivent =INDIRECT("C5") et =INDIRECT("D5"), en tirant pour remplir automatiquement, je n'obtiens pas =INDIRECT("D5"), etc.

Merci par avance pour votre aide et pardon si le sujet a déjà été abordé. J'ai pas mal lu l'aide de Excel sur l'utilisation de INDIRECT, pas mal lu de pages du Net, fait plein d'essais (en changeant le format des cellules -texte ou numétique), ... et je suis toujours en rade

PS : Je joins le fichier en question avec suppression de l'essentiel de ses données pour cause de poids ...

Bonjour,

tout d'abord :

Chaque page a la même structure en lignes et en colonnes.

Ce n'est pas exact, regarde bien la différence entre les 3 feuilles 1901, 1902, 1903 et les 2 feuilles 2005 et 2006...

Pour ces deux dernières, ils ont regroupés 90 ans et +, puis détaillé cette tranche de population...

Ce qui fait que tes calculs seront faux si tu utilises la même formule...

Dans ton onglet "calculs", en C6, tu peux mettre cette formule :

=SOMME(INDIRECT(C$5&"!$C$10:$C$29"))

que tu peux incrémenter vers la droite

dans la cellule C7, cette formule :

=SOMME(INDIRECT(C$5&"!$C$30:$C$69"))

également à incrémenter vers la droite

En C8:

=SOMME(INDIRECT(C$5&"!$C$70:$C$110"))

Jusqu'à l'année 1903, ensuite il faut changer...

=SOMME(INDIRECT(F$5&"!$C$70:$C$100"))

regarde bien les structures de toutes tes feuilles....

Bon courage

Merci pour ta réponse ultra-détaillée.

Je vais tester ta méthode et surtout essayer de comprendre comment tu en es arrivé à cela.

J'avais repéré les petites variations de structure dans le fichier mais je n'en avais pas fait mention pour ne pas compliquer l'explication. En tout cas, l'idée c'est que sur de grandes plages de temps, la structure est stable, donc on peut fonctionner au remplissage automatique ...

-- 03 Nov 2010, 00:37 --

Encore merci pour ta réponse et tes mises en garde. Je viens d'essayer et cela fonctionne évidemment bien. Mais j'aimerais essayer de comprendre.

# Analyse du SOMME(INDIRECT(C$5&"!$C$10:$C$29"))

=SoMME() : ok, j'ai compris ...

# Tentative d'analyse du INDIRECT(C$5&"!$C$10:$C$29") :

  • C : la colonne qui va être incrémentée en "sélectionnant tirant" (passage à D, E, etc.)
  • $5 : adressage absolu sur la ligne 5
  • & : concaténation de chaines de caractères
  • "!$C$10:$C$29" : la chaine de caractères !$C$10:$C$29 (qui correspond en adressage absolu à la plage que je veux sommer)

Donc, en fait tu concatènes C$5 et "!$C$10:$C$29"

Ce que je n'arrive pas à comprendre, c'est pourquoi tu ne concatènes pas "C$5" et "!$C$10:$C$29", ce qui donnerait :

INDIRECT("C$5"&"!$C$10:$C$29") ...

En effet, seul INDIRECT("C5") renvoie le contenu de C5 (en l'occurence 1901) !

J'ai essayé et effectivement, ma solution ne fonctionne pas ...

Il y a surement un aspect évident de INDIRECT ou des chaines de caractères que je n'ai pas saisi ...

Merci par avance pour ton aide.

Rechercher des sujets similaires à "prb fonction indirect"