Vous êtes sur la page 1sur 10

Tutorial/rappels Utilisation de VBA (visual basic application) sous excel

I./ Fentre de base _ explorateur de projet (feuille, module,) _ proprits des pages _ page de code Rmq : tout ce qui est modifi sur la page de proprit est report sur la page du classeur excel. (fonction intressante : page cach, page trs cach, nom de page) Utilisation des macros. Les macros sont des mini programme qui permettent de modifier rapidement la feuilledu classeur excel. On les retrouve dans Outil>macros>. Exemple de code : Pour coder sur la feuille de classeur 1, on crit : Sub julien() End Sub Le nom de la macro saffiche sous le nom Feuil1.julien

II./ Fonctions de base (code vb) Range(cellule) permet de slectionner la cellule Value dfinie la valeur chiffre de la cellule. Formula se dfinit par "=A1+A2" Range("A1").Value = 34 Range("A2").Value = 66 Range("A3").Formula = "=A1+A2" Range("A1").Select On peut ensuite rajouter une ligne de code pour dfinir la moyenne par exemple : Range("A4").FormulaR1C1 = "=AVERAGE(R[-3]C:R[-1]C)" Pour dmarrer un code : on tape sub project ( ) et on obtient 2 lignes de codes : Sub project() End Sub Range (A1:A3) est lensemble des cellules A1 A3. Range (A1;A3) dfini la cellule A1 + A3. Rpter une action Do until Loop Activecell Lorsqu'on slectionne une plage de cellules, c'est la cellule en haut gauche qui retourne une valeur.

Imposer une formule : Range("B5").Formula = "=RoundUp(3.25,0)"

Dplacement la case la plus en bas la case la plus droite la case la plus gauche Selection.End(xlDown).Select Selection.End(xlToRight).Select Selection.End(xlToLeft).Select

la case la plus haute Une case vers le bas Une case vers le haut Une case vers la gauche Une case vers la droite

Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.Offset(-1, 0).Range("A1").Select ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell.Offset(0, 1).Range("A1").Select

Imposer une valeur dans une cellule Dans la cellule active Dans n'importe quelle cellule Dans une cellule nomme Insertion d'un calcul ActiveCell.FormulaR1C1 = "XXX" Range("d6").Value = "XXX" Range("GainTotal").FormulaR1C1 = 99 Range("GainTotal") = Range("B12") * 2

Imposer une couleur dune slection Range("A3:b8").Interior.Color = 255 Pour vrifier quune cellule nest pas vide If Not IsEmpty(ActiveCell.Value) Then MsgBox "y'a kekchose" End If III./ Fonctions spciales

IV./ Barre doutils On Error GoTo FaireErreur Dim BarreCommande As CommandBar Dim Prop As PropertyTest Range("A1").Value = "Application" Range("B1").Value = "BuiltIn"

Range("C1").Value = "Context" Range("D1").Value = "Controls" Range("E1").Value = "Creator" Range("F1").Value = "Enabled" Range("G1").Value = "Height" Range("H1").Value = "Index" Range("I1").Value = "Left" Range("J1").Value = "Name" Range("K1").Value = "NameLocal" Range("L1").Value = "Parent" Range("M1").Value = "Position" Range("N1").Value = "Protection" Range("O1").Value = "RowIndex" Range("P1").Value = "Top" Range("Q1").Value = "Type" Range("R1").Value = "Visible" Range("S1").Value = "Width" Range("A2").Select For Each BarreCommande In CommandBars ActiveCell.FormulaR1C1 = BarreCommande.Application ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.BuiltIn ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Context ActiveCell.Offset(0, 1).Range("A1").Select

ActiveCell.FormulaR1C1 = BarreCommande.Controls ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Creator ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Enabled ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Height ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Index ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Left ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Name ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.NameLocal ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Parent ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Position ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Protection ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.RowIndex ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Top

ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Type ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Visible ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = BarreCommande.Width ActiveCell.Offset(1, -18).Range("A1").Select Next Exit Sub FaireErreur: ActiveCell.FormulaR1C1 = "ERREUR" Resume Next V./ Les boucles Loop = Boucle (Faire une boucle, recommencer la boucle) Do = Faire (Effectuer, faire les actions qui suivent) While = Tant que (Tant que X = 1, ou Tant que le mot de passe est erron) Until = Jusqu' ce que (Jusqu' ce que X = 10, ou Jusqu' ce que le mot de passe soit correct)

Premier programme : Simple utilisation de InputBox, sans autre Sub TestLoop() Dim Reponse As Integer Reponse = InputBox("Entrez un chiffre") End Sub Ce programme demande un chiffre encore et encore tant que l'utilisateur s'vertue a entrer un autre chiffre que 5 Sub TestLoop2() Dim Reponse As Integer Do Reponse = InputBox("Entrez un chiffre")

