RECHERCHEV chemin d'accès dans cellule

Bonjour,

Je travaille actuellement sur un fichier pour créer des bulletins de notes en fonction de valeurs présentes dans d'autres fichiers. Plus explicitement, je dispose d'un fichier Bulletin, et (pour l'exemple) de 4 fichiers Relevé_notes_Module_1 ; Relevé_notes_Module_2 ; Relevé_notes_Module_3 ; Relevé_notes_Module_4.

Mon fichier bulletin comporte le nom des différents modules (modifiables grâce à une liste) utiles à l’édition du bulletin, de la moyenne de l’étudiant, de la moyenne de la classe et du coefficient à appliquer au module. Afin de rechercher les valeurs dans les fichiers correspondants, j’ai créé :

  • Une première colonne qui modifie la nomination du module pour la faire correspondre à la nomination Relevé_notes (je remplace les espaces par des underscores grâce à la fonction =SUBSTITUE())
  • Une seconde colonne qui fait apparaitre le chemin d’accès au dossier où sont situés les relevés de notes.
  • Une troisième colonne qui concatène les deux précédentes en y ajoutant les informations utiles à la recherche de la moyenne de l’étudiant
  • Une quatrième colonne qui concatène également les deux premières pour créer le lien vers la cellule de droite de la ligne total renvoyant à la moyenne de classe.

Ensuite, pour retrouver les valeurs correspondant à la moyenne de l’étudiant, j’inscrit une fonction =RECHERCHEV(nom prénom;colonne 3 avec le chemin d’accès au fichier;4;FAUX).

Pour ce qui est de la moyenne de la classe, je ne sais pas encore trop comment m’y prendre, ni quelle fonction utiliser. Je voulais initialement juste inscrire = et la colonne 4 renvoyant à la cellule correspondante.

Bien évidemment, aucune de mes fonctions ne fonctionne.

Je vous ai mis à disposition des fichiers pour que cela paraisse plus clair :

  • Le ficheir bulletin,
  • Les fichiers Relevé_notes_Module_n.

Si ça n’est pas le cas, n’hésitez pas à me poser des questions !

Merci beaucoup,

Charles.

83bulletin.xlsx (14.42 Ko)

Bonjour,

Si les fichiers sont ouverts, le chemin complet n'est pas nécessaire. En revanche pour utiliser l'info, Excel doit interpréter le texte comme une référence, pour cela tu peux utiliser la fonction INDIRECT().

Bonjour Pedro22,

Pour commencer, merci de ta réponse, rapide qui plus est. Cependant, pour illustrer mon problème, j'ai mis en avant 4 fichiers Relevé_notes_; mais en réalité, il en existe plus d'une trentaine. Et tous ne seront pas ouverts simultanément...

Si je laisse le chemin d'accès complet, la fonction INDIRECT() peut-elle fonctionner tout de même où je dois avoir recours à une autre alternative ?

Merci,

Charles.

Sans VBA, je ne crois pas que ce soit possible (ou en tout cas je ne sais pas faire).

Si tu sais faire en VBA, ça me conviens parfaitement, je n’y suis pas du tout réfractaire, bien au contraire ! C’est juste que je manque de connaissances en VBA..!

Merci !

Charles

Sub EditerBulletin()

Dim Nom As String, Repertoire As String, Nmod As Byte, Lmax As Long, CBulletin As Workbook, CModule As Workbook, Position As Range

Application.ScreenUpdating = False 'Désactive l'affichage en temps réel

Set CBulletin = ActiveWorkbook 'Affecte le nom "CBulletin" au classeur actif
Repertoire = "C:\users\TonNom\Bulletin\" 'Chemin d'accès aux relevés de notes (à adapter)

With CBulletin.Sheets(1)
    If Not IsEmpty(.Cells(2, 2)) And Not IsEmpty(.Cells(2, 3)) Then 'Si le nom est renseigné, alors :
        'IMPORT DES NOTES
        Nom = .Cells(2, 2) & " " & .Cells(2, 3) 'On l'affecte dans une variable "Nom"
        For Nmod = 1 To .Cells(.Rows.Count, 7).End(xlUp).Row - 4 'Pour chaque module,
            Set CModule = Workbooks.Open(Repertoire & "Relevé_notes_Module_" & Nmod & ".xlsx") 'On ouvre le fichier correspondant
            Lmax = CModule.Sheets(1).Cells(CModule.Sheets(1).Rows.Count, 8).End(xlUp).Row 'On cherche la dernière ligne complétée
            Set Position = CModule.Sheets(1).Range("D8:D" & Lmax).Find(Nom, LookIn:=xlValues, LookAt:=xlWhole) 'On cherche la position du Nom dans le relevé
            If Not Position Is Nothing Then
                .Cells(Nmod + 4, 3) = CModule.Sheets(1).Cells(Position.Row, 8) 'On affecte la note correspondante dans le classeur Bulletin
                .Cells(Nmod + 4, 5) = CModule.Sheets(1).Cells(Lmax, 8) 'Idem avec la moyenne de classe
                CModule.Close 'On ferme le relevé de notes
            End If
        Next
        'IMPRESSION PDF DU BULLETIN
        If MsgBox("Exporter en PDF ?", vbYesNo) = vbYes Then .ExportAsFixedFormat Type:=xlTypePDF, Filename:=Repertoire & Nom & ".pdf"
    End If
End With

Application.ScreenUpdating = True

End Sub

Voilà ton fichier en retour :

36bulletin.xlsm (28.20 Ko)

PS: tes relevés de notes doivent être dans le répertoire écris dans la macro et les infos en onglet 1 de chaque classeur pour que ça fonctionne

Super Pedro22, merci beaucoup ! Merci aussi pour le petit bonus, l'édition PDF !

J'essaye ça tout de suite, j'essaye de l'adapter à mon fichier original, et je te redis si ça fonctionne. (Si ce n'est pas le cas, j'essayerai de résoudre le problème, en cas d'échec je serai probablement amené à te solliciter à nouveau..!)

En tous cas, merci !

Charles

Bonjour !

La position des notes récupérées et celle où elles sont reportées est basée sur ton exemple, mais si le format des fichiers est légèrement différent ou si le nombre de notes varie, il faudra que j'apporte quelques modifications.

Par contre, le code est censé gérer sans problème un nombre de modules variable et une liste d'étudiants de taille variable aussi.

Bonjour à tous

Les formules actuelles sont justes si aucun élève n'est jamais absent, sinon les moyennes sont fausses.

Ci-joint une solution PowerQuery (intégré depuis Excel 2016), donc sans VBA, qui exploite tous les fichiers Excel du répertoire indiqué dans l'onglet Data sauf Bulletin.

J'y ai recalculé les moyennes de façon à ce que la moyenne de l'élève et celle de la classe soient correctes mêmes si un élève a une note manquante...

Le nombre de lignes des tableaux sources n'a pas d'incidence... l'actualisation donnera les résultats à jour

Edit : dans l'exemple fourni, j'ai supprimé la note d'un élève pour tester la moyenne

36bulletin2.xlsx (33.65 Ko)

Merci également chris78,

Je vais voir si j'arrive à comprendre le fonctionnement !

Perdro22, pour le VBA; je n'arrivais pas à l'adapter à mes différents modules.

J'aurai voulu pouvoir vous envoyer mon fichier original pour que ce soit plus claire, mais je ne peux pas le déposer sur un forum hélas.

En tous cas, merci beaucoup, je regarde ça !

Charles

Re

Le seul point "compliqué" est le chemin paramétrable sinon c'est très simple.

N'hésite pas à poser des questions si tu coinces.

Je vais essayer de reproduire les étapes que tu as suivies ! Je suis vraiment un néophyte de PowerQuery, je ne l'ai utilisé qu'une seule et unique fois ! (sous tes conseil déjà à l'époque si je ne m'abuse...) Ça a l'air d'être un outil super utile ; j'espère qu'ils le développeront pour Excel Mac.

En tous cas, je dois admettre que je suis plutôt content que cela permette de créer une base de données, ça pourra m'être utile...!

Merci encore 78chris, je reviendrai te solliciter en cas de panique..!

Alors, je suis parvenu à adapter ta requête à mon fichier (hors-mis l'importation de la base de données que je n'ai pas encore regardé).

Mais j'ai d'ores et déjà une question, j'ai l'impression que lorsque je veux appliquer un coefficient à une note (au sein d'un des fichiers Relevé_Notes_...) La requête ne la considère pas et ne met pas à jour les moyennes en conséquent... Je me trompe ?

Merci,

Charles

PS : Le fichier joint, c'est le même que Relevé_Notes_Module_1; mais avec la première note coefficientée.

Re

Tu repostes le même fichier qu'hier, non?

Tu as essayé quoi ?

Le requête importe lit les fichiers sources. Tu as changé le chemin et actualisé tout ?

Oui oui, c'est le même fichier. J'avais juste modifié le coefficient de la première note, (au dessus du tableau de notes, j'ai fait en sorte que l'on peut affecter un coefficient à chaque note).

Et si par exemple, la Note 1 est coefficient 2, l'influence que ça a sur les moyennes n'est pas pris en compte.

  • NOM1 Prénom1: Devrait passer de 11 à 11.75 de moyenne générale
  • NOM2 Prénom2 : Devrait passer de 15.33 à 15 de moyenne générale
  • NOM3 Prénom3 : Devrait passer de 10.67 à 10.75 de moyenne générale

J'ai bien rentré le nouveau chemin et ai réactualisé les données, mais ça ne change pas les valeurs.

Tu as une idée de quoi ça pourrait venir ?

Merci,

Charles

RE

Le coeff n'est pas pris dans les tableaux de notes individuelles mais dans le tableau Data : une requête importe les notes, une autre le tableau de coeffs et le tout est croisé pour calculer toutes les moyennes, élèves et classes.

Il faudrait modifier ce tableau et la requête si les coeffs évoluent selon la note et non le module.

Je n'avais pas fait attention et ai fait trop vite...

Combien de notes par modules ?

D'accord ! J'ai compris l'origine du problème !

Oui, j'avais à l'idée que chaque module avait un coefficient; et qu'au sein de chaque module, on puisse appliquer des coefficients à chaque note. J'ai toujours de bonnes idées, mais quand il s'agit de les mettre en pratique...

Merci de m'avoir éclairé. Je vais regarder si j'arrive à quelque chose.

Sinon, l'autre solution, c'est peut être d'ajouter une nouvelle note à chaque nouveau coefficient, non ? Par exemple, je veux que la note 1 soit coefficient 2, je rajoute une colonne (Note 1 bis) avec les même notes pour qu'elle soit considérée deux fois ? Ça peut vite devenir le chaos un tableau de note comme ça, mais ce sera plus simple, non ?

RE

Le coeff n'est pas pris dans les tableaux de notes individuelles mais dans le tableau Data : une requête importe les notes, une autre le tableau de coeffs et le tout est croisé pour calculer toutes les moyennes, élèves et classes.

Il faudrait modifier ce tableau et la requête si les coeffs évoluent selon la note et non le module.

Je n'avais pas fait attention et ai fait trop vite...

Combien de notes par modules ?

Oui, enfin c'est déjà bien gentil de me venir en aide !

A l'heure actuelle, il est défini que les modules auront toujours 3 notes.

Re

Je te renvoie le fichier avec le nouveau tableau des coeff et la requête adaptée

22bulletin2.xlsx (33.80 Ko)

Bonjour 78chris,

Je suis enfin parvenu à adapter la requête à mon fichier ! Ça ne voulait pas fonctionner hier, mais aujourd'hui tout fonctionne !

J'ai également résolu le problème des coefficients par module : J'ai créé un autre tableau qui liste les modules et le coefficient qui y correspond, et la page du bulletin lance une recherchev pour trouver quel coefficient correspond à quel module.

Je dirai qu'à priori tout à l'air de fonctionner ; je teste le fichier officiellement lundi, en espérant que tout fonctionne !

En tous cas, merci 78chris de m'avoir filé la main sur ce problème.

Merci aussi à toi, Pedro22 d'être intervenu pour m'aider à résoudre de mon problème !

Rechercher des sujets similaires à "recherchev chemin acces"