Amélioration de Fichier Grace au VBA

Tu as tout compris ! Je te fais ça " aux ptits oignons ! "

C'est pas sorcier mais je prends mon temps pour bien vérifier et éviter d'avoir tout à recommencer dans 8 jours...

A+

Ne t'inquiète pas, il n'y a aucun soucis ce n'est pas pressant.

Et comme on dit lentement mais surement c'est mieux que rapidement mais insuffisant..

Après je sent que je vais passer des heures carré à comprendre à 100% le VBA que tu as fait. Mais c'est cool c'est comme ça que l'on apprend !

Bon finalement, je n'ai fait que quelques tests : Évidemment moi je fais pas trop de c... je connais trop bien le truc !

Essaie un peu de jouer avec pour voir s'il y a des failles grossières qui m'ont échappé...

Parmi les modification :

Renommage de tous les boutons.

Masquage du bouton RAZ en mode trimestre

Masquage du bouton Imprimer en mode pas de trimestre...

Déprotection des colonnes A > B en mode pas de trimestre

Déprotection et affichage de la feuille Param en mode pas de trimestre

Reprotection de cette feuille à la perte du Focus

Débugage de la fonction affichage de la liste des élèves en fonction des trimestres

Insertion/suppression de lignes quand Suppression ou insertion d'items.

Diverses corrections mineures

Parmi celles-ci léger décalages des trimestres :

Le trimestre 1 va de la ligne 2 à 100

Le trimestre 2 va de la ligne 102 à 200

Le trimestre 3 va de la ligne 202 à 300

Les lignes 101 et 201 (à ne pas supprimer ni modifier !) servent juste de point de repère pour le début de chaque trimestre.

En Mode RAZ inutile de formater les colonnes A et B et même éviter le Copier/Coller éventuel ! Préférer le Collage Spécial Valeur le cas échéant. J'ai prévu une mise en forme automatique de la police, Type+Taille hauteur de ligne et Wrap mais je n'ai pas du tout testé si on fait des mise en forme parasite...

Sorry ! J'ai vu à la dernière minute que tu avais fais de liens sur la feuille param pour la classe... C'est très bien. Donc tu te débrouilleras sans problème pour recommencer

Moi je pense que tu peux sans problème laisser libre l'accès à la feuille Param pour les paramétrages de début d'année : Ça t'évitera des userform foireux et des boutons dans tous les coins... pour la liste des élèves.

Tu me diras les pb rencontrés.

Pour la compréhension du VBA tu demandes : J'ai essayé de commenter un peu, mébon, c'est pas que je sois radin mais quand c'est trop évident j'évite les commentaires inutiles... Mais en cas de nécessité je t'expliquerai.

A+

J'ai fait quelque test:

- Le bouton "Imprimer" que ce soit sur la feuille CE2 ou CM1 imprime toujours le Bilan CM1 ^^

Lorsque je passe sur Trimestre 2 il prend bien les noms d'élèves du Trimestre 2 mais pas les notes.. Je crois que les boutons imprimer ne suivent pas.

  • Il n'est pas possible d'insérer une ligne en mode "Gris"
  • Je ne m'attendais pas que le bouton "RAZ" supprime tout. Serte c'est top mais il faut bien réécrire la compétence en colonne A et sous compétence en colonne B en commençant non pas en face la compétence mais en dessous.. Sinon c'est fichu. Laisser un exemple aurait été Top non ?

Tkt pour les liens Feuilles et les liens enseignent, année etc je le referai

Si je peux servir à ça au moins ^^

Sinon la suppression et insertion de ligne en mode "Trimestre" fonctionne très bien.

Je ne vois rien d'autre comme ça, j'essaierai de le parcourir plus demain.

Enfin déjà quand je revient au tout premier que moi j'avais fait ahah la bonne blague..!!

Je pensais pas que tout ceci était possible grâce au VBA mais que ça donne envie de plonger dedans tête la première !!!!

Les procédures étant identiques il y a forcément quelques erreurs de copier /coller

pour CE2 dans la Private Sub cbImp_Click de Ws1

Changer Ligne 8 :

With Ws1                     'Ws1 est le CodeName de la Worksheet "CE2" (cf VBAProject)

pour CM1 dans le module Ws3 au lieu de Private Sub cbRAZ3_Click()

Mettre :

Private Sub cbRAZ_Click()

Dans le Module Util