Loop While Reponse <> 5 End Sub Ce programme fait exactement l'inverse : Il Continue tant que l'utilisateur entre 5 Sub TestLoop3() Dim Reponse As Integer Do Reponse = InputBox("Entrez un chiffre") Loop While Reponse = 5 End Sub On ajoute ici du code avant la boucle, et aprs, simplement pour montrer comment gnralement un programme se droule : Une partie d'introduction, la boucle elle-mme et ensuite, la conclusion. Sub TestLoop4() Dim Reponse As Integer MsgBox "Dbut" ' Une seule fois avant la boucle Do Reponse = InputBox("Entrez un chiffre") Loop While Reponse = 5 MsgBox "Fin" ' Une seule fois aprs la boucle End Sub Avec Do While, le programme n'entre pas ncessairement dans la boucle. Si on entre le bon mot de passe immdiatement, le programme s'arrte. Dans l'exemple d'avant on faisait DO quelque chose WHILE une condition, donc on faisait au moins une fois cette chose, tandis qu'ici, c'est DO WHILE une condition, on fait quelque chose. Le programme regarde IMMEDIATEMENT si la condition est satisfaite Sub TestLoop5() Dim Reponse As String Reponse = InputBox("Entrez le mot de passe") Do While Reponse <> "youpi" Reponse = InputBox("Mauvaise rponse. Essayez encore") Loop End Sub

Ici, par contre, avec le while a la fin de la boucle, le' programme fait AU MOINS une fois "Mauvaise rponse",' meme si l'utilisateur rpond tout de suite bien Sub TestLoop6() Dim Reponse As String Reponse = InputBox("Entrez le mot de passe") Do Reponse = InputBox("Mauvaise rponse. Essayez encore") Loop While Reponse <> "youpi" End Sub Ici, le principe est le mme, mais on utilise UNTIL (Jusqu'a ce que). En fait, on peut passe toute sa vie de programme en utilisant exclusivement WHILE sans jamais utiliser UNTIL. Il suffit de changer la tournure de phrase. WHILE Reponse = "youpi" veut dire exactement la mme chose que UNTIL Reponse <> "youpi", Mais dans certains cas, c'est plus pratique d'utiliser WHILE, et dans d'autres cas UNTIL, mais c'est trs subjectif. Sub TestLoop7() Dim Reponse As String Reponse = InputBox("Entrez le mot de passe") Do Until Reponse = "youpi" Reponse = InputBox("Mauvaise rponse. Essayez encore") Loop End Sub Application complte de boucles pour l'obtention d'un mot de passe. On fait une premire demande de mot de passe : "Entrez le mot de passe". Et seulement si l'utilisateur se plante au premier essai, on lui signale qu'il s'est tromp ("Mauvaise rponse. Essayez encore"), et ce message, il va le voir jusqu' ce qu'il arrte de se tromper (1 fois, 5 fois ou mille fois s'il est vraiment trs maladroit, ou s'il a la maladie de parkinson.). A la fin, quand il a enfin tap le bon mot de passe, le programme lui dit en combien d'essais il a trouv. Sub MotPasse() ' Dclaration des variables Dim Reponse As String ' Contient l'essai de mot de passe Dim NombreEssai As Integer ' Compte les essais ' Premiere demande : Reponse = InputBox("Entrez le mot de passe") ' De tout faon, on doit faire au moins 1 essai NombreEssai = 1 ' Faire la boucle JUSQU'A CE QUE L'utilisateur entre youpi

Do Until Reponse = "youpi" Reponse = InputBox("Mauvaise rponse. Essayez encore") ' On augmente le nombre d'essais : NombreEssai = NombreEssai + 1 Loop ' Fin de la boucle ' Message de bienvenue final. Si c'est trouv en un essai, ' crire au singulier, et crire au pluriel ' si c'est en plusieurs essais : If NombreEssai = 1 Then MsgBox "Mot de passe trouv au premier Essai" Else MsgBox "Mot de passe trouv en " & NombreEssai & " Essais" End If End Sub Sub proTest() Sheets("Sheet1").Select Range("C1").Select Do Until Selection.Offset(0, -2).Value = "" Selection.Value = Selection.Offset(0, -2).Value & " " & Selection.Offset(0, -1) Selection.Offset(1, 0).Select Loop Range("A1").Select End Sub

La fonction valeur cible. VC (Le taux d'intrt propos par la banque ; Combien de versements vous faites (Combien d'annes) ; Combien vous mettez par anne ;;1)

Site pas mal (tuto)

http://www.info-3000.com/vbvba/vbadiverseastuce.php http://www.excel-vba.com/vba-prog-1-5-new-macro.htm

Vous aimerez peut-être aussi