0% ont trouvé ce document utile (0 vote)
6 vues17 pages

Formulaire VBA pour gestion élèves Excel

Transféré par

ousmane bamba
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues17 pages

Formulaire VBA pour gestion élèves Excel

Transféré par

ousmane bamba
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

1) Création du formulaire et des feuilles (rapide)

1. Ouvre Excel, appuie ALT+F11 pour l’éditeur VBA.

2. Insère un UserForm et nomme-le frmStudent (propriété (Name)


= frmStudent).

3. Ajoute les contrôles suivants avec exactement ces noms


(Name) — texte suivant en Caption utile mais pas strictement
nécessaire :

Labels et TextBoxes :

txtLastName (Nom)

txtFirstName (Prénom)

txtArabicName (Nom en arabe)

txtDOB (Date de naissance — format « yyyy-mm-dd » ou « dd/mm/yyyy »)

txtBirthPlace (Lieu de naissance)

txtFather (Père)

txtMother (Mère)

cboClass (ComboBox pour la classe)


txtTuition (Scolarité — montants, valeur numérique)

imgPhoto (Image control pour afficher la photo)

txtPhotoPath (TextBox — chemin photo, peut être caché)

txtPhone (Numéro de téléphone — format international sans « + »)

txtWhatsAppMsg (TextBox, message WhatsApp par défaut)

txtAmountPaid (Montant payé)

txtRemaining (Reste à payer — lecture seule possible)

CommandButtons :

btnBrowsePhoto (Parcourir photo)

btnAdd (Ajouter / Nouveau)

btnSave (Enregistrer)

btnDelete (Supprimer)

btnSearch (Rechercher)

btnPrintReceipt (Imprimer reçu / Aperçu)


btnSendWhatsApp (Envoyer WhatsApp)

btnClose (Fermer)

4. Dans l’Explorateur de projet, ajoute un Module standard


(Module1).

5. Crée deux feuilles dans le classeur avec les noms EXACTS :

Students — va contenir la table ; la macro créera l’en-tête si nécessaire.

Receipt — feuille modèle pour impression du reçu (le code remplira


quelques cellules).

2) Code à coller

A) Module standard (Module1)

Insère ce code dans un module standard :


Option Explicit

Sub ShowStudentForm()

[Link]

End Sub

B) Code du UserForm (frmStudent)

Double-clique sur frmStudent et colle tout ce bloc :

Option Explicit

‘ ---------- INIT ----------

Private Sub UserForm_Initialize()

‘ Initialiser combo classes (modifier selon besoin)

With [Link]

.AddItem « CP »

.AddItem « CE1 »

.AddItem « CE2 »

.AddItem « CM1 »

.AddItem « CM2 »

End With

‘ Default message for WhatsApp

[Link] = « Bonjour, ceci est un message de l’école


concernant le dossier de l’élève. »

‘ Ensure sheets exist (create if needed)

EnsureSheetsExist
EnsureStudentsHeader

ClearForm

End Sub

‘ ---------- HELPERS ----------

Private Sub EnsureSheetsExist()

On Error Resume Next

Dim sh As Worksheet

Set sh = [Link](« Students »)

If sh Is Nothing Then

Set sh =
[Link](After :=[Link](ThisWor
[Link]))

[Link] = « Students »

End If

Set sh = [Link](« Receipt »)

If sh Is Nothing Then

Set sh =
[Link](After :=[Link](ThisWor
[Link]))

[Link] = « Receipt »

‘ Simple template initialisation

With sh

.[Link]

.Range(« A1 »).Value = « Reçu de paiement – École »

.Range(« A3 »).Value = « Nom : »

.Range(« A4 »).Value = « Prénom : »

.Range(« A5 »).Value = « Classe : »

.Range(« A6 »).Value = « Date : »


.Range(« A7 »).Value = « Montant payé : »

.Range(« A8 »).Value = « Reste à payer : »

End With

End If

On Error GoTo 0

End Sub

Private Sub EnsureStudentsHeader()

Dim ws As Worksheet

Set ws = [Link](« Students »)

If [Link]([Link](1)) = 0 Then

[Link](« A1 :Q1 »).Value = Array( _

« ID », « Nom », « Prénom », « NomArabe », « DateNaiss »,


« LieuNaiss », _

« Père », « Mère », « Classe », « Scolarité », « PhotoPath »,


« Téléphone », « WhatsAppMsg », _

« MontantPayé », « Reste », « DateEnregistrement », « Notes »)

End If

End Sub

Private Function NextID() As Long

Dim ws As Worksheet : Set ws =


[Link](« Students »)

Dim lastRow As Long

lastRow = [Link]([Link], « A »).End(xlUp).Row

If lastRow < 2 Then NextID = 1 Else NextID = [Link](lastRow,


« A »).Value + 1

End Function

Private Sub ClearForm()


[Link] = « «

[Link] = « «

[Link] = « «

[Link] = « «

[Link] = « «

[Link] = « «

[Link] = « «

[Link] = « «

[Link] = « «

[Link] = « «

[Link] = Nothing

[Link] = « «

[Link] = « Bonjour, ceci est un message de l’école


concernant le dossier de l’élève. »

[Link] = « «

[Link] = « «

End Sub

Private Function FindRowByID(idVal As Long) As Long

Dim ws As Worksheet : Set ws =


[Link](« Students »)

Dim rng As Range

On Error Resume Next

Set rng = [Link](« A :A »).Find(What :=idVal, LookIn :=xlValues,


LookAt :=xlWhole)

On Error GoTo 0

If rng Is Nothing Then FindRowByID = 0 Else FindRowByID = [Link]

End Function
Private Function FindFirstRowByName(lastName As String, firstName As
String) As Long

Dim ws As Worksheet : Set ws =


[Link](« Students »)

Dim r As Long, lastR As Long

lastR = [Link]([Link], « A »).End(xlUp).Row

For r = 2 To lastR

If LCase(Trim([Link](r, « B »).Value)) = LCase(Trim(lastName)) _

And LCase(Trim([Link](r, « C »).Value)) = LCase(Trim(firstName))


Then

FindFirstRowByName = r

Exit Function

End If

Next r

FindFirstRowByName = 0

End Function

‘ Strip non-numeric characters from phone

Private Function DigitsOnly(s As String) As String

Dim i As Long, ch As String, out As String

Out = « «

For i = 1 To Len(s)

Ch = Mid(s, i, 1)

If ch >= « 0 » And ch <= « 9 » Then out = out & ch

Next i

DigitsOnly = out

End Function

‘ ---------- BUTTONS / ACTIONS ----------

Private Sub btnBrowsePhoto_Click()


Dim fd As FileDialog

Set fd = [Link](msoFileDialogFilePicker)

With fd

.Title = « Choisir la photo de l’élève »

.[Link]

.[Link] « Images », « *.jpg ; *.jpeg ; *.png ; *.bmp ; *.gif »

.AllowMultiSelect = False

If .Show = -1 Then

[Link] = .SelectedItems(1)

On Error Resume Next

[Link] = LoadPicture([Link])

On Error GoTo 0

End If

End With

End Sub

Private Sub btnAdd_Click()

ClearForm

[Link]

End Sub

Private Sub btnSave_Click()

Dim ws As Worksheet : Set ws =


[Link](« Students »)

Dim nextR As Long

Dim paid As Double, tuition As Double, remainder As Double

‘ Validation minimale

If Trim([Link]) = « « Or Trim([Link]) = « «
Then
MsgBox « Veuillez entrer le nom et le prénom. », vbExclamation

Exit Sub

End If

If Not IsNumeric([Link]) Then [Link] = 0

If Not IsNumeric([Link]) Then [Link] =


0

Tuition = CDbl([Link])

Paid = CDbl([Link])

Remainder = tuition – paid

If remainder < 0 Then remainder = 0

[Link] = Format(remainder, « 0.00 »)

