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.