XL 2010 créer un registre d'appel numerique

ATHE RIOVELI

XLDnaute Occasionnel
Bonjour le Forum,
Tout d'abord, je vous présente toutes mes excuses pour ce long moment d'absence due à mon état de santé très fragile.
Je viens vers vous, une fois de plus, afin vous m'aidiez à concevoir à l'aide de macros, un cahier d'appels numérique.
je vous explique le principe :
En côte d'ivoire, l'année scolaire est divisée en 3 trimestres.
Pour chaque semaine, on fait le point des heures d'absences des élèves jusqu'à la fin du trimestre.
La lettre "A" inscrite dans une cellule du registre indique que l'élève est absent.
Lorsque ce dernier est présent, la cellule est vide.
Chaque trimestre dure en moyenne 3 mois. Le premier débute en septembre.
Voici ici joint, un exemple pour une semaine de cours.
 

Pièces jointes

  • CAHIER D'APPELS.xlsm
    45.3 KB · Affichages: 169

job75

XLDnaute Barbatruc
Bonjour ATHE RIOVELI, hello vgendron,

Il n'y a pas à faire des choses compliquées, voyez le fichier joint : c'est un simple planning annuel.

La ComboBox permet d'afficher la semaine désirée :
Code:
Private Sub ComboBox1_GotFocus()
Dim c As Range, a$(), n
[C7] = "=" & [C7].Value2
For Each c In [7:7].SpecialCells(xlCellTypeFormulas, 1)
  If Weekday(c) = 2 Then
    n = n + 1
    ReDim Preserve a(1 To n)
    a(n) = Format(c, "dd/mm/yyyy")
  End If
Next
[C7] = [C7]
ComboBox1.List = a
ComboBox1.DropDown
End Sub

Private Sub ComboBox1_Change()
If ComboBox1.ListIndex = -1 Then Exit Sub
Application.Goto Cells(1, Application.Match(CDbl(CDate(ComboBox1)), [7:7], 0)), True
[B2].Select
End Sub
A+
 

Pièces jointes

  • CAHIER D'APPELS(1).xlsm
    227.7 KB · Affichages: 98
Dernière édition:

ATHE RIOVELI

XLDnaute Occasionnel
BONSOIR job75, BONSOIR vgendron.
Job75, comme si vous étiez dans mes pensées. Vous avez parfaitement compris ce que je voulais.
- Je souhaiterais maintenant, pour chaque semaine, avoir le point des heures d'absences.
- Ensuite, je souhaiterai une macro me permettant de subdiviser les trois trimestres à souhait. c'est-à-dire, pour chaque trimestre, pouvoir choisir la date de début et la date de fin du trimestre.

Grand merci d'avance pour votre précieuse aide.
A+
 

job75

XLDnaute Barbatruc
Re,

Calcul du nombre d'heures d'absence par jour, par semaine, par mois, par trimestre, par an...

Formule en CUJ12, à tirer vers le bas :
Code:
=SI(A12="";"";SIERREUR(NB.SI(DECALER(A12;;EQUIV(CUJ$8;$7:$7)-1):DECALER(A12;;EQUIV(CUK$8;$7:$7)-1;;11);"A");""))
Normalement vous êtes plus fort en formules qu'en VBA non ?

Fichier (2).

Bonne fin de soirée.
 

Pièces jointes

  • CAHIER D'APPELS(2).xlsm
    231.3 KB · Affichages: 79

job75

XLDnaute Barbatruc
Bonjour ATHE RIOVELI, le forum,

Dans ce fichier (3) j'ai pu, grâce à des "µ" et "µµ" en ligne 11 (masquée) :

- créer une MFC sur le tableau pour colorer (orange et vert) les colonnes à ne pas renseigner

- modifier la formule en CUJ12 au cas où un petit rigolo mettrait des "A" dans ces colonnes :
Code:
=SIERREUR(SOMMEPROD((DECALER(A12;;EQUIV(CUJ$8;$7:$7)-1):DECALER(A12;;EQUIV(CUK$8;$7:$7)-1;;11)="A")*ESTERR(TROUVE("µ";DECALER(A$11;;EQUIV(CUJ$8;$7:$7)-1):DECALER(A$11;;EQUIV(CUK$8;$7:$7)-1;;11))))/SIGNE(A12);"")
Bonne journée.
 

Pièces jointes

  • CAHIER D'APPELS(3).xlsm
    243.1 KB · Affichages: 67

job75

XLDnaute Barbatruc
Re,

Dans ce fichier (4) j'ai ajouté la macro :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If ListObjects.Count = 0 Then Exit Sub
Dim br As Range, i&
Set br = ListObjects(1).DataBodyRange
If Intersect(Target, br.Columns(2)) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False
For i = br.Rows.Count To 2 Step -1
  If br(i, 2) = "" Then br.Rows(i).Delete