‘ Vérifier si enregistrement existe (chercher par nom+prénom)

Dim foundRow As Long

foundRow = FindFirstRowByName([Link],
[Link])

If foundRow = 0 Then

nextR = [Link]([Link], « A »).End(xlUp).Row + 1

[Link](nextR, « A »).Value = NextID()

Else

nextR = foundRow

End If

With ws

.Cells(nextR, « B »).Value = [Link]

.Cells(nextR, « C »).Value = [Link]


.Cells(nextR, « D »).Value = [Link]

.Cells(nextR, « E »).Value = [Link]

.Cells(nextR, « F »).Value = [Link]

.Cells(nextR, « G »).Value = [Link]

Il s’agit d’une demande complexe qui nécessite une base de données


backend et une interface utilisateur VBA. Un code complet et fonctionnel
pour une telle application serait très long. Cependant, je peux vous fournir
les étapes clés et des extraits de code VBA pour vous aider à démarrer.

1. Création de l’UserForm

D’abord, vous devez créer l’interface visuelle dans l’éditeur VBA d’Excel.

* Ouvrez Excel et appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
* Dans le menu, cliquez sur Insertion > UserForm.

* Vous pouvez maintenant faire glisser les contrôles (Label, TextBox,


ComboBox, Image, CommandButton) depuis la Boîte à outils pour
concevoir votre formulaire selon la structure que vous avez décrite.

Voici une liste des contrôles que vous devrez ajouter et leurs noms que
nous utiliserons dans le code :

* Labels pour les titres (Nom, Prénom, etc.).

* TextBox pour les champs de texte (ex : TextBoxNom, TextBoxPrenom,


TextBoxMontantPaye, etc.).

* ComboBox pour la classe et le niveau de scolarité (ex :


ComboBoxClasse, ComboBoxScolarite).

* Image pour la photo de l’élève (ex : ImagePhoto).

* CommandButton pour les actions (ex : CommandButtonAjouter,


CommandButtonImprimer, CommandButtonEnvoyerSMS).

2. Code VBA pour les fonctionnalités

Le code ci-dessous est un exemple simplifié. Il suppose que les données


sont stockées dans une feuille de calcul nommée « BaseDeDonnees ».

Code d’initialisation de l’UserForm

Ce code s’exécute lorsque le formulaire s’ouvre. Il peut servir à remplir les


ComboBox avec les options de classe et de scolarité.

Private Sub UserForm_Initialize()

‘ Remplir la ComboBox des classes

With ComboBoxClasse

.AddItem « CP »

.AddItem « CE1 »

.AddItem « CE2 »

.AddItem « CM1 »

.AddItem « CM2 »

End With

‘ Remplir la ComboBox de la scolarité

With ComboBoxScolarite
.AddItem « 2024-2025 »

.AddItem « 2025-2026 »

End With

End Sub

Code pour ajouter un élève

Ce code s’exécute lorsque vous cliquez sur un bouton pour ajouter un


nouvel élève. Il prend les informations des champs et les insère dans la
première ligne vide de la feuille de calcul.

Private Sub CommandButtonAjouter_Click()

Dim ws As Worksheet

Set ws = [Link](« BaseDeDonnees »)

Dim ligneVide As Long

ligneVide = [Link]([Link], « A »).End(xlUp).Row + 1

‘ Enregistrement des données dans la feuille

[Link](ligneVide, 1).Value = [Link]

[Link](ligneVide, 2).Value = [Link]

[Link](ligneVide, 3).Value = [Link]

‘ … et ainsi de suite pour tous les champs

‘ Enregistrement du paiement

[Link](ligneVide, 10).Value = CDbl([Link])

[Link](ligneVide, 11).Value = CDbl([Link])

‘ Effacer les champs du formulaire après l’ajout

Call EffacerChamps
MsgBox « Élève ajouté avec succès ! », vbInformation

End Sub

‘ Sub pour effacer les champs

Private Sub EffacerChamps()

Dim ctl As Control

For Each ctl In [Link]

If TypeName(ctl) = « TextBox » Or TypeName(ctl) = « ComboBox »


Then

[Link] = « «

End If

Next ctl

[Link] = Nothing ‘ Efface la photo

End Sub

Code pour gérer les paiements

Vous aurez besoin de code pour calculer le reste à payer


automatiquement. Ce code pourrait être déclenché chaque fois que la
valeur du montant payé change.

Private Sub TextBoxMontantPaye_Change()

Dim montantTotal As Double

Dim montantPaye As Double

Dim resteAPayer As Double

‘ Définir le montant total de la scolarité

‘ (Vous pouvez le faire en fonction de la classe ou le mettre en dur)

montantTotal = 5000 ‘ Exemple, remplacez par votre montant

‘ Vérifier si le champ n’est pas vide et est un nombre

If IsNumeric([Link]) Then
montantPaye = CDbl([Link])

resteAPayer = montantTotal – montantPaye

[Link] = Format(resteAPayer, « 0.00 »)

Else

[Link] = « «

End If

End Sub

Code pour l’impression du reçu de paiement

Ce code crée un reçu à partir des informations du formulaire et l’imprime.


Il est recommandé de créer un modèle de reçu dans une feuille Excel
séparée, puis de le remplir et de l’imprimer via VBA.

Private Sub CommandButtonImprimer_Click()

Dim wsRecu As Worksheet

Set wsRecu = [Link](« RecuModele »)

‘ Remplir le modèle de reçu

[Link](« B2 »).Value = Now() ‘ Date

[Link](« B3 »).Value = [Link] & « « &


[Link] ‘ Nom de l’élève

[Link](« B4 »).Value = [Link] ‘ Classe

[Link](« B5 »).Value = CDbl([Link]) ‘


Montant payé

[Link](« B6 »).Value = CDbl([Link]) ‘ Reste


à payer

‘ Imprimer le reçu

[Link]

MsgBox « Reçu imprimé ! », vbInformation

End Sub
Code pour l’envoi de SMS

Pour cela, il n’y a pas de fonctionnalité intégrée dans Excel. Vous pouvez
utiliser une API web (comme Twilio, Vonage, etc.) qui vous permet
d’envoyer des SMS via une requête http. Voici un exemple du lien que
vous pourriez générer :

Private Sub CommandButtonEnvoyerSMS_Click()

Dim numero As String

Dim message As String

Dim lienSMS As String

Numero = [Link]

Message = « Bonjour, le solde de la scolarité de votre enfant est de « &


[Link] & « . »

‘ Encodage de l’URL du message pour qu’il soit compatible

Message = Replace(message, « « , « %20 »)

‘ Voici un lien standard pour ouvrir l’application SMS sur un ordinateur


(non fiable)

‘ ou sur un téléphone mobile.

‘ Note : La fiabilité dépend du système d’exploitation et des applications


installées.

lienSMS = « sms : » & numero & « ?body= » & message

‘ Pour l’envoi d’SMS via API, vous auriez besoin de code plus complexe

‘ avec des requêtes web (par exemple, en utilisant [Link])

‘ ou une macro spécifique fournie par le service d’API.

‘ Ouvre le lien dans le navigateur par défaut

[Link] Address :=lienSMS, NewWindow :=True


End Sub

Ce code génère un hyperlien sms : qui tente d’ouvrir l’application de


messagerie par défaut du système d’exploitation avec le numéro et le
message pré-remplis. La fiabilité de cette méthode est limitée.

Pour un système d’envoi de SMS fiable, il est fortement recommandé


d’utiliser une API SMS. Cela nécessite une configuration et l’ajout de
références (comme Microsoft WinHTTP Services) dans votre projet VBA.

N'oubliez pas d'adapter ce code à la structure de vos colonnes dans la


feuille de calcul et aux noms de vos contrôles UserForm. Il s’agit d’une
base sur laquelle vous pouvez construire votre application de gestion.

Vous aimerez peut-être aussi