Pour la Sub ResetWs1() changer :

Sub ResetWs1()
Dim i%
    With Ws1
        .[B1] = ""
        .[C1:AF400].ClearContents           'Efface tout
        .[A101] = "TRIMESTRE 2"
        .[A201] = "TRIMESTRE 3"
    End With
'Le reste sans changement...

Pour la Sub ResetWs3() changer :

Sub ResetWs3()
Dim i%
    With Ws3
        .[B1] = ""
        .[C1:AF400].ClearContents           'Efface tout
        .[A101] = "TRIMESTRE 2"
        .[A201] = "TRIMESTRE 3"
    End With
'Le reste sans changement...

Dans le Module Main Supprimer les lignes 8 et 29...

Sub InsRow()
      Dim WsA As Worksheet
      Dim i%, iR%, iC%, iLR%, iT%, sLib$
1     Set WsA = ActiveSheet
2     iR = ActiveCell.Row
3     iC = ActiveCell.Column
4     sLib = ActiveCell.Value
5     If iR > 1 And iC < 3 And sLib <> "" Then
6         If MsgBox("Cette procédure insère une ligne après la ligne active", 273, "Etes vous sûr(e) ?") = vbOK Then
7             With WsA
8                 If .[A1] <> "" And .[B1] <> "" And .[C1] <> "" Then   'A SUPPRIMER

9                             usfSaisie.Show              'Saisie du libellé

10                    If Not Saisie = "" Then

'...

27                        Next
28                    End If
29                End If    'A SUPPRIMER
30            End With
31        End If
32    Else
33        MsgBox Space(18) & "Erreur non gérée :" & Chr(13) & _
                 "Sélectionnez un item Colonne 1 ou 2"
34    End If
End Sub

Bonne journée.

A+

Bonjour,

J'ai fait les modifs ci-dessus.

Dans Trimestre 2 ou 3 par exemple trimestre 3, quand j'insère une ligne nommé "seb" elle ne se met pas automatiquement je doit aller dans trimestre 1 ou 2 puis revenir dans trimestre 3.. et là il m'affiche le Trimestre 1. A chaque fois je dois recliquer sur trimestre 3 pour qu'il m'affiche réellement le Trimestre 3..

En Mode "Gris", insérer une ligne dans trimestre 1 et 2 ne pose pas de soucis mais dans Trimestre 3 j'ai un soucis (deboguage) qui fait carrément planter le excel:

Sub InsRow()
Dim WsA As Worksheet
Dim i%, iR%, iC%, iLR%, iT%, sLib$
Set WsA = ActiveSheet
iR = ActiveCell.Row
iC = ActiveCell.Column
sLib = ActiveCell.Value
If iR > 1 And iC < 3 And sLib <> "" Then
    If MsgBox("Cette procédure insère une ligne après la ligne active", 273, "Etes vous sûr(e) ?") = vbOK Then
        With WsA
                        usfSaisie.Show              'Saisie du libellé

                If Not Saisie = "" Then
                Application.ScreenUpdating = False
                    Select Case iR
                    Case Is < 100: Rows(100).Delete
                    Case Is < 200: Rows(200).Delete
                    End Select
                    .Rows(iR).Copy
                    [color=#FFFF00].Rows(iR + 1).Insert Shift:=xlDown  'Duplication et mise enforme[/color]
                    .Cells(iR + 1, iC).Value = Saisie
                    If iC = 1 Then
                        .Rows(iC).RowHeight = 21
                    Else
                        .Range("B2:B300").WrapText = True
                        .Range("B2:B300").Rows.AutoFit
                    End If
                    .Range("A2:AF300").Interior.ColorIndex = xlNone
                    For i = 2 To 300 Step 2
                        .Range(.Cells(i, 1), .Cells(i, 32)).Interior.ColorIndex = 15
                    Next
                End If
        End With
    End If
Else
    MsgBox Space(18) & "Erreur non gérée :" & Chr(13) & _
           "Sélectionnez un item Colonne 1 ou 2"
End If
End Sub

Pour le bouton "Imprimer" c'est bon, ils imprime chacun les bon élèves néanmoins si je passe en trimestre 2 il n'imprime pas les notes du trimestre 2 il reste sur les note du trimestre 1.

J'ai imprimé une feuille pour voir ce que ça donnais. Ça sort au pti oignon pour le Trimestre 1 !

Le Bouton RAZ est parfait maintenant ! Ça supprime juste toute les notes du coup ça laisse de bon exemple voir même les compétences pour l'année d'après si toute fois..

J'ai mis les liaisons entre les feuilles Bilan et Param.

J'ai également mis les liaisons pour le changement automatique des noms des Feuilles en fonction des Cellules C6 et C7 de Param.

Mais je ne sais pas comment faire pour le nom des Feuilles Bilans. Une idée ?

Bon ! Du coup j'ai encore refondu TOUSSA... Mais pour l'essentiel c'est toujours un peu la même chose. En mieux... Oeuf Corse !

A tester sous tous les angles...

J'ai bidonné un peu plus les feuilles parce que avec des classes trop minimalistes, je ne me rends pas bien compte.

Seul les 3èmes trimestres de chaque classe ont des commentaires sinon pertinents du moins qui permettent réellement de jauger un peu le travail.

J'espère que ça progresse un peu.

Pour les noms des feuilles je t'ai déjà expliqué qu'ils sont sans importance, "pomme, poire banane, cerise, tortue ou papillon" ça n'a aucune importance : Les macros n'utilisent que les CodeName. Relire à ce sujet mes explications précédentes...

Attention à la manière d'utiliser le fichier.

Excel à cette particularité que plus tu supprimes des choses (lignes...) plus le classeur devient volumineux.

Donc ça ne sert à rien d'utiliser le même classeur tous les ans en faisant un RAZ de l'année en cours.

Il est préférable d'utiliser un classeur Modèle et de l'Enregistrer sous... "un autre nom" chaque année !

Tu me diras...

A+

Le changement de trimestre dans la case B1 ne s'effectue plus...

Je met Trimestre 1 il reste au Trimestre 3. La couleur également ne change plus du coup.

Il n'y a plus de mode "Gris" et donc plus d'accès à la Feuille Param.

Oui oui pour les noms des feuilles je sais que l'on s'en fiche car tu utilise WS1 etc.. Je voulais faire quelque chose mais ce n'est pas grave on s'en fiche on oublie car je ne sais comment l'expliquer. ^^

Excel à cette particularité que plus tu supprimes des choses (lignes...) plus le classeur devient volumineux.

Ah ouais !? Je ne savais pas ça. Du coup effectivement il est plus Valable d'avoir un Classeur Modèle. Très bien !

C'est quoi ce Binz ?

Sorry, J'ai fait une dernière petite modif de dernière minute et j'ai oublié de remettre en place.

Dans les deux classes modifier la macro :

Private Sub xWorksheet_Change(ByVal Target As Range)

(Enlever le" x" ! )

A+

C'est bon ça fonctionne !

Mais quand on "insère une ligne" tout saute et du coup les cellules ne sont plus masquer comme si on est en zone "Gris" c'est normal ?

Il faut reselectionner le Trimestre pour que les lignes ce cache...

Dans le module Main,vers la fin de la Sub InsRow()

Remplacer :

                        .Range("B2:B300").WrapText = True
                        .Range("B2:B300").Rows.AutoFit

par :

                        .Cells(iR + 1, iC).WrapText = True
                        .Rows(iR + 1).AutoFit

A+

Dans la même macro (vers la fin) remplacer : ActiveWindow.ScrollRow = iR par :

                    .Range(.Cells(iR + 1, 3), .Cells(iR + 1, 32)).ClearContents

A+

Encore deux petites retouches :

Dans le module Main remplacer la Sub InsRow

Sub InsRow()
Dim WsA As Worksheet
Dim i%, iR%, iC%, iLR%, iT%, sLib$
Set WsA = ActiveSheet
iR = ActiveCell.Row
iC = ActiveCell.Column
sLib = ActiveCell.Value
If iR > 1 And iC < 3 Then
    If MsgBox("Cette procédure insère une ligne APRES la ligne active", 273, "Etes vous sûr(e) ?") = vbOK Then
        With WsA
                        usfSaisie.Show              'Saisie du libellé

                If Not Saisie = "" Then
                Application.ScreenUpdating = False
                    Select Case iR
                    Case Is < 100: Rows(100).Delete
                    Case Is < 200: Rows(200).Delete
                    End Select
                    .Rows(iR + 1).Copy
                    .Rows(iR + 1).Insert Shift:=xlDown  'Duplication et mise enforme
                    .Cells(iR + 1, iC).Value = Saisie
                    If iC = 1 Then
                        .Rows(iR + 1).RowHeight = 21
                        .Cells(iR + 1, 2) = ""
                    Else
                        .Cells(iR + 1, 1) = ""
                        .Cells(iR + 1, iC).WrapText = True
                        .Rows(iR + 1).AutoFit
                    End If
                        RStrip
                    Cells(iR + 1, iC).Select
                    .Range(.Cells(iR + 1, 3), .Cells(iR + 1, 32)).ClearContents
                End If
        End With
    End If
Else
    MsgBox Space(18) & "Erreur non gérée :" & Chr(13) & _
           "Sélectionnez un item Colonne 1 ou 2"
End If
End Sub

Cette macro intègre les 2 précédentes modifications.

L'objet de ces modifications est de permettre d'insérer (selon la colonne sélectionnée)

Colonne1 une nouvelle "matière"

Colonne2 une nouvelle compétence

Dans les feuilles Ws1 et Ws3

Dans chaque macro Private Sub cbDelRow_Click() supprimer (vers la fin...)

    ActiveWindow.ScrollRow = iR

L'objet de ces suppressions est de... supprimer l'effet de scrolling (flashage) après suppression.

Moyennant quoi j'espère avoir fait le tour du sujet !

A+

C'est bon suite au modif ça fonctionne super bien.

En plus avec explication du coup je comprend ce que je fait un minimum ^^

Il n'y a qu'une seule chose qui ne suit plus du coup c'est les notes quand j'essai d'imprimer les Bilans..

Une dernière chose que j'avais complètement oublié c'est en repprennant mes vieux premier Excel que je m'en suis rappelé.

Parfois il y a des élèves qui ne font pas forcément toutes les compétences. Du coup il n'y a pas de note on laisse "un blanc".

Crois tu qu'il serait possible dans les bilans, si tel élève à un blanc alors masquer la compétence ?

Après cela je crois qu'il sera difficile de faire mieux. SI ce n'est la Feuil Param à mettre en page un peu, mais ça je pourrai le faire

Moi qui pensait t'avoir cloué le bec !

C'est probablement parce que tu n'es pas en mode de calcul automatique (C'est peut-être même bien moi qui l'ai mis en manuel...)

Fichier > Option > Formules Mode de Calcul : Cocher Automatique...

Pour la feuille Param le mieux que tu puisses faire c'est de délocker les cellules des prénoms jusqu'à la ligne 31 pas plus...hein !) et de la colonne B (les quelques cellules utiles), de manière à ce qu'on n'ait pas à déverrouiller la feuille pour rajouter un prénom.