Next
br.Sort br(1, 2), xlAscending, Header:=xlYes 'tri alphabétique
Application.EnableEvents = True
End Sub
La ligne du tableau est supprimée quand on efface le nom et il y a un tri alphabétique sur les noms.

Pour éviter les problèmes quand des lignes sont supprimées j'ai encore modifié la formule en CUJ12 :
Code:
=SIERREUR(SOMMEPROD((DECALER(A$11;LIGNES(CUJ$12:CUJ12);EQUIV(CUJ$8;$7:$7)-1):DECALER(A$11;LIGNES(CUJ$12:CUJ12);EQUIV(CUK$8;$7:$7)-1;;11)="A")*ESTERR(TROUVE("µ";DECALER(A$11;;EQUIV(CUJ$8;$7:$7)-1):DECALER(A$11;;EQUIV(CUK$8;$7:$7)-1;;11))))/SIGNE(DECALER(A$11;LIGNES(CUJ$12:CUJ12);));"")
A+
 

Pièces jointes

  • CAHIER D'APPELS(4).xlsm
    244.9 KB · Affichages: 67

job75

XLDnaute Barbatruc
Re,

Allez encore un petit plus dans ce fichier (5).

Les cellules "Date_debut" et "Date_fin" sont renseignées automatiquement quand la ComboBox est modifiée :
Code:
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex = -1 Then Exit Sub
Dim col%
col = Application.Match(CDbl(CDate(ComboBox1)), [10:10])
[Date_debut] = Cells(10, col)
[Date_fin] = Cells(10, col + 48)
Application.Goto Cells(1, col), True
[B2].Select
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row <> 11 Then Exit Sub
Cancel = True
Application.Goto Cells(1, [Date_debut].Column - 1), True
[B2].Select
End Sub
Edit : comme vous les aimez bien j'ai ajouté le mot de passe ADMIN pour l'ouverture du fichier.

A+
 

Pièces jointes

  • CAHIER D'APPELS(5).xlsm
    248 KB · Affichages: 62
Dernière édition:

ATHE RIOVELI

XLDnaute Occasionnel
BONSOIR Job75,
Je n'ai pas encore télécharger le fichier, mais je dois dire que vous me connaissez mieux que moi même.
programmer en VBA fait plus pro. On ne voit pas les formules quand on clic dans les cellules.
Et vous êtes un véritable expert.
Je regarde le fichier et je vous fait signe.
Merci d'avance pour votre génie.
A+
 

ATHE RIOVELI

XLDnaute Occasionnel
BONSOIR job75, BONSOIR le forum.
Je viens de regarder votre excellent travail. Je dois tout d'abord vous remercier pour votre soutient.
Permettez moi de poser encore quelques préoccupations :
Nous avons trois trimestres :
- Je souhaite pour le registre, d'afficher que le trimestre souhaité,
pour cela, ne pouvons nous pas avoir un userform qui nous permette de choisir:
Le trimestre, sa date de début ainsi que sa date de fin?
Il nous faut, pour chaque semaine, avoir le bilan des heures d'absences, puis en fin de trimestre, avoir une feuille qui recueille le bilan de toutes les heures d'absences.
l'objectif pour cela est d'envoyer en fin de semaine les heures d'absences de l'élèves aux parents.
Je compte pour l'instant m’arrêter là.
ENCORE UNE FOIS, GRAND MERCI A VOUS.
A+
 

job75

XLDnaute Barbatruc
Bonjour ATHE RIOVELI, le forum,

Vous n'avez pas bien étudié ou compris les solutions que j'ai proposées.

Il est évident qu'un UserForm pour traiter les trimestres est tout à fait inutile.

Il suffit quand on le désire de modifier les cellules Date_debut et/ou Date_fin.

Concernant les relevés des heures d'absence c'est assez compliqué, voyez ces 2 macros :
Code:
Private Sub CommandButton1_Click() 'Création du fichier PDF
If UBound(Split([Eleve])) < 4 Then Exit Sub
Dim chemin$, fichier$
chemin = ThisWorkbook.Path & "\Heures d'absence PDF\" '"D:\Mes documents\GEST-NOTES\Heures d'absence PDF\" 'à adapter
fichier = Split([Eleve])(4) & Format(Date, " yyyy-mm-dd")
If Dir(chemin, vbDirectory) = "" Then MkDir chemin 'création du sous-dossier
If FilterMode Then ShowAllData 'si la feuille est filtrée
[Eleve].Resize(1 + 2 * Application.CountA([Eleve].Resize(1000)), 11).ExportAsFixedFormat xlTypePDF, chemin & fichier
MsgBox "Le fichier '" & fichier & ".pdf' a été créé..."
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim c As Range, deb As Range, col1%, col2%, lig%, i%, n As Byte, j%, col%
'---cadrage des résultats---
If Target.Row = 11 Then
  Cancel = True
  Application.Goto Cells(1, [Date_debut].Column - 1), True
  [B2].Select
  Exit Sub
