0% ont trouvé ce document utile (0 vote)
65 vues10 pages

Exercices Bases Excel 21-30

Ce document présente une série d'exercices avancés sur le VBA Excel, axés sur la manipulation des tableaux, des collections et des événements d'objets. Les exercices incluent la création de tableaux unidimensionnels et dynamiques, l'utilisation de collections pour gérer des objets, et la réponse à des événements de sélection et de changement de cellule. Des projets pratiques, tels qu'un générateur de mot de passe et un nettoyage de données, permettent d'appliquer les concepts appris.

Transféré par

yero moussitou
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 PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
65 vues10 pages

Exercices Bases Excel 21-30

Ce document présente une série d'exercices avancés sur le VBA Excel, axés sur la manipulation des tableaux, des collections et des événements d'objets. Les exercices incluent la création de tableaux unidimensionnels et dynamiques, l'utilisation de collections pour gérer des objets, et la réponse à des événements de sélection et de changement de cellule. Des projets pratiques, tels qu'un générateur de mot de passe et un nettoyage de données, permettent d'appliquer les concepts appris.

Transféré par

yero moussitou
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 PDF, TXT ou lisez en ligne sur Scribd

Parfait !

Continuons notre exploration du VBA Excel avec des concepts plus avancés qui vous
permettront de créer des solutions encore plus complètes. Cette série d'exercices se concentre
sur les tableaux (Arrays), les collections, les événements d'objets et la création de
procédures plus complexes.

Document d'Exercices d'Application : Les Bases du


VBA Excel (Suite 3)
Ces exercices vous aideront à mieux gérer des ensembles de données en mémoire et à rendre
vos applications plus réactives aux actions de l'utilisateur.

Travail avec les Tableaux (Arrays)


Objectif : Stocker et manipuler des ensembles de données en mémoire pour des traitements
plus rapides et efficaces.
Exercice 21 : Déclarer et remplir un tableau unidimensionnel
1.​ Dans Module1, ajoutez le code suivant :​
Sub TableauUnidimensionnel()​
' Déclaration d'un tableau de 5 éléments (indices de 0 à 4 par
défaut)​
Dim mesFruits(4) As String ' Tableau de chaînes de caractères​

' Remplir le tableau​
mesFruits(0) = "Pomme"​
mesFruits(1) = "Banane"​
mesFruits(2) = "Cerise"​
mesFruits(3) = "Datte"​
mesFruits(4) = "Orange"​

' Afficher les éléments du tableau​
Dim i As Integer​
Dim message As String​
message = "Mes fruits préférés :" & vbCrLf​

For i = LBound(mesFruits) To UBound(mesFruits) ' LBound donne
l'indice le plus bas, UBound le plus haut​
message = message & "- " & mesFruits(i) & vbCrLf​
Next i​

MsgBox message, vbInformation, "Tableau de Fruits"​
End Sub​

2.​ Exécutez TableauUnidimensionnel.


Exercice 22 : Remplir un tableau à partir d'une plage Excel
1.​ Dans Feuil1, entrez des données dans la plage A1:A5 (ex: "Janvier", "Février", "Mars",
"Avril", "Mai").
2.​ Dans Module1, ajoutez :​
Sub RemplirTableauDepuisPlage()​
Dim mois() As Variant ' Utiliser Variant car la plage peut
contenir différents types​
Dim plageSource As Range​

Set plageSource = ThisWorkbook.Sheets("Feuil1").Range("A1:A5")​

' Charger la plage dans un tableau (le tableau sera
bidimensionnel même pour une seule colonne)​
mois = plageSource.Value​

' Afficher les éléments (le tableau est 1-basé ici à cause de
.Value)​
Dim i As Integer​
Dim message As String​
message = "Mois chargés depuis Excel :" & vbCrLf​

' Le tableau `mois` aura des dimensions (1 à 5, 1 à 1) pour
une colonne A1:A5​
For i = LBound(mois, 1) To UBound(mois, 1)​
message = message & "- " & mois(i, 1) & vbCrLf​
Next i​

MsgBox message, vbInformation, "Mois de l'Année"​
End Sub​

3.​ Exécutez RemplirTableauDepuisPlage.


Exercice 23 : Utiliser un tableau dynamique avec ReDim Preserve
1.​ Dans Module1, ajoutez :​
Sub TableauDynamique()​
Dim elements() As String ' Tableau dynamique (sans taille
fixe)​
Dim compteur As Integer​
Dim saisie As String​

compteur = 0​
Do​
saisie = InputBox("Entrez un élément (laissez vide pour
terminer) :", "Ajouter au Tableau")​

If Trim(saisie) <> "" Then​
' Redimensionner le tableau en conservant les données
existantes​
ReDim Preserve elements(compteur)​
elements(compteur) = saisie​
compteur = compteur + 1​
End If​
Loop While Trim(saisie) <> ""​

If compteur > 0 Then​
Dim i As Integer​
Dim message As String​
message = "Éléments saisis :" & vbCrLf​
For i = 0 To compteur - 1​
message = message & "- " & elements(i) & vbCrLf​
Next i​
MsgBox message, vbInformation, "Votre Tableau Dynamique"​
Else​
MsgBox "Aucun élément n'a été saisi.", vbInformation​
End If​
End Sub​

2.​ Exécutez TableauDynamique. Entrez plusieurs éléments, puis laissez la zone vide pour
terminer.

Travail avec les Collections


Objectif : Gérer des ensembles d'objets, avec la possibilité d'ajouter, supprimer et accéder aux
éléments par clé ou par index.
Exercice 24 : Créer et manipuler une collection simple
1.​ Dans Module1, ajoutez :​
Sub UtiliserCollection()​
Dim mesObjets As New Collection ' Crée une nouvelle collection​
Dim element As Variant​

' Ajouter des éléments à la collection​
mesObjets.Add "Premier élément", "Cle1" ' Ajoute avec une
clé​
mesObjets.Add "Deuxième élément", "Cle2"​
mesObjets.Add "Troisième élément" ' Ajoute sans clé
(sera indexé numériquement)​
mesObjets.Add "Quatrième élément", "Cle4"​

' Accéder aux éléments par index​
MsgBox "Deuxième élément (par index 2) : " &
mesObjets.Item(2), vbInformation​

' Accéder aux éléments par clé​
MsgBox "Élément avec Cle4 : " & mesObjets.Item("Cle4"),
vbInformation​

' Parcourir la collection​
Dim message As String​
message = "Contenu de la collection :" & vbCrLf​
For Each element In mesObjets​
message = message & "- " & element & vbCrLf​
Next element​

MsgBox message, vbInformation, "Ma Collection"​

' Supprimer un élément par clé​
On Error Resume Next ' Au cas où la clé n'existe pas​
mesObjets.Remove "Cle2"​
On Error GoTo 0​

MsgBox "Après suppression de 'Cle2', taille de la collection :
" & mesObjets.Count, vbInformation​

' Tenter d'accéder à un élément supprimé (devrait générer une
erreur si On Error n'est pas utilisé)​
' MsgBox mesObjets.Item("Cle2") ' Ceci causerait une erreur si
la gestion d'erreur n'est pas active​
End Sub​

2.​ Exécutez UtiliserCollection.

Événements d'Objets (Feuille de Calcul et Classeur)


Objectif : Exécuter du code automatiquement en réponse à des actions spécifiques de
l'utilisateur ou du système sur des objets Excel.
Exercice 25 : Répondre à un clic sur une cellule (Événement
Worksheet_SelectionChange)
1.​ Dans l'Éditeur VBA, double-cliquez sur Feuil1 (Feuil1) dans l'Explorateur de projets
(sous Microsoft Excel Objets). C'est ici que le code des événements de feuille doit être
placé.
2.​ Dans la liste déroulante de gauche (Objet), sélectionnez Worksheet.
3.​ Dans la liste déroulante de droite (Procédure), sélectionnez SelectionChange.
4.​ Le code suivant devrait apparaître :​
Private Sub Worksheet_SelectionChange(ByVal Target As Range)​
' Ce code s'exécute chaque fois que la sélection de cellule
change​

' Vérifier si la cellule sélectionnée est A1​
If Not Intersect(Target, Range("A1")) Is Nothing Then​
MsgBox "Vous avez sélectionné la cellule A1 !",
vbInformation, "A1 sélectionné"​
End If​

' Afficher l'adresse de la cellule sélectionnée dans la barre
de statut​
Application.StatusBar = "Cellule sélectionnée : " &
Target.Address(False, False)​

' Changer la couleur de fond de la cellule sélectionnée
(temporaire)​
' Prudence avec cette fonctionnalité, elle peut ralentir si
elle est trop complexe​
' Static derniereCellule As Range​
' If Not derniereCellule Is Nothing Then​
' derniereCellule.Interior.Color = xlNone ' Réinitialiser
l'ancienne couleur​
' End If​
' Target.Interior.Color = RGB(200, 255, 200) ' Nouvelle
couleur (vert clair)​
' Set derniereCellule = Target​

End Sub​

5.​ Retournez à Excel et cliquez sur différentes cellules, notamment A1. Observez le
comportement.
Exercice 26 : Répondre à une modification de cellule (Événement Worksheet_Change)
1.​ Restez dans le module de Feuil1.
2.​ Dans la liste déroulante de gauche (Objet), sélectionnez Worksheet.
3.​ Dans la liste déroulante de droite (Procédure), sélectionnez Change.
4.​ Ajoutez le code suivant (ajustez le code existant si la procédure est déjà là) :​
Private Sub Worksheet_Change(ByVal Target As Range)​
' Ce code s'exécute chaque fois que le contenu d'une cellule
change​

' Vérifier si la cellule modifiée est B1​
If Not Intersect(Target, Range("B1")) Is Nothing Then​
If Target.Value = "VBA" Then​
MsgBox "Vous avez écrit 'VBA' dans B1 ! Bravo !",
vbInformation​
Else​
MsgBox "Le contenu de B1 a été modifié en : " &
Target.Value, vbInformation​
End If​
End If​

' Exemple : Valider une entrée numérique dans la colonne C​
If Not Intersect(Target, Columns("C")) Is Nothing Then​
If Not IsNumeric(Target.Value) And Target.Value <> "" Then​
MsgBox "Veuillez n'entrer que des nombres dans la
colonne C.", vbExclamation​
Application.EnableEvents = False ' Désactiver
temporairement les événements pour éviter une boucle infinie​
Target.ClearContents ' Effacer le contenu non
numérique​
Application.EnableEvents = True ' Réactiver les
événements​
End If​
End If​
End Sub​

5.​ Retournez à Excel.


○​ Tapez "VBA" dans la cellule B1.
○​ Tapez du texte dans une cellule de la colonne C (ex: C1). Observez la validation.
Exercice 27 : Événement à l'ouverture du classeur (Workbook_Open)
1.​ Dans l'Éditeur VBA, double-cliquez sur ThisWorkbook dans l'Explorateur de projets.
C'est ici que le code des événements du classeur doit être placé.
2.​ Dans la liste déroulante de gauche (Objet), sélectionnez Workbook.
3.​ Dans la liste déroulante de droite (Procédure), sélectionnez Open.
4.​ Le code suivant devrait apparaître :​
Private Sub Workbook_Open()​
' Ce code s'exécute automatiquement à l'ouverture du classeur​

MsgBox "Bienvenue dans votre classeur VBA ! Heure d'ouverture
: " & Now, vbInformation, "Ouverture Classeur"​

' Optionnel : Activer une feuille spécifique​
' ThisWorkbook.Sheets("Feuil1").Activate​

' Optionnel : Cacher toutes les alertes au démarrage (à
réactiver à la fin de vos macros)​
' Application.DisplayAlerts = False​
End Sub​

5.​ Enregistrez votre classeur (par exemple, sous MonClasseurVBA.xlsm car il contient
des macros).
6.​ Fermez le classeur, puis rouvrez-le. Observez la boîte de message apparaître
automatiquement.

Projets Mini-Simulés (Intégration des Concepts)


Objectif : Mettre en pratique plusieurs concepts appris pour résoudre un petit problème.
Exercice 28 : Générateur de Mot de Passe Simple
1.​ Dans Module1, ajoutez :​
Function GenererMotDePasse(longueur As Integer) As String​
Dim caracteresPossibles As String​
caracteresPossibles =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#
$%^&*()_+"​
Dim mdp As String​
Dim i As Integer​

If longueur <= 0 Then​
GenererMotDePasse = ""​
Exit Function​
End If​

Randomize ' Initialise le générateur de nombres aléatoires​

For i = 1 To longueur​
' Sélectionne un caractère aléatoire​
mdp = mdp & Mid(caracteresPossibles,
Int((Len(caracteresPossibles) - 1 + 1) * Rnd + 1), 1)​
Next i​

GenererMotDePasse = mdp​
End Function​

Sub TesterGenerateurMDP()​
Dim longueurMDP As Integer​
Dim nouveauMDP As String​

longueurMDP = InputBox("Quelle longueur de mot de passe
souhaitez-vous ?", "Générateur de Mot de Passe", 10)​

If IsNumeric(longueurMDP) And longueurMDP > 0 Then​
nouveauMDP = GenererMotDePasse(longueurMDP)​
MsgBox "Votre nouveau mot de passe est : " & nouveauMDP,
vbInformation, "Mot de Passe Généré"​
' Optionnel : Écrire le mot de passe dans une cellule
(prudence pour la sécurité !)​
' Range("A1").Value = nouveauMDP​
Else​
MsgBox "Veuillez entrer une longueur numérique valide et
positive.", vbExclamation​
End If​
End Sub​

2.​ Exécutez TesterGenerateurMDP. Testez avec différentes longueurs.


Exercice 29 : Nettoyage de Données Basique
1.​ Dans Feuil1, entrez des données "sales" dans la colonne A et B. Exemples :
○​ A1: " Article 1 "
○​ B1: "1 234,56 €"
○​ A2: "Article 2"
○​ B2: " 54,00 $"
○​ A3: " Article 3"
○​ B3: "Texte non numérique"
2.​ Dans Module1, ajoutez :​
Sub NettoyageDonnees()​
Dim plageDonnees As Range​
Dim cellule As Range​
Dim derniereLigne As Long​

' Définir la plage de données (par exemple, colonnes A et B)​
With ThisWorkbook.Sheets("Feuil1")​
derniereLigne = .Cells(Rows.Count, 1).End(xlUp).Row​
Set plageDonnees = .Range("A1:B" & derniereLigne)​
End With​

If plageDonnees.Row = 1 And plageDonnees.Cells.Count = 1 And
IsEmpty(plageDonnees.Value) Then​
MsgBox "La plage de données est vide.", vbInformation​
Exit Sub​
End If​

Application.ScreenUpdating = False ' Désactiver la mise à jour
de l'écran​

For Each cellule In plageDonnees​
' Nettoyer les espaces superflus​
If TypeName(cellule.Value) = "String" Then​
cellule.Value = Trim(cellule.Value)​
End If​

' Convertir les valeurs numériques avec nettoyage de
symboles monétaires​
If Not IsEmpty(cellule.Value) And InStr(cellule.Address,
"$B$") > 0 Then ' Si c'est dans la colonne B​
Dim valeurNumerique As String​
valeurNumerique = Replace(cellule.Value, "€", "")​
valeurNumerique = Replace(valeurNumerique, "$", "")​
valeurNumerique = Replace(valeurNumerique, " ", "") '
Supprimer les espaces dans les nombres (ex: "1 234,56")​
valeurNumerique = Replace(valeurNumerique, ",",
Application.DecimalSeparator) ' S'assurer que le séparateur
décimal est correct​

On Error Resume Next ' Gérer les erreurs de conversion​
cellule.Value = CDbl(valeurNumerique)​
If Err.Number <> 0 Then​
MsgBox "Erreur de conversion pour la cellule " &
cellule.Address & ": " & cellule.Value, vbExclamation​
cellule.Interior.Color = RGB(255, 200, 200) '
Mettre en rouge les cellules avec erreur​
Err.Clear​
End If​
On Error GoTo 0​
End If​
Next cellule​

Application.ScreenUpdating = True ' Réactiver la mise à jour
de l'écran​
MsgBox "Nettoyage des données terminé. Vérifiez les cellules
mises en évidence en rouge.", vbInformation, "Nettoyage Terminé"​
End Sub​

3.​ Exécutez NettoyageDonnees. Observez les changements dans la feuille.


Exercice 30 : Sauvegarde Automatique avec Date/Heure
1.​ Dans Module1, ajoutez :​
Sub SauvegardeAutomatique()​
Dim cheminComplet As String​
Dim nomFichier As String​
Dim dossierCible As String​

' Définir le dossier cible (le même dossier que le classeur
actuel par défaut)​
dossierCible = ThisWorkbook.Path​

' Si le classeur n'est pas encore enregistré, demander à
l'utilisateur où sauvegarder​
If dossierCible = "" Then​
MsgBox "Le classeur doit être enregistré au moins une fois
pour utiliser la sauvegarde automatique.", vbExclamation​
Exit Sub​
End If​

' Construire le nom du fichier avec date et heure​
nomFichier = "Sauvegarde_" & Format(Now, "yyyymmdd_hhmmss") &
".xlsm"​
cheminComplet = dossierCible & "\" & nomFichier​

' Sauvegarder une copie du classeur​
On Error GoTo ErreurSauvegarde​
ThisWorkbook.SaveCopyAs cheminComplet​
MsgBox "Le classeur a été sauvegardé sous : " & cheminComplet,
vbInformation, "Sauvegarde Réussie"​

Exit Sub​

ErreurSauvegarde:​
MsgBox "Une erreur est survenue lors de la sauvegarde : " &
Err.Description, vbCritical​
End Sub​

2.​ Enregistrez votre classeur au moins une fois (sous un nom comme
MonProjetVBA.xlsm).
3.​ Exécutez SauvegardeAutomatique. Vérifiez le dossier pour trouver le fichier de
sauvegarde.
Ces exercices vous plongent dans des aspects plus pratiques et essentiels du VBA. N'oubliez
pas l'importance de :
●​ Débogage : Utilisez F8 pour le pas à pas, Ctrl+G pour la fenêtre Exécution.
●​ Comprendre On Error : Maîtrisez son utilisation pour créer des macros robustes.
●​ Pratiquer les objets : Plus vous manipulerez des Range, Worksheet, Workbook,
Application, plus vous serez à l'aise.
Continuez à explorer et à expérimenter !

Vous aimerez peut-être aussi