Je te conseille d'éviter les quadrillages et autres fioritures qui n'ajoutent rien à la chose.

Le mieux est l'ennemi du bien : De mon point de vue c'est juste de la pollution visuelle...

Pour supprimer des compétences à l'impression, ça va être chaud : Je ne pense pas vu que la mise en forme est basée sur le contenu des cellules, j'y vois pas BÔ !

Je vais regarder mais je te promet rien.

Nota : Attention aux Copier/Coller sauvages... Mine de rien, pas mal de chose sont basées sur des formats précis...

Mes Copier/Coller ramènent ces formats s'ils n'ont pas été pollués par des modifs intermédiaires.

Seuls les Collages Spéciaux Valeurs garantissent une neutralité vis à vis de la présentation... Sinon à la longue ça sera le foutoir !

[EDIT]

Dans la version 11 les lignes vides sont masquées à l'impression. Malheureusement c'est au prix d'un net ralentissement !

A+

Moi qui pensait t'avoir cloué le bec !

Désolé.. !

Nota : Attention aux Copier/Coller sauvages... Mine de rien, pas mal de chose sont basées sur des formats précis...

Mes Copier/Coller ramènent ces formats s'ils n'ont pas été pollués par des modifs intermédiaires.

Seuls les Collages Spéciaux Valeurs garantissent une neutralité vis à vis de la présentation... Sinon à la longue ça sera le foutoir !

Le mieux est d'interdire tous copier/coller. Dire que tout doit se remplir à la mains points barre. Ça évite tous soucis.

Mais je crois que cette fois que c'est la bonne !

Tous fonction à la perfection de ce que j'ai pu tester.

Et je n'ai aucune ralentissement concernant le masquage des lignes vides. (certainement un pc plus puissant.. )