End If
'---relevé des heures d'absence >0 d'un élève---
Set c = Intersect(Target, [Date_debut].Offset(4).Resize(1000)) 'compte tenu de la position de Date_debut
If Not c Is Nothing Then
  Cancel = True
  Application.ScreenUpdating = False
  [Eleve] = "" 'RAZ de la cellule nommée
  Set deb = [Eleve].Offset(3)
  deb.Resize(1000, 11).UnMerge 'RAZ
  deb.Resize(1000, 11).ClearContents 'RAZ
  If Val(c) Then
    [Eleve] = "Heures d'absence de l'élève " & Cells(c.Row, 2) & " (" & c & ")" 'titre
    col1 = Application.Match([Date_debut].Value2, [10:10])
    col2 = Application.Match([Date_fin].Value2, [10:10])
    lig = -1
    For i = col1 To col2 Step 12
      n = 0
      For j = i To i + 10
        If UCase(Cells(c.Row, j)) = "A" And InStr(Cells(14, j), "µ") = 0 Then
          n = n + 1
          If n = 1 Then
            lig = lig + 2
            deb(lig, 1).Resize(2).Merge 'fusionne
            deb(lig, 1) = Cells(11, i) 'copie la date de la ligne 11
            col = 2
          End If
          deb(lig, col).Resize(2).Merge 'fusionne
          deb(lig, col) = Cells(12, j) 'copie les heures de la ligne 12
          col = col + 1
        End If
    Next j, i
  End If
End If
End Sub
Fichier (6).

A+
 

Pièces jointes

  • CAHIER D'APPELS(6).xlsm
    269.5 KB · Affichages: 82
Dernière édition:

ATHE RIOVELI

XLDnaute Occasionnel
BONSOIR job75, BONSOIR le FORUM.
Je vous adresse mes remerciement encore une fois pour votre excellent travail.
C'est justement ce que je voulais.
Dans le soucis de parfaire le chef-d'oeuvre entamé, je souhaiterais, pour la fin du trimestre,
avoir une fiches récapitulative des heures d'absences de la classe.
Je vous joint ici un exemplaire de la feuille souhaitée.

Aussi, voici comment nous calculons la moyenne de conduite d'un élève :

Soit N le nombre d’heures d’absences non justifié.
Le nombre de point retiré sur la note de conduite de l’élèves est : la partie entière du quotient (N divisé par 3).
La note de conduite de la classe est par exemple 16
Par exemple, l’élève DUPONT a eu 22 heures d’absences non justifiées. On lui retire E(22/3)=7 points.
Il a été sanctionné en conseil de discipline : -1 sur la note de conduite.
Ainsi la note de conduite de M. DUPONT est 16-(7+(-1))=16-7-1=8.

Je vous remercie pour votre contribution.
A+
 

Pièces jointes

  • NOTES DE CONDUITE POUR UN TRIMESTRE.xlsx
    8.8 KB · Affichages: 58

ATHE RIOVELI

XLDnaute Occasionnel
BONJOUR job75, bonjour le forum.
Non job75, j'ai peut-etre mal expliqué les choses. La feuille souhaitée contient des données dont on caonnait deja l'origine. Je viens d'ajouter les feuilles 1er trimestre, 2ème trimestre et 3ème trimsestre.
- Tout d'abord, il faudrait que les noms des élèves se retrouvent automatiquement dans ces feuilles (chose que vous savez très bien faire)
- ensuite, le totale des heures d’absences (en tenant compte de date debut et date fin) du trimestre.
- En ce qui concerne les heures justifiées, pas de macros ce sont les éducateurs qui renseignent les cellules.
Essayer de créer les tableaux des noms au niveau de 1er trim, 2ème trim et 3ème trim et j'essayerai d’insérer les formules SVP.
MERCI A+
 

Pièces jointes

  • CAHIER D'APPELS(6) (1).xlsm
    268 KB · Affichages: 62

job75

XLDnaute Barbatruc
Bonjour ATHE RIOVELI,

Pourquoi avez-vous supprimé le fractionnement de la feuille, chez vous ce n'est pas accepté ?

Alors dans ce cas il ne faut pas utiliser de [B2].Select, voyez ce fichier (6 bis).

Comme déjà dit j'arrête là.

Bonne continuation.
 

Pièces jointes

  • CAHIER D'APPELS(6 bis).xlsm
    271 KB · Affichages: 70

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel