Académique Documents
Professionnel Documents
Culture Documents
MAULE 2023-2024
INTRODUCTION
Cells(n°ligne, n°colonne).Value
End Sub
Faire un calcul arithmétique
Sub test()
Avec range:
Range(“B4”).value = range(“A4”).Value * range(“A4”).Value
Pour avoir la racine carrée
Range(“B4”).value = sqr((Range(“A4”).Value))
Ecrire du texte “Bonjour” + Copier le contenu d’une cellule dans une autre
cellule(C6→ D6)
Sub test()
End Sub
Accéder
Retourner dans Visual et sélectionner le Module 2
Déplacer le contenu d’une cellule dans une cellule d’une autre feuille
➔ Utiliser Le point d’exclamation pour indiquer que c’est une feuille
Sub testmultifeuille()
'recopier A1 de la feuille client vers A1 de la feuille produit
Range("produits!A1").Value = Range("clients!A1").Value
End Sub
Autre technique
Sub testmultifeuille()
'recopier A1 de la feuille client vers A1 de la feuille produit
Range("produits!A1").Value = Range("clients!A1").Value
Sub testmultifeuille()
Worksheets("clients").Activate
'dans la feuille client
Range("A10").Value = 200
Range("B10").Value = 200
End Sub
Sub testactivate()
Dim variable_compteur As Integer
Dim variable_chaine As String
End Sub
Rappel:
1 octet → 8bits (en anglais = byte)
1 tera → 1000 milliards d’octets
1 caractère =1 octet = 8 bits
variable_compteur = 50
Range("A5").Value = variable_compteur
End Sub
variable_compteur = 50
Range("A5").Value = variable_compteur
variable_compteur = variable_compteur + 1
'rafraichissement de A5 avec la nouvelle valeur
Range("A5").Value = variable_compteur
End Sub
Sub swaper()
Dim sumo As Integer
sumo = Range("C2").Value
Range("C2").Value = Range("D2").Value
Range("D2").Value = sumo
End Sub
26/09/2023
INTERRO -Correction
Consigne : Swaper les variables x et y (pas de range et cells)
X=5
Y = 10
Z=x
x=y
y=z
Sub swap()
Dim x, y, z As Integer
x=5
y = 10
z=x
x=y
y=z
Debug.Print x
Debug.Print y
Debug.Print z
End Sub
End Sub
End Sub
Avec les Cellules B1 et B2 (même exo)
Sub swapB1B2()
End Sub
Avec un “String”
Sub swapC1C2()
Dim x As String
X = Range("C1").Value
Range("C1").Value = Range("C2").Value
Range("C2").Value = x
End Sub
Les CONDITIONS
Ecrire un message
Sub IF_THEN()
If 3 > 2 Then
MsgBox "3 est plus grand que 2"
End If
End Sub
Sub IF_THEN()
If 3 > 2 Then
MsgBox "3 est plus grand que 2"
Else
MsgBox "condition du if non validée"
End If
End Sub
Sub compareA1A2()
Else
MsgBox "A2 est plus grand que A1"
End If
End Sub
Avec Elseif
Sub compareA1A2()
Else
MsgBox "A1 = A2"
End If
End Sub
Sub compter_les_a_dans_F()
compteur = 0
lettre = "a"
End If
End If
End If
If Range("F4").Value = lettre Then
compteur = compteur + 1
End If
End If
MsgBox "il y a " & compteur & " lettres a"
End Sub
03/10/2023
Devoir (ma réponse) :
Sub le_plus_grand()
nb1 = 10
nb2 = 11
nb3 = 12
Else
MsgBox "nb3 est le plus grand"
End If
End Sub
Sub le_plus_grand_dans_la_cellule()
Else
MsgBox (Range("C1").Value & " est le plus grand")
End If
End Sub
Sub du_plus_grand_au_plus_petit()
nb1 = 10
nb2 = 10
nb3 = 0
End Sub
10/10/2023
Test VBA
Ecrire un programme qui affiche le produit négatif, positif ou nul SANS
PASSER PAR UN CALCUL DE PRODUIT
Sub produit_neg_pos()
Dim x As Integer
Dim y As Integer
x = -4
y=5
ElseIf (x = 0) Or (y = 0) Then
MsgBox ("Produit nul")
Else
MsgBox ("Produit positif")
End If
End Sub
Sub produit_neg_pos()
Dim x As Integer
Dim y As Integer
x = Range("A1").Value
y = Range("B1").Value
ElseIf (x = 0) Or (y = 0) Then
MsgBox ("Produit nul")
Else
MsgBox ("Produit positif")
End If
End Sub
For compteur = 1 To 10
'affichage du compteur
Debug.Print compteur
Next compteur
End Sub
Sub compteur_colonne()
For compteur = 1 To 10
'affichage du compteur
Debug.Print compteur
Cells(compteur, 1).Value = compteur
Next compteur
End Sub
Sub compteur_colonne()
For compteur = 1 To 10
'affichage du compteur
Debug.Print compteur
Cells(1, compteur).Value = compteur
Next compteur
End Sub
Sub table_cinq()
Dim compteur As Integer
For compteur = 1 To 10
'affichage du compteur
Debug.Print compteur
Cells(compteur, 2).Value = compteur * 5
Next compteur
End Sub
Sub de_1à10_en_diagonale_vers_la_droite()
For compteur = 1 To 10
'affichage du compteur
Debug.Print compteur
Cells(compteur, compteur).Value = compteur
Next compteur
End Sub
17/10/2023
Ecrire → Debug.int
Lire → InputBox
Sub tracer_carre()
'bordure supérieure
Cells(1, compteur).Interior.Color = vbBlack
'bordure inférieure
Cells(9, compteur).Interior.Color = vbBlack
'bordure gauche
Cells(compteur, 1).Interior.Color = vbBlack
'bordure droite
Cells(compteur, 9).Interior.Color = vbBlack
Next compteur
End Sub
Sub ligne()
Next compteur_colonne
Next compteur_ligne
End Sub
Ecrire de 1 jusqu’à 25
Sub ligne()
Next compteur_colonne
Next compteur_ligne
End Sub
Next compteur
End Sub
Faire une boucle imbriquée
Sub boucle_imbriq()
Debug.Print "ligne = " & ligne & "colonne = " & colonne
Next colonne
Next ligne
End Sub
'ligne = ' , ligne, 'colonne = ' , colonne
Afficher de 1 à 25
Afficher exposant 2
Sub expo_De_deux()
chiffre = 1
Next colonne
Next ligne
End Sub
Le damier
Sub damier()
chiffre = 1
For ligne = 1 To 9
For colonne = 1 To 9
Cells(ligne, colonne).Value = chiffre
chiffre = chiffre + 1
If chiffre Mod 2 = 0 Then
Else
Cells(ligne, colonne).Interior.Color = vbYellow
End If
Next colonne
Next ligne
End Sub
07/11/2023
Faire un carré
Sub carre25()
hauteur = 10
Next ligne
End Sub
14/11/2023
Sub exo_damier()
For ligne = 1 To n
If ligne Mod 2 = 1 Then
cased = 2
Else
cased = 1
End If
For colonne = 1 To n
Cells(ligne, colonne).Value = cased
cased = 3 - cased
Next colonne
Next ligne
End Sub
Damier sans le if
Sub exo_SansIF1()
Dim h, premierecase, cased, ligne, colonne, x As Integer
h=6
cased = 1
premierecase = 1
For ligne = 1 To h
'initialiser cased
cased = premierecase
For colonne = 1 To h
Cells(ligne, colonne).Value = cased
cased = 3 - cased 'changement de valeur
Next colonne
premierecase = 3 - premierecase
Next ligne
End Sub
h=6
For ligne = 1 To h
For colonne = 1 To ligne
'colorier en noir
Cells(ligne, colonne).Interior.Color = vbBlack
Next colonne
Next ligne
End Sub
h=6
For ligne = 1 To h
For colonne = ligne To h ‘1-6; 2-6 ; 3-6
'colorier en noir
Cells(ligne, colonne).Interior.Color = vbBlack
Next colonne
Next ligne
End Sub
Autre pyramide
Sub pyramide()
h=6
For ligne = ligne To h
For colonne = h + 1 - ligne To h ‘6-6 ; 5-6 ; 4-6 ; 3-6
'colorier en noir
Cells(ligne, colonne).Interior.Color = vbBlack
Next colonne
Next ligne
End Sub
Sub pyramide()
'colorier en noir
Cells(ligne, colonne).Interior.Color = vbBlack
Next colonne
Next ligne
End Sub
BOUCLE « While »
Sub compterlesX()
For i = 1 To 99999
compteur = compteur + 1
End If
Next i
Debug.Print compteur
End Sub
Sub bouclewhile()
‘incrémenter le compteur
compteur = compteur + 1
End If
‘passer à la ligne suivante
ligne = ligne + 1
Debug.Print compteur
End Sub
Sub while10()
'remplir la 2de colonne avec 1 à 10
compteur = 1
21/11/2023
DEVOIR
Sub deviner ()
Dim x as Integer
x = 50
‘ecrire une boucle qui sans s’arrêter demande 1 chiffre à l’utilisateur jusqu’à ce qu’on
tape le bon chiffre x
Sub deviner()
Dim x, y As Integer
x = 50
While y <> x
If y = x Then
MsgBox " VOUS AVEZ TROUVÉ!"
Else
MsgBox "Pas le bon! Essayez encore: "
End If
Wend
End Sub
28/11/2023 (vacances)
05/12/2023
Rappel boucle For + While
Sub boucle_for()
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = i * 5
Next i
End Sub
Sub boucle_while()
'table de 5 dans la 2e colonne
'10 lignes
Wend
End Sub
BOUCLE « Do While »
➔ Faire ce qu’il y a dans la boucle au moins 1 fois puis on teste la condition puis
on voit si on peut reboucler
➔ Do… Loop While
Sub boucle_do_while()
Dim i As Integer
i=1
Do
Cells(i, 3).Value = i * 5
i=i+1
Loop While (i<=10)
End Sub
Do
InStr et Mid
Les fonctions InStr et Mid sont souvent utilisées pour manipuler des chaînes de
caractères.
InStr (In String):
La fonction InStr est utilisée pour trouver la position d'une sous-chaîne dans une
chaîne principale.
Syntaxe : InStr([start], string1, string2, [compare])
- start (optionnel) : spécifie la position de départ de la recherche.
-string1 : la chaîne dans laquelle vous recherchez.
-string2 : la sous-chaîne que vous recherchez.
-compare (optionnel) : spécifie le type de comparaison. La plupart du temps, vous
pouvez le laisser vide.
EXEMPLE :
vbaCopy code
Dim position As Integer position = InStr(1, "Hello World", "World")
MsgBox position ' Affichera 7, car "World" commence à la position 7 dans "Hello
World".
EXEMPLE 2 :
(from ChatGPT)
Sub validation_email()
End If
End Sub
Les FONCTIONS
'return True
verifier_email = True
Else
'return False
verifier_email = False
End If
End Function
Do
saisie = InputBox("Tapez votre email :")
Do
saisie = InputBox("Tapez votre email :")
result = verifier_email(saisie)
Code ASCII
Alt 64 = @
Alt 65 = A , Alt 66 = B, etc. // Alt 97 = a , Alt 98 = b, etc.
Sub boucle_1à100()
Dim i As Integer
For i = 1 To 100
Cells(i, 9).Value = i
Next i
End Sub
'MsgBox(Chr(65))
Dim i As Integer
For i = 1 To 26
Cells(i, 1).Value = Chr(64 + i)
Next i
End Sub
'MsgBox(Chr(65))
Dim i As Integer
For i = 1 To 26
Cells(i, 5).Value = Chr(96+ i)
Next i
End Sub
Remplir une colonne avec les puissances de 2 (2,4,8,16.. 2^x)
Sub puissanceDe2()
Dim i As Integer
Dim compteur As Integer
Wend
End Sub
12/12/2023
Les TABLEAUX
Sub creation_tableau()
For i = 0 To 9
monTableau(i) = i + 1
Next i
For i = 0 To 9
Cells(i + 1, 1) = monTableau(i)
Next i
End Sub
Créer un tableau (1 à10)
Sub creationTab2()
For i = 1 To 10
monTableau(i) = i
Next i
For i = 1 To 10
Cells(i, 2) = monTableau(i)
Next i
End Sub
Les fonctions :
LBound et UBound
LBound (Lower Bound) et UBound (Upper Bound) sont utilisées pour obtenir les
indices de limite inférieure et supérieure d'un tableau ou d'une collection. Ces
fonctions sont souvent utilisées dans le cadre de la manipulation des tableaux.
LBound :
La fonction LBound retourne l'indice de la limite inférieure d'un tableau dans une
dimension donnée.
Syntaxe : LBound(Array, [Dimension])
Array : Le tableau pour lequel vous souhaitez obtenir la limite inférieure.
Dimension : Facultatif. La dimension pour laquelle vous souhaitez obtenir la limite
inférieure. Par défaut, la première dimension est utilisée.
Exemple :
Dim myArray(1 To 10) As Integer
Dim lowerBound As Integer
lowerBound = LBound(myArray)
MsgBox "Lower Bound: " & lowerBound ' Affiche 1
UBound :
La fonction UBound retourne l'indice de la limite supérieure d'un tableau dans une
dimension donnée.
Syntaxe : UBound(Array, [Dimension])
Array : Le tableau pour lequel vous souhaitez obtenir la limite supérieure.
Dimension : Facultatif. La dimension pour laquelle vous souhaitez obtenir la limite
supérieure. Par défaut, la première dimension est utilisée.
Exemple :
upperBound = UBound(myArray)
MsgBox "Upper Bound: " & upperBound ' Affiche 10
Sub creationTab3()
monTableau(i) = i
Next i
For i = 1 To 10
Cells(i, 3) = monTableau(i)
Next i
End Sub
Sub tableau2D()
'remplir le tableau 2D
For i = 1 To 5
For j = 1 To 5
monTableau2D(i, j) = i + j
Next j
Next i
'visualiser le tableau dans une feuille de calcul
For i = 1 To 5
For j = 1 To 5
Next j
Next i
End Sub
Rechercher le mininum ou maximum dans un tableau + Créer des fonctions
max = tableau(LBound(tableau))
End If
Next i
'return
maximum = max
End Function
Sub test_maximum()
End Sub
ReDim
ReDim est utilisée pour redimensionner un tableau (array) existant. On peut l'utiliser pour
modifier la taille d'un tableau existant en spécifiant le nouveau nombre d'éléments dans une
ou plusieurs dimensions.
« Redim » est une instruction/ commande et pas une fonction car elle ne renvoie aucune
valeur.
→ Syntaxe de base :
ReDim NomDuTableau(NouvelleTaille)
Exemple :
Sub ExempleRedim()
Dim monTableau() As Integer
ReDim monTableau(1 To 5) ' Crée un tableau avec 5 éléments
' Utilisation du tableau initial
For i = LBound(monTableau) To UBound(monTableau)
monTableau(i) = i * 10
Next i
(from ChatGpt)
Next i
'return
multiplier_tableau = tableau_resultat
End Function
Sub tester_multiplier_tableau()
Dim i As Integer
Dim resultat As Variant
Dim monTableau(1 To 10) As Integer
monTableau(1) = 10
monTableau(2) = 27
monTableau(3) = 28
monTableau(4) = 62
monTableau(5) = 40
monTableau(6) = 66
monTableau(7) = 50
monTableau(8) = 2
monTableau(9) = 55
monTableau(10) = 42
'visualisation du resultat
For i = LBound(resultat) To UBound(resultat)
Next i
End Sub
Fonction multiplier_modifier_tableau
Next i
'return
multiplier_modifier_tableau = tableau_resultat
End Function
Dim i As Integer
Dim resultat As Variant
Dim monTableau(1 To 10) As Integer
monTableau(1) = 10
monTableau(2) = 27
monTableau(3) = 28
monTableau(4) = 62
monTableau(5) = 40
monTableau(6) = 66
monTableau(7) = 50
monTableau(8) = 2
monTableau(9) = 55
monTableau(10) = 42
Next i
End Sub
Lorsque vous utilisez ByVal, la valeur réelle de l'argument est passée à la procédure.
Cela signifie que toute modification apportée à la valeur du paramètre à l'intérieur de
la procédure n'affectera pas la variable d'origine à partir de laquelle la procédure a
été appelée.
Dans l’exemple qui suit :
→Le x est modifié à l'intérieur de ExampleByVal
→la variable num à l'extérieur de la procédure reste inchangée.
Sub ExampleByVal(ByVal x As Integer)
x=x+1
MsgBox "Inside Sub: " & x
End Sub
Sub TestByVal()
Dim num As Integer
num = 5
ExampleByVal num
MsgBox "Outside Sub: " & num
End Sub
REPONSE :
Inside Sub: 6
Outside Sub: 5
Lorsque vous utilisez ByRef, un lien vers la variable d'origine est passé à la
procédure.
Cela signifie que toute modification apportée à la valeur du paramètre à l'intérieur de
la procédure affectera également la variable d'origine.
Sub TestByRef()
Dim num As Integer
num = 5
ExampleByRef num
MsgBox "Outside Sub: " & num
End Sub
REPONSE :
Inside Sub: 6
Outside Sub: 6
(from ChatGpt)
Différent type de fonction (ByVal, Call, ByRef)
Sub Calcul()
End Sub
End Sub
indice_depart = LBound(tableau)
indice_max = UBound(tableau)
'boucle des passes
'comparaison et swap
If tableau(i) > tableau(i + 1) Then
Call swap(tableau(i), tableau(i + 1))
Next i
End Sub
--------------------------------------------------------------------------------------------------
Sub swap(ByRef tableau As Variant, i As Integer, ByRef j As Integer)
tampon = tableau(i)
tableau(i) = tableau(i + 1)
tableau(i + 1) = tampon
End If
End Sub
-------------------------------------------------------------------------------------------
Sub test_tri_bulle()
monTableau(1) = 10
monTableau(2) = 27
monTableau(3) = 28
monTableau(4) = 62
monTableau(5) = 40
monTableau(6) = 66
monTableau(7) = 50
monTableau(8) = 2
monTableau(9) = 55
monTableau(10) = 42
Next i
End Sub
indice_depart = LBound(tableau)
indice_max = UBound(tableau)
'boucle des passes
'comparaison et swap
If tableau(i) > tableau(i + 1) Then
Call swap(tableau, i, i + 1)
End If
Next i
Next passe
End Sub
tampon = tableau(i)
tableau(i) = tableau(j)
tableau(j) = tampon
End Sub
Sub test_tri_bulle()
Call tri_bulle(monTableau)
For i = LBound(monTableau) To UBound(monTableau)
Next i
End Sub
Exercice SUPP
Sub MettreEnSurbrillancePlusPetiteValeur()
Dim colonneA As Range
Dim celluleMin As Range
Sub AfficherTableMultiplication()
Dim i As Integer
Dim j As Integer
' Remplir le tableau de multiplication
For i = 1 To 10
For j = 1 To 10
Cells(j, i).Value = i * j
Next j
Next i
End Sub
Sub RechercherEtAfficherCoordonnees()
Dim ws As Worksheet
Dim rechercheCellule As Range
Explication du code :
Sub RechercherNombre999()
Dim ws As Worksheet
Dim rechercheCellule As Range