Et en plus je n'ai rien à faire tu as tous fait concernant la feuille Param.. que dire de plus, l'amélioration du fichier grâce au VBA à clairement porté ses fruits !!

Merci Beaucoup !!!

Maintenant je vais me plonger sérieusement dans les lignes d'écriture pour comprendre un maximum,voir tous si je le peut ce serai le top.

Tu n'auras pas de souci à pour comprendre, c'est que du basique, Pas d'array, pas de Dico, pas de complication, pas de chichis...

Et s'il y a quand même des trucs un peu mystérieux... YAKA demander !

J'avoue comprendre une bonne partie après de là a être capable de le faire j'en suis loin et pourtant je comprend... ^^

Il y a une seule chose que je comprend pas parfaitement et pourtant c'est du Excel.. la Formule pour SFRMAE et SFRMBE.

Dans le VBA tu te sers de cette Formule pour faire ligne par ligne.. EN gros ça fait B11 pour G11 etc

Et comme tu as mis =SFRMAE dans chaque cellule, il va chercher la note.

Mais comment sait-il qu'il doit cocher dans tel ou tel cellule ? a aucun moment tu lui dis que NA est en C9 que PA est en D9 etc. ?

Bonjour,

Ah ça c'est ma spécialité !

Je trouve ça super (surtout pour programmer) car ça te permet d'installer une formule compliquée facilement.

En fait il s'agit d'une formule nommée c'est à dire enregistrée dans le gestionnaire de nom.

Pour comprendre, va en C10 : Suivant la feuille active tu as soit =SFRMAE ou =SFRMBE

Cette cellule étant sélectionnée (et la feuille déprotégée) tu vas dans le Gestionnaire de nom tu regardes le contenu de ta formule active et tu lis :

=SI(Cerise!C$9=Cerise!$G10;"ü";"")

Cette formule est auto incrémentable : Si tu la Copie/Colle en C10, tu peux la "Tirer" vers le bas et vers la droite.

C'est en fait la formule d'origine qui lit le contenu de la colonne G et évalue le résultat selon l'en-tête de colonne.

Le fait d'enregistrer cette formule dans un nom permet de sous-traiter facilement à Excel et non à VBA le soin d'évaluer et d'incrémenter la formule.

De plus c'est quand même plus facile d'écrire :

.Range("C11:F" & iRCom).Formula = "=SFRMAE"

plutôt que d'écrire

[C10].FormulaR1C1 = "=IF(Cerise!R9C=Cerise!RC7,""ü"","""")"

... Puis d'incrémenter la formule à toute la plage !

Enfin dans un autre type de tableur même si on ne sert pas de VBA, c'est tout de même plus facile (et poétique !) de remplacer toute ces formules compliquées à base de SOMMEPROD INDEX, EQUIV et autre RECHERCHEV par des formules nommées "=LIBELLULE" ; "=PAPILLON" ; "=BIKINI" etc... Là tu n'es limité que par ton inspiration et l'humeur du moment. Et puis là si le nom que tu a choisi est modifié accidentellement, tu le vois tout de suite, Dans une longue formule de plusieurs lignes, c'est bien moins évident...

En bonus ces formules nommées sont comment dirais-je... "combinables" pour en former de plus complexes.

Pour la petite histoire... Au début d'Excel on n'avait droit qu'à 7 conditions "SI" dans une formule. On se servait alors de ces formules nommées pour outrepasser ces 7 conditions, On mettait 7 SI dans "=VENT", 7 SI dans "=PLUIE"; 7 SI dans "=NEIGE" et on pouvait faire alors une formule "=HIVER" qui permettait de tester les 21 conditions...

Ok ?

Bonjour,

Du coup je comprend ta signature... !

J'ai tous compris, de très bonne explication claire et précise.

Extrêmement intéressante.

Autre petit point, ü permet de faire ce cochage comment as-tu fais ?

Je m'exerce en // sur un autre classeur mais quand j'utilise cette formule ça me sort ü et pas ce V cocher...

EDIT: Ahahah j'ai trouvé la triche mais Terrible ! C'est simplement la Police d'écriture xD

Ta spécialité en passant par le gestionnaire de noms est franchement terrible le gain de temps et d'écriture c'est fou !!!! ^^

Si tu as d'autre petit truc comme ça je suis preneur

Rechercher des sujets similaires à "amelioration fichier vba"