Aide pour simplifier une Macro

Nico44044 a écrit :

Ca m'intéresse carrément si tu arrives a me transformer ça en mode BDD je suis preneur a 100% ne serait ce que pour apprendre et voir comment tu as fait !!

Oui, hé, ho, je n'allais pas y passer mon samedi, non plus, hein Ne t'attends pas à du travail ciselé: c'est du brut de fonderie!

En feuille Compétences, j'ai repris le tout, mais sans cellules fusionnées, ni les alignements de texte. De cette manière, on pourrait faire des "choix en cascade": pour un domaine sélectionné, afficher les compétences, puis pour une compétence, les "sous-compétences".

J'ai numéroté les sous-compétences.

En feuille Observations, c'est là que les données sont stockées sous forme de liste de données. J'ai encodé n'importe quoi, ne connaissant pas la signification des "Résultats" ni des "Médiations". Une colonne permet d'afficher le n° de ligne, si le nom de l'élève et le n° de la compétence sont identiques à ceux sélectionnés dans la feuille Grille.

La feuille Grille est celle qui permet de "visualiser" les résultats, les pourcentages calculés (qui me laissent toujours aussi perplexe!) et la photo. J'ai repris ici une technique proposée par Jacques Boisgontier (mis le lien vers son site pour les explications).

À ce stade, il n'y a pas une ligne de code, mais on peut changer de technique si besoin: c'était juste pour illustrer.

WOAW a oui effectivement c'est génial comme ça

Impressionant.

Seul petit hic : il faudrait faire apparaitre les pourcentage de réussite et la note final ( B17 et B20 dans onglet grille)

dans la feuille OBSERVATIONS car ce sont les informations les plus importantes, celles qui vont être reportées automatiquement de le livret de l'élève ...

mais sur le principe c'est juste terrible !!!


En fait pour que ce soit parfait il faudrait que dans l'onglet "Grille" lorsque je change la compétence "A1" cela update systématiquement le tableaux en dessous (que je redupliquerai en 11x vers la droite) en gardant les résultats précédemment rentrés ...

Du coup plus besoin du filtrage par nom de l'élève en "A3"

Possible tu penses ?

Nico44044 a écrit :

mais sur le principe c'est juste terrible !!!

Môôssieur aurait une légère tendance à l'exagération?
Nico44044 a écrit :

Possible tu penses ?

Pars du principe qu'en y mettant du tien, tout est possible Tu ne rencontreras que deux contraintes: le temps dont tu disposes et l'investissement que tu es disposé à consentir.

À mon humble avis, ce que tu dois faire dans un premier temps, c'est définir de quoi tu as besoin, ce que tu veux pouvoir faire avec ton fichier ... Tu me parlais de "livret de l'élève" ... c'est ton ancienne feuille "INES"? Si oui, le principe sera un peu le même: une seule feuille doit exister, qui permet de visualiser, pour un élève sélectionné, toutes les données utiles.

C'est pour ça que tu dois définir tes besoins. Tu dois établir ton cahier des charges (sachant que c'est en grande partie toi qui exécuteras les travaux ... mais ça tu l'as déjà compris!)

Pour l'onglet Grille, le changement de compétence dans la liste déroulante devrait bien mettre à jour les données du petit tableau dans cette même feuille. Ce n'est pas le cas chez toi?

Si ca mets bien à jour mais en fait j'ai besoin d'avoir les 11 élèves (donc 11 tableaux ) cote à cote.

Donc le tri par élèves en "A3" ne m'est pas utile.

Il faut juste qu'en changeant la compétence en "A1" cela update la ligne des 11 tableaux ...

Le reste avec les macros que tu m'as faite plus de la mise en page je devrai m'en sortir et ça devrai alléger considérablement le fichier

Nico44044 a écrit :

en fait j'ai besoin d'avoir les 11 élèves (donc 11 tableaux ) cote à cote

Alors le système proposé (formule "simple", basée sur la colonne supplémentaire en feuille Observations) n'est plus valable ... sauf en ajoutant 11 colonnes supplémentaires, plutôt qu'une seule.

Soit on travaille avec des formules matricielles (plus gourmandes en ressources, surtout sur de gros volumes), soit on retravaille avec une macro (mais il faudra aussi réfléchir au traitement de volumes conséquents)

BON ...

Pour être le plus clair possible sur ce que je voudrais voici un exemple détaillé et mis en page...

Dis moi si à ton avis c'est réalisable ...

Si oui je vois pas comment faire mieux donc ce sera fini et j'aurai plus qu'a utiliser ce merveilleux fichier Excel

Merci pour le temps que tu y passes.

Bon dimanche

EDIT : j'ai oublier un détail important : je dois pouvoir rajouter des lignes aux tableaux dans OBSERVATIONS , ou alors, il faut l'agrandir et en mettre beaucoup plus qu'il n'y en a actuellement sinon une fois plein je suis bloqué lol.

Je me disais aussi que tu acceptais avec trop d'enthousiasme ma proposition d'hier ... Il y a une dimension qui manque complètement, dans ton dernier fichier: où seront stockés les résultats des différentes évaluations que tu vas faire? Tu ne peux pas les encoder dans le tableau en feuille Observations, puisque le contenu de ce tableau va être mis à jour à chaque sélection d'une compétence en B4!

Ce tableau ne permet, comme je l'ai dit hier, que la "visualisation" des résultats obtenus pour une compétence choisie. Il te faut donc une feuille supplémentaire pour enregistrer tous les résultats. Soit tu encoderas directement dans cette feuille-là, soit il faudra construire un autre formulaire dédié à l'encodage.

Quand tu parles d'ajouter un grand nombre de lignes dans la feuille Observations, tu m'inquiètes: on est déjà à 200 compétences pour 11 enfants, avec chaque fois 10 évaluations possibles ... et il pourrait y en avoir beaucoup plus!?

Dans chaque feuille Élève, tu as ajouté cette procédure:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Name = Range("D12").Value
End Sub

Tu es conscient de ce que ça implique? Renommer une feuille ... une fois devrait suffire! Pourquoi la renommer à chaque clic dans une cellule quelconque de chaque feuille Élève??

Tu as vérifié tes calculs de pourcentage, dans la feuille Observations? Si pour l'élève 1, j'inscris 5 'G' (sur un total de 10 lignes utilisables) et rien que ces 5 'G', le pourcentage affiché pour 'G' est 33% (et rien pour les autres) ... est-ce bien normal?

En conclusion, il faut que tu prennes le temps de lire, de comprendre et, comme je le disais hier, de préciser tes besoins. Je ne suis pas certain qu'au moment où j'écris ces lignes, tu n'es pas déjà occupé à remodifier des choses dans ton fichier, de ton côté.

Je veux bien consacrer une partie de mon temps libre à ton projet ... pas tout mon temps libre

Salut,

Finalement je vais laisser mon fichier tel quel il tourne plutôt bien et sans ralentissement d'autant que je l'ai alléger encore depuis.

Petite question par contre par rapport a ta macro :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If (Target.Column - 6) Mod 6 <> 0 Then Exit Sub

If (Target.Row - 12) Mod 10 <> 0 Then Exit Sub

If Target.Cells(1, 1) = "" Then Exit Sub

Cancel = True

On Error Resume Next

test = Sheets("" & Target.Cells(1, 1)).Index

If IsEmpty(test) Then MsgBox "Feuille " & Target.Cells(1, 1) & " pas trouvée": Exit Sub

With Sheets("" & Target.Cells(1, 1))

.Activate

On Error Resume Next

lig = Application.Match(Cells(Target.Row - 10, 2), .[E:E], 0)

If lig = 0 Then MsgBox "pas trouvé ...": Exit Sub

With ActiveWindow

.ScrollRow = lig

.ScrollColumn = 1

End With

.Cells(lig, 5).Activate

End With

End Sub

Elle fonctionne super mais si j'ai le malheur d'insérer une ligne ça ne fonctionne plus.

Y a t'il un moyen de gérer ce problème relatif/absolue avec ta macro ?

Si oui que faut-il changer stp ?

Bonsoir,

Nico44044 a écrit :

Finalement je vais laisser mon fichier tel quel

Je ne sais pas pourquoi, mais je m'y attendais un peu C'est ton fichier; tu décides donc ce qui te semble le mieux. Personne ne te contestera ce droit.

Pour ta question concernant la macro, difficile de répondre: tu insères une ligne ... et puis c'est tout? ... Ou alors tu décideras régulièrement, sans que ce soit prévisible, d'insérer des lignes à des endroits différents?

Si c'est la première hypothèse, on adapte le code quand tu as inséré ce dont tu as besoin (mais tu l'avais déjà fait et tu avais trouvé les adaptations à apporter) ... j'en déduis que c'est sans doute la seconde hypothèse!?

Si c'est le cas, il faut trouver ce qui constituera la condition à laquelle le double-clic devra être considéré comme déclencheur du code ou double-clic "normal".

Là, j'avais utilisé la "position" de la cellule (ligne multiple de x et colonne multiple de y). Toi seul peut dire ce qui sera "immuable", ce qui peut être vérifié (contenu de la cellule ou d'une cellule voisine, couleur de police ou de remplissage, etc.) ... d'autant qu'on ne sait pas de quelle manière ton fichier a évolué et à quoi ressemble ta feuille Observations aujourd'hui

C'est bien la deuxième hypothèse car je peut être amener a rajouter des lignes dans n'importe quel tableaux. pour le moment j'ai rebidouiller ton code (pas celui dans OBSERVATIONS mais celui dans les feuilles bilan) , ça fonctionne mais je n'ai pas réussi a la faire fonctionner sur le double clic d'une cellule fusionnée et l'inconvénient c'est que je sais pas comment l'appliquée au 11 tableaux en même temps donc je l'ai recopiée 11 fois ...

Je sais c'est pas très orthodoxe mais au moins ça fonctionne.

Je te met que les 2 premières ...

"Target" est une cellule présente dans chacun des 11 tableaux et qui est = au nom de la competence recherchée.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, [F1:F289]) Is Nothing Then

Cancel = True

If Target.Count > 1 Then Exit Sub

If Target = "" Then Exit Sub

With Sheets(4) 'doit etre égal à la cellule "F12" de la feuille "OBSERVATIONS" '

.Activate

On Error Resume Next

lig = Application.Match(Target.Value, .[E:E], 0)

If lig = 0 Then MsgBox "pas trouvé ...": Exit Sub

.Cells(lig, 5).Activate

With ActiveWindow

.ScrollRow = lig

.ScrollColumn = 1

End With

End With

End If

If Not Intersect(Target, [L1:L289]) Is Nothing Then

Cancel = True

If Target.Count > 1 Then Exit Sub

If Target = "" Then Exit Sub

With Sheets(5) 'doit etre égal à la cellule "F12" de la feuille "OBSERVATIONS" '

.Activate

On Error Resume Next

lig = Application.Match(Target.Value, .[E:E], 0)

If lig = 0 Then MsgBox "pas trouvé ...": Exit Sub

.Cells(lig, 5).Activate

With ActiveWindow

.ScrollRow = lig

.ScrollColumn = 1

End With

End With

End If

End Sub

Si je savais coder , dans OBSERVATIONS j'aurai créer une cellule "CLIQUE ICI" (idéalement fusionnée) dans chacun des 11 tableaux. et cette cellule rechercherai le titre de la competence du tableaux, le nom de l'élève et enverrai vers la feuille bilan de l'élève.

Mais je vois pas comment

D'ou ma bidouille avec ton code

Re-bonsoir,

Désolé, mais sans voir à quoi ressemble la feuille concernée (c'est Observations .... ou tes feuilles Élèves??) j'ai du mal à comprendre de quoi tu parles?

Le double-clic sur une cellule fusionnée était déjà traité dans un des codes que j'avais proposé. Une instruction comme If Target.Cells(1, 1) = "" Then ... vérifie si la cellule du coin supérieur gauche dans une plage de cellules fusionnées est vide.

Quant à la macro que tu recopies 11 fois, je te dirais bien que c'est ce que j'essaie de te faire comprendre avec ta "logique de répétition" (mais je vois bien qu'il va falloir que je renonce! )

Attention: les journées sont bien remplies; le temps passé sur le PC en soirée risque de s'en trouver réduit!

Bonsoir.

Je vous propose une solution pour l'affichage de la compétence sélectionnée en masquant toutes les autres en attendant de mieux connaitre le sujet et proposer peut être des améliorations.

Cordialement.

2classeur2.xlsm (317.71 Ko)

Bonsoir.

Désolé, j'ai oublié de préciser que le code de la compétence choisie est à renseigner dans la cellule Q4 de la feuille OBSERVATIONS.

cordialement.

Bonsoir,

Merci bcp pour cette proposition. Entre temps j'ai réussi à faire ce que je voulais grâce a U.milité (encore 1000 merci à lui).

Masquer les competences finissait par faire ramer mon fichier. J'ai réussi a le ramener à 1mo ce qui est déjà bcp.

Je classe donc l'affaire pour le moment.

Merci à vous 2

Rechercher des sujets similaires à "aide simplifier macro"