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)
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.
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"
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"
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 FunctionCette 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 FunctionIci 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
Je ne sais pas comment tu fais pour avoir ces infos
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