Recupérer le nom des trois derniers onglets d'un autre classeur

Bonjour à Tous,

Je suis à la recherche d'une formule permettant de récupérer des valeurs se trouvant dans un autre classeur qui a x onglets représentant les semaines d'une année.

Pour faciliter mon besoin, j'ai créé un exemple avec les 2 fichiers joints.

Dans le fichier "releve" j'ai des références avec un montant. Ces informations sont enregistrées par semaine (nom de l'onglet s1,...,s21)

Dans le fichier "region", je désire récupérer le montant pour chaque référence mais des 3 derniers onglets (dans l'exemple s21,s20,S19)

Je retrouve ces valeurs avec la formule suivante : "=RECHERCHEV(A2;[releve.xlsx]S21!$A$2:$D$10;2;FAUX)"; mais je dois modifier mes formules à chaque semaine pour tenir compte de l'évolution des semaines)

Merci de me donner une modification de ma formule pour récupérer le montant de chaque référence en fonction des 3 derniers onglets.

Question subsidiaire :

J'ai essayé en mettant le chiffre de la dernière semaine dans une cellule puis en faisant des opérations et des "concatener" mais je ne sais pas quelle instruction donner dans la formule pour récupérer le contenu de la cellule ou a été fait le concat (c'est les valeurs qui sont écrites en colonne F)

18releve.xlsx (13.25 Ko)
23region.xlsx (12.27 Ko)

En vous remerciant par avance pour vos réponses

Luc

Bonsoir,

C'est possible si on utilise la fonction INDIRECT + le numéro de semaine qu'on renseigne dans une cellule, j'ai mis les formules dans le fichier.

J'isole la partie variable que je met entre & &, les & permettent de concaténer les chaines de texte constantes (nom du fichier, plage de cellules) et la partie variable (numéro de semaine) pour avoir une seule chaine de texte.

INDIRECT l'utilise pour renvoyer la plage de cellules correspondante au reste de la formule.

22region.xlsx (10.03 Ko)

Bonsoir,

Merci Ausecour pour ta réponse, cela correspond bien à la deuxième partie de ma question. Mais est-il possible d'écrire une formule sans passer par une cellule contenant le numéro de la semaine?

Encore Merci pour ton retour

Luc

Bonjour,

Oui on peut écrire le 21 directement en dur dans la formule, mais il faudra le changer au besoin, sauf si on a un moyen de déterminer quelle est la dernière semaine qui nous intéresse. Cette partie pour être honnête je ne suis pas sûr de la comprendre, un tel moyen existe?

Bonsoir Ausecour,

Merci pour ton retour. Suite à une absence forcée, je te répond que ce jour.

Si je comprend bien ton message, il n'est pas possible de récupérer le nom du dernier onglet d'un autre fichier.

Merci pour ta confirmation

Luc

re,

avec excel2007, il n'y a pas autant de possibilités ou on doit utiliser VBA ...

un essai, une plage nommée "feuilles" dans le fichier "releve" et dans le fichier "region" la feuille "feuilles de releve"

15releve.xlsb (18.88 Ko)
16region.xlsx (20.13 Ko)

re,

avec excel2007, il n'y a pas autant de possibilités ou on doit utiliser VBA ...

un essai, une plage nommée "feuilles" dans le fichier "releve" et dans le fichier "region" la feuille "feuilles de releve"

15releve.xlsb (18.88 Ko)
16region.xlsx (20.13 Ko)

Bonjour BsAlv,

En effet c'est possible d'avoir le nom du dernier onglet avec VBA, sans VBA en revanche...

Avec VBA on peut avoir le nom du dernier onglet de plusieurs façons, voici un exemple:

Function f_get_nom_dernier_onglet(Optional Cellule As Range) As String
Dim Classeur As Workbook

Application.Volatile

If Cellule Is Nothing Then
    Set Cellule = ActiveCell
End If

Set Classeur = Cellule.Parent.Parent
f_get_nom_dernier_onglet = Classeur.Sheets(Classeur.Sheets.Count).Name
End Function

Cette fonction a besoin d'une information pour renvoyer le nom du dernier onglet, à savoir une cellule qui fait partie du classeur pour lequel on veut obtenir cette info.

Si on omet de préciser une cellule, alors ça renvoie le nom du dernier onglet du classeur où se trouve la formule.

On peut pousser la fonction un peu plus loin:

Function f_get_nom_onglet(Optional ByVal num_onglet, Optional Cellule As Range) As String
Dim Classeur As Workbook

Application.Volatile

If Cellule Is Nothing Then
    Set Cellule = ActiveCell
End If

If IsMissing(num_onglet) Then
    f_get_nom_onglet = Cellule.Parent.Name
    Exit Function
ElseIf Not IsNumeric(num_onglet) Then
    f_get_nom_onglet = CVErr(xlErrValue)
Else
    num_onglet = CLng(num_onglet)
End If

Set Classeur = Cellule.Parent.Parent

If num_onglet > 0 Then
    f_get_nom_onglet = Classeur.Sheets(num_onglet).Name
ElseIf num_onglet < 0 Then
    f_get_nom_onglet = Classeur.Sheets(Classeur.Sheets.Count + num_onglet + 1).Name
ElseIf num_onglet = 0 Then
    f_get_nom_onglet = CVErr(xlErrValue)
End If
End Function

Ici on peut renseigner le numéro de l'onglet dont on veut connaître le nom, 1 pour le premier en partant du début, -1 pour avoir le premier en partant de la fin (dernier onglet). Si on ne renseigne pas de numéro d'onglet, ça renvoie l'onglet de la cellule qu'on a précisé, ou si elle manque aussi, l'onglet qui contient la formule.

re, @Ausecours,

il y avait quelque chose spéciale/amusante dans ma réponse précédente, vous voyez nulle part une macro, seulement une plage nommée mais j'étais obligé de sauvegarder comme "xlsb" ou "xlsm" parce que cette plage nommée contient une ancienne Excel4.0 fonction. Je sais, dès qu'on a un "xlsb" ou "xlsm", c'est mieux d'utiliser quelque chose plus récent que cette fonction du siècle précédent ... .

Ah Excel 4.0... Je n'ai jamais connu cette période.

Je me demandais en effet où était le code VBA dans votre fichier, sans le trouver, je n'avais pas pensé à aller voir le gestionnaire de noms.

LIRE.CLASSEUR m'est en effet totalement inconnu, comme quoi je peux toujours apprendre des choses sur cet outil

Bonsoir,

Merci à vous pour vos retours.

Je dois avouer que je n'ai pas tout compris dans vos réponses.

Avec le VBA, j'ai toujours des difficultés, et je n'ai pas étudié vos retour pour voir si cela peux me convenir.

Par contre j'ai essayé la méthode de BsAlv.

Lorsque je définis le nom "feuille" dans le gestionnaire de nom du fichier "releve" je n'ai pas les mêmes informations que toi

image

Je ne sais pas comment tu fais pour avoir ces infos

image

Merci de m'indiquer la procédure (je suis en Excel 2021)

Bien sur, dans le nouvel onglet "feuille de releve" du fichier "region" je ne peux pas avoir la liste de tous les onglets du fichier "releve"

Merci pour ton retour

Luc

Rechercher des sujets similaires à "recuperer nom trois derniers onglets classeur"