je souhaite réaliser une formule avec votre aide svp.
premier document:
B11 l'année (2021 pour exemple)
C11 Le mois (janvier pour exemple)
M11 le résultat de notre formule
Et le second document nous voulons récupérer la valeur de la cellule D177
La difficulté que je rencontre c'est que j'ai un second document pour chaque année "gestion_2021", "gestion_2022" ect ect et dans chaqu'un d'entre eux il y à les feuilles "janvier" "février" ect ect...
finalité:
M11=recherche du bon document année définie par B11, et une fois trouvé recherche de la feuille du mois correspondante à C11, prendre ensuite la valeur de la case D177
exemple:
Première feuille
B11=2021
C11=janvier
M11= la valeur après recherche de C177 dans le fichier comportant 2021 nomé "gestion_2021", dans la feuille nommé janvier
Je souhaite pas de macro car je ne sais pas comment attirer cela a tout mon tableau du premier doc pour chaqu'une des lignes, mais si vous me l'expliquer je dit pas non a une macro
En VBA c'est simple, il suffit d'entrer la formule de liaison complète en M11.
Téléchargez les fichiers joints dans le même dossier (le bureau).
Les macros dans le ThisWorkbook du 1er fichier :
VB:
Private Sub Workbook_Activate()
Dim chemin$
chemin = ThisWorkbook.Path & "\" 'dossier à adapter
Application.DisplayAlerts = False
Application.EnableEvents = False 'désactive les évènements
With Feuil1 'CodeName de la feuille, à adapter
.[M11] = "='" & chemin & "[gestion_" & .[B11] & ".xlsx]" & .[C11] & "'!C177" 'formule de liaison
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Workbook_Activate 'lance la macro
End Sub
La1ère se déclenche quand on ouvre ou active le fichier.
Pour traiter plusieurs lignes on fera une boucle :
VB:
Private Sub Workbook_Activate()
Dim chemin$, lig&
chemin = ThisWorkbook.Path & "\" 'dossier à adapter
Application.DisplayAlerts = False
Application.EnableEvents = False 'désactive les évènements
With Feuil1 'CodeName de la feuille, à adapter
If .FilterMode Then .ShowAllData 'si la feuille est filtrée
For lig = 11 To .Range("B" & .Rows.Count).End(xlUp).Row
.Cells(lig, 13) = "='" & chemin & "[gestion_" & .Cells(lig, 2) & ".xlsx]" & .Cells(lig, 3) & "'!C177" 'formule de liaison
Next
.Range("M" & lig & ":M" & .Rows.Count).Clear 'RAZ en dessous
End With
Application.EnableEvents = True 'réactive les évènements
End Sub