vba – visual basic application s2 · elise prigent – bba 1a !!! ! vba – visual basic...

19
Elise PRIGENT – BBA 1A VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge les macros. À faire avant de commencer : 1) Rajouter l’onglet « développeur » (office => options => afficher l’onglet « développeur ») 2) Ouvrir VBA (« développeur » Visual basic) 3) Après dans Visual Basic (« Outils » - « Option » - On coche « déclaration variable obligatoire ») Attention, si ce n’est pas cocher il n’y aura pas marquer « option explicit » ! 4) Pour ouvrir une page VBA blanche (« Insertion » puis Module) Vocabulaire… Objets de mêmes natures : « collections de feuilles de calcul » Agir via la « méthode » : Agir sur un objet L’événement correspond à quand l’utilisateur agit pour déclencher un message (exemple : Bonjour !) Une constance : donnée valeur unique (taux de TVA par exemple) Nominale : que l’on déclare soit même Prédéfini : déjà défini par VBA Constante Variable : Valeur qui a pour but d’évoluer. Nouvel opérateur (dit « de concaténation » signifie que l’on colle des éléments les uns avec les autres) : « & » Quelques généralités… - Une instruction commence toujours par « sub » - Une apostrophe permet d’induire un commentaire - Les instructions finissent toujours par End sub - /!\ Impossible de revenir en arrière après une macro. - Séparateur toujours un point jamais une virgule. - Un nombre ne peut avoir que 15chiffres - Espace _ : indique que la formule n’est pas fini et qu’il y a un retour à la ligne. - F8 : faire exécuter une action. ATTENTION Il faut que le jaune soit passé sur la ligne en question pour que celle-ci soit exécutée Sur la photo : - Icône flèche verte : mettre en application ce qui a été fait. - F8 permet d’aller “pas à pas” et donc de trouver où est le problème dans le calcul. Ajouter une macro à la barre d’outil rapide Créer un bouton permettant la mise en place de la procédure. Afficher en dessous du ruban Le visé, clique droit, autres commandes, « personnaliser », « macro », ajouter, modifier, ok. Dans la barre ensuite nous aurons l’icône associer à la commande. OU Sélectionner barre déroulante, sélectionner macro « mise en forme », ajouter. Modifier pour choisir une icône.

Upload: nguyenthuan

Post on 10-Sep-2018

245 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

  Elise PRIGENT – BBA 1A

   

   

VBA – Visual Basic Application S2

Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge les macros.

À faire avant de commencer :

1) Rajouter l’onglet « développeur » (office => options => afficher l’onglet « développeur ») 2) Ouvrir VBA (« développeur » à Visual basic) 3) Après dans Visual Basic (« Outils » - « Option » - On coche « déclaration variable obligatoire »)

Attention, si ce n’est pas cocher il n’y aura pas marquer « option explicit » ! 4) Pour ouvrir une page VBA blanche (« Insertion » puis Module)

Vocabulaire… Objets de mêmes natures : « collections de feuilles de calcul » Agir via la « méthode » : Agir sur un objet L’événement correspond à quand l’utilisateur agit pour déclencher un message (exemple : Bonjour !) Une constance : donnée valeur unique (taux de TVA par exemple) Nominale : que l’on déclare soit même Prédéfini : déjà défini par VBA Constante ≠ Variable : Valeur qui a pour but d’évoluer. Nouvel opérateur (dit « de concaténation » signifie que l’on colle des éléments les uns avec les autres) : « & » Quelques généralités…

- Une instruction commence toujours par « sub » - Une apostrophe permet d’induire un commentaire - Les instructions finissent toujours par End sub - /!\ Impossible de revenir en arrière après une macro. - Séparateur toujours un point jamais une virgule. - Un nombre ne peut avoir que 15chiffres - Espace _ : indique que la formule n’est pas fini et qu’il y a un retour à la ligne. - F8 : faire exécuter une action. ATTENTION Il faut que le jaune soit passé sur la ligne en question

pour que celle-ci soit exécutée

Sur la photo : - Icône flèche verte : mettre en application ce qui a été fait. - F8 permet d’aller “pas à pas” et donc de trouver où est le problème dans le calcul.

Ajouter une macro à la barre d’outil rapide Créer un bouton permettant la mise en place de la procédure. Afficher en dessous du ruban Le visé, clique droit, autres commandes, « personnaliser », « macro », ajouter, modifier, ok. Dans la barre ensuite nous aurons l’icône associer à la commande. OU Sélectionner barre déroulante, sélectionner macro « mise en forme », ajouter. Modifier pour choisir une icône.

Page 2: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

    Elise PRIGENT – BBA 1A

   

   

Liste des arguments : Les arguments doivent avoir un nom et un type. Différents types d’arguments :

- Byte, intégrer, long permettent de décrire des valeurs entières - Single, double, currency permettent de définir des données réelles (avec des décimales)

= correspondent à des valeurs numériques - Date, boolean (variables logiques) - Variant (à utiliser le moins possible à « fourre-tout ») - String (chaine de caractère ; adresse, ville.. la taille = nombre de caractères) - Shape : « objets » - With permet de multiplier et d’assembler des éléments qui se répètent. Il se termine TOUJOURS

par un End With. Ainsi il permet d’effectuer une série de propriété comme une mise en page spécifique.

CONSEIL : Avec la nouvelle version VBA prendre toujours du long sinon priviliégié double ou currency.

MANIPULATIONS

Positionner une clé On se positionne – « Données » – « trier par ordre croissant de A à Z »

Positionner plusieurs clés On se positionne n’importe où – « données » – « trier »

ð À faire via un tableau entouré de vide !

Trier par couleur Comme avant mais en plus : Ajouter un niveau – sélectionner le champ « prix » (le moins important 1er, le plus important dernier) – répondre ok. Autre exemple :

- Pour trier en fonction de la couleur et du prix : on va utiliser la commande TRI_COUL_PRIX (« Données » – « trier » – « modifier premier champ » – « couleur » – « nouveau niveau » – prix – « ok » - arrêter la macro en bas.)

Lancer l’enregistrement d’une macro

- Développeur « enregistrer une macro » - Rentrer le nom d’une macro ayant un sens

/ !\ ne pas mettre des espaces, mettre _ Choisir une touche de raccourci n’existant pas encore (possibilité de mettre la lettre en majuscule pour différencier ce raccourci à un autre qui existe déjà)

- Macro plus généraliste : l’enregistrer dans le classeur de macros personnelles ou enregistrer dans « ce classeur »

Oublie d’un raccourci ? Besoin de modifier/supprimer la macro ? « Développeur » – « enregistrer une macro » – « options » – « exécuter » Ou « développeur » – à gauche « visual basic »

Page 3: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

  Elise PRIGENT – BBA 1A

   

   

Créer un bouton « Développeur » - « Insérer » – premier icone « bouton contrôle de formulaire » - tracer Avec une forme prédéfinie type losange, carré... (Former la forme, clique droit « affecter une macro », clique droit, modifier le texte.) Faire une macro pour la mise en forme : Sélectionner une plage, lancer enregistrement de la macro, « mise en forme », raccourci clavier ctrl+alt+F, ok. 1ère mise en forme : arial black 2ème mise en forme : gras italic 3ème mise en forme : police couleur fuschia 4ème mise en forme : fond de cellule vert pomme 5ème mise en forme : center horizontalement, verticalement + encadrement 6ème mise en forme : enregistrement bordure plus épais

ð mettre fin à la macro avec le bouton en bas à gauche. Quand on fait évoluer une variable : Le signe « = » signifie que l’on remplace la valeur précédente à la suivante. « = » correspond donc au signe d’affectation. Si rien ne s’affiche appuyer sur l’icône « explorateur de projets » Pour enregistrer ses fonctions dans un classeur : Enregistrer sous, autre format, macro complément xlam Insérer un module : « Insertion » puis module (Changer de nom au module à gauche en bas soit à la place de N18 sur l’exemple)

Créer une fonction qui va calculer l’aire d’un cercle En résumé 2 choses à faire :

- Calculer carré du rayon - Multiplier ce nombre par Pi

Je crée donc deux fonctions dont l‘une va utiliser l’autre. CONSEIL : Toujours mettre un ‘ avant un argument. Les arguments ne sont pas très important en soit ils permettent juste de mettre des annotations pour mieux s’y retrouver.

Option explicit Function CARRE (Val as double) as double ‘ carré de la valeur CARRE = Val * Val End function ‘ Function SURFC (ray As Double) As Double Consti Pi as Double=3.1416 SURFC = CARRE(Ray) * Pi End Function

Page 4: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

    Elise PRIGENT – BBA 1A

   

   

Désormais sur Excel... Si je fais = CARRE (D1(par exemple)) le calcul s’effectue (soit le carré de la cellule D1).

Option explicit Function CARRE (Val as double) as double ‘ carré de la valeur CARRE = Val * Val End function ‘ Function SURFC (ray As Double) As Double Consti Pi as Double=3.1416 SURFC = CARRE(Ray) * Pi End Function ‘ Sub VARIABLES () Dim VARC as Currency Dim VarD as Double Dim VARS as Single ‘ VARC = 12345678912.1235 VARD = 12345678912.1235 VARS = 12345678912.1235 ‘ msgbox “VARC = “& format (VARC, “#,##0.0000000”,64, “RESULTATS” msgbox “VARS = “& format (VARC, “#,##0.0000000”,64, “RESULTATS”msgbox “VARC = “& format (VARD,

“#,##0.0000000”,64, “RESULTATS”

End Sub

Marquer la date

' Sub VARIABLES() Dim VARC As Currency Dim VARD As Double Dim VARS As Single Dim DatJ As Date Dim Trim As Single Dim Sem As Single ' VARC = 12345678912.1235 VARD = 12345678912.1235 VARS = 12345678912.1235 ' MsgBox "VARC = " & Format(VARC, "#,##0.0000000"), 64, "RESULTATS" MsgBox "VARD = " & Format(VARD, "#,##0.0000000"), 64, "RESULTATS" MsgBox "VARS = " & Format(VARS, "#,##0.0000000"), 64, "RESULTATS" ' DatJ = Date MsgBox "Date du jour : " & Format(DatJ, "dddd" & ", le " & "dd" & " " & "mmmm" _ & " " & "yyyy"), , "Test Date du Jour" ' Trim = DatePart("q", datej) Sem = DatePart("ww", datej) ' MsgBox "Trimestre : " & Trim, , "Test Date du Jour" MsgBox "Semaine : " & Sem, , "Test Date du Jour" ' End Sub

Espace _ : indique que la formule n’est pas fini et qu’il y a un retour à la ligne.

Page 5: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

  Elise PRIGENT – BBA 1A

   

   

« BBA 1 » dans toutes les cellules : Selection.value = « BBA 1 » (Je veux désormais le centrer verticalement) ‘ Selection.Horizontalalignment = xlCenter (selection.propriété) Selection.VerticalAlignment = xlCenter ‘ With Selection.Font .coloc=rgb(234, 4, 201) (.color=redgreenblue(numéro de la couleur voir dans excel directement lorsque l’on regarde la palette couleur) .size=12 .name = « arial black » .italic= true .bold=true .underline=true

Récupérer l’heure en cours (Travail n°2 TD3)

ð utilisation fonction time ð utilisation fonction date

Plusieurs instructions alternatives (page 3) : choix entre plusieurs actions : Pour deux choix Plus de deux choix If expression Then (instructions) Else (instructions) End if

If expression Then (instructions) (ElseIF expression Then (instructions)) (ElseIF expression Then (instructions)) … (Else (Instructions)) End if

Créer un texte qui apparaît dès l’ouverture du classeur Pour décider de quand le message sera afficher : « procédures événementielles associées à un classeur » Utilisation de la commande MsgBox et de IF / ElseIf imbriqué car on cherche à adapter le message à l’heure qu’il est. Afficher date du jour + bonjour Toujours la commande msgbox « … », voir la macro en bas. Pour cela on va utiliser : à Deux sortes de procédure : - Sub Se contente d’exécuter les instructions les unes après les autres jusqu’à la fin Valeur par défaut -> public Se termine toujours par end sub (Instruction particulière « exit sub

Page 6: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

    Elise PRIGENT – BBA 1A

   

   

- Function Elle va commencer par la première ligne, elle exécute, elle arrive à la fin et renvoie un résultat Se termine toujours par « end function »

Sub BONJOUR() Dim HEURE As Double ' HEURE = Left(Time, 2) If HEURE >= 6 And HEURE < 12 Then MsgBox "Bonjour !!!!!", , "Bienvenue" ElseIf HEURE >= 12 And HEURE < 18 Then MsgBox "Bon après-midi !!!!!", , "Bienvenue" ElseIf HEURE >= 18 And HEURE < 22 Then MsgBox "Bonne soirée !!!!", , "Bienvenue" Else MsgBox "Bonne nuit...", , "Bienvenue" End If ' End Sub

Si l’action doit être fait à l’ouverture du classeur : Sélectionner « ThisWorkbook » Commencer l’action par « Private Sub Workbook_Open () » signifie à l’ouverture du classeur »

Option Explicit

Private Sub Workbook_Open()

Sheets("feuil3").Activate Call BONJOUR

End Sub

Pour agir dessus : .+action (exemple : activate) Call : pour appeler une procédure Demander une information à l’ouverture du classeur pour afficher un message précis Sub : Nom de la commande Dim : Décrit les variables On utilise l’argument Double car il permet de rentrer des nombres à plusieurs chiffres et à virgules Création touche annuler (touche annuler = chaine vide) Attention MsgBox = intruction donc on utilise pas des parenthèses, ce sont des instructions qui se suivent l’unes derrière les autres donc on utilise des apostrophes. Pour emmener à la fin de la procédure : Il n’y aura donc pas de suite après : exit sub (Ce qui signifie clairement aller à la fin de la procédure)

Page 7: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

  Elise PRIGENT – BBA 1A

   

   

è Voir fonctions d’informations pour choisir les fonctions Créer un questionnaire avec différents messages selon les réponses Là entre autre on prend IsNumeric qu’on applique à âge (voir le detail de la fonction ci dessous) âge numérique + derrière false then : signifie que des lettres ont été saisi au lieu des chiffres Case else : autre cas restant. Utilisation de case : plus simple que si imbriqué et plus simple à comprendre Ensuite créer un bouton pour la macro : RAPPEL pour créer un bouton : Insertion – Forme – choisi une forme – touche droite – insérer une macro

La macro permettant de faire afficher un message adapté à l’âge

' Sub TEKITOI() Dim AGE As Variant ' AGE = InputBox("Quel âge ?", "TEKITOI", 18) ' ' Age vide? Touche annuler If AGE = "" Then MsgBox "Tant pis et à Bientôt !!!", , "TEKITOI" Exit Sub End If ' 'Age numérique? If IsNumeric(AGE) = False Then MsgBox "Age erroné!!!", , "TEKITOI" Exit Sub End If ' 'Analyse de l'âge Select Case AGE Case 0 MsgBox "t'es rien !!!!!", , "TEKITOI" Case 1 To 9.999 MsgBox "t'es pas un peu petit ?!!!!!", , "TEKITOI" Case 10 To 17.999 MsgBox "keep calm bientôt la majorité !!!!!", , "TEKITOI" Case 18 To 30 MsgBox "t'es opé !!!!!", , "TEKITOI" Case Else MsgBox "t'es pas un peu vieux ?!!!!!", , "TEKITOI" End Select End Sub

Nouveau TD 4 instructions itératives :

- Sans compteur - Avec compteur - Tant que - Jusqu’à ce que

Page 8: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

    Elise PRIGENT – BBA 1A

   

   

On va créer des boutons permettant de montrer les différentes couleurs et leurs numéros. Avec :

- Color = RGB ( , , ) - Colorindex=1à56

Colonne A j’indique le numéro, Colonne B j’indique la couleur. Comment faire pour réduire le nombre de manipulation ? Pour traiter les lignes les unes après les autres : besoin d’une variable. On part de la ligne 1 donc on initialise la variable à 1. Le programme va en résumé faire : I = 1 est ce que I<= à 56 oui donc affichage de couleur ensuite du coup on s’occupe de I +1 ainsi de suite jusqu’à ce que I soit inférieur ou égale à 56. Là on a utilisé le programme « Do while.. Loop » mais il existe d’autres programmes :

- Do until... Loop - Do... Loop while - Do… loop until

Collection cells j’agis sur toutes les cellules de la feuille ou si je veux agir sur seulement quelques cellules : Cells (l,c) exemple avec B1 ; cells (1,2) => ligne 1, colonne 2 Cells (i,2) => Astuce : Lorsqu’on est face à des bloques, faire un espace pour être plus organiser et mieux lire les données. I symbolise ma couleur. .Interior.ColorIndex => j’agis sur l’intérieur de ma cellule avec une couleur. Ne surtout pas oublier le i=i+1 car sinon je reste sur la même cellule or je veux changer. Loop => Je boucle le programme. Je crée une forme via insertion – forme et après avec un clique droit « affecter une macro » pour utiliser la macro que je viens de créer. 6 façons de faire cette action : 1° : « faire tant que »

Option Explicit Sub Couleur1() ' 'Do while...Loop Dim I As Long I = 1 Do While I <= 56 Cells(I, 1) = I Cells(I, 2).Interior.ColorIndex = I I = I + 1 Loop End Sub

2° : « faire jusqu’à » Sub Couleur2() Dim I As Long I = 1 Do Until I > 56 Cells(I, 1) = I Cells(I, 2).Interior.ColorIndex = I I = I + 1 Loop End Sub

Page 9: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

  Elise PRIGENT – BBA 1A

   

   

3° : « Je fais une minimum une fois et après je boucle ou je ne boucle pas »

Sub couleur3() Dim I As Long I = 1 Do Cells(I, 1) = I Cells(I, 2).Interior.ColorIndex = I I = I + 1 Loop Until I > 56 End Sub

4° : Tant que la condition est vérifiée j’agis sinon je sors

Sub couleur4() Dim I As Long I = 1 Do Cells(I, 1) = I Cells(I, 2).Interior.ColorIndex = I I = I + 1 Loop While I <= 56 End Sub

5° : Je fais tant que Sub couleur5() Dim I As Long I = 1 While I <= 56 Cells(I, 1) = I Cells(I, 2).Interior.ColorIndex = I I = I + 1 Wend End Sub

6° : Permet de ne pas faire d’instruction d’initialisation et l’instruction d’incrémentation I+1

Sub couleur6() Dim I As Long For I = 1 To 56 Cells(I, 1) = I Cells(I, 2).Interior.ColorIndex = I Next End Sub

=> For et Next évitent l’initialisation et l’incrémentation

Pour nettoyer ma feuille et retirer la palette de couleurs ; Création d’un bouton « effacer les éléments sur la feuille » : Cells (1,1) .select => permet que dès que la feuille est nettoyé mon curseur se repositionne en A1. Je crée une forme via insertion – forme et après avec un clique droit « affecter une macro » pour utiliser la macro que je viens de créer.

Sub EFFAC() ' 'effacement des cellules Cells.Clear

Page 10: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

    Elise PRIGENT – BBA 1A

   

   

Cells(1, 1).Select End Sub

On va désormais utiliser :

- FC_PLAG - FC_ETAL

(fc correspond à feuille de calcul) Ainsi, pour chaque cellule de la plage je vais prendre la valeur de la cellule et je vais la comparer avec la valeur étalon. Si la cellule est > ou = à la cellule étalon alors je cumule le montant dans une cellule totale que j’ai nommé FC_TOT. Si la valeur est supérieure à la valeur étalon je force la couleur de la cellule concernée avec cellule étalon, je change la police, je mets en gras et en italique. Si j’utilise la référence plutôt que le nom de la cellule (exemple : cells (2,1)) plus dangereux car si je déplace les cellules l’ordinateur ne prendra pas la bonne cellule en question.

• On va créer un pointeur (une variable) qui pointera Range (« FC_TOT ») avec DimCelTat as

Range (correspond à une déclaration de variable) ou Set celTot = range (correspond à un conseil de programmation qui permet d’éviter les erreurs de frappe voir TD 2 pour plus d’informations).

J’ai déclaré trois variables afin qu’elles poitnent FC_PLAG, FC_ETAL, FC_TOT

- On affecte ainsi : - celtot avec fc_tot, celetal avec fc_etal, et celval avec fc_plag - Pour dire cellule suivant : for each celval (dans plage cellule) in plage - Cellule suivante : next celval - IsNumeric correspond à des cellules ayant des données numériques - Font;color, font;name, font;police : on applique des propriétés sur la cellule

Sub sumval() Dim PLAGE As Range Dim CelTot As Range Dim CelEtal As Range Dim Celval As Range ' Set PLAGE = Range("fc_plag") Set CelTot = Range("fc_tot") Set CelEtal = Range("fc_etal") ' 'initialisation CelTot = 0 With PLAGE.Font .Name = "arial" .ColorIndex = 1 .Italic = False .Bold = False End With ' For Each Celval In PLAGE If IsNumeric(Celval) = True And Celval >= CelEtal Then CelTot = CelTot + Celval With Celval.Font .Color = CelEtal.Font.Color .Name = CelTot.Font.Name .Italic = True .Bold = True End With End If

Page 11: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

  Elise PRIGENT – BBA 1A

   

   

Next Celval End Sub

Effacer des données sur un fichier excel et générer des commentaires :

Option Explicit Dim PremCel As Range Sub COMMENT_EFFAC() ' 'Déprotection de la feuille ActiveSheet.Unprotect ' 'Sélection tableau Set PremCel = Range("tabl1") PremCel.CurrentRegion.Select ' 'effacement commentaires Selection.ClearComments Selection.Interior.Color = xlNone ' 'protection feuille ActiveSheet.Protect ' End Sub ' Sub COMMENT() Dim nbLig As Long Dim NbCol As Long Dim L As Long Dim C As Long ' 'effacement commentaires COMMENT_EFFAC ' 'Déprotection de la feuille ActiveSheet.Unprotect ' 'Selection tableau Set PremCel = Range("tabl1") PremCel.CurrentRegion.Select ' 'Comptage lignes et colonnes nbLig = Selection.Rows.Count NbCol = Selection.Columns.Count ' 'pour chaque ligne For L = 2 To nbLig ' pour chaque colonne For C = 2 To NbCol - 1 COMPARE Selection(L, C), Selection(L, C + 1) Next C Next L ' 'protection feuille ActiveSheet.Protect ' End Sub ' Sub COMPARE(RGI As Range, RgF As Range) Dim ValI As Double Dim ValF As Double Dim TxVar As Double

Page 12: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

    Elise PRIGENT – BBA 1A

   

   

' ValI = RGI.Value ValF = RgF.Value TxVar = (ValF - ValI) / ValI ' 'analyse Select Case TxVar Case Is < 0 RgF.AddComment "attention ! en baisse de " & Format(Abs(TxVar), "0.00%") RgF.Interior.ColorIndex = 38 Case Is < 0.2 RgF.AddComment "bien! en hausse de " & Format(Abs(TxVar), "0.00%") Case Else RgF.AddComment " excellent ! en hausse de " & Format(Abs(TxVar), "0.00%") RgF.Interior.ColorIndex = 37 End Select ' End Sub

Effectuer un décalage de colonne (Ne sera pas au partiel !) Pour verrouiller pas à pas que tout est bon : F5 et ensuite F8 pour faire descendre la flèche jaune fluo. Autofill : conseil ; demander aide en ligne, autofill, rechercher, premiere proposition.

Option Explicit Dim PremCel As Range Dim NbLig As Long Dim NbCol As Long Dim L As Long Dim C As Long ' Sub COMMENT_EFFAC() ' 'Déprotection de la feuille ActiveSheet.Unprotect ' 'Selection tableau Set PremCel = Range("tabl1") PremCel.CurrentRegion.Select ' 'Effacement commentaires Selection.ClearComments Selection.Interior.Color = xlNone ' 'Protection feuille ActiveSheet.Protect ' End Sub ' Sub COMMENT() ' 'Effacemment commentaires COMMENT_EFFAC ' 'Déprotection de la feuille ActiveSheet.Unprotect ' 'Selection tableau Set PremCel = Range("tabl1") PremCel.CurrentRegion.Select '

Page 13: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

  Elise PRIGENT – BBA 1A

   

   

'Comptage lignes et colonnes NbLig = Selection.Rows.Count NbCol = Selection.Columns.Count ' 'Pour chaque ligne For L = 2 To NbLig ' Pour chaque colonne For C = 2 To NbCol - 1 COMPARE Selection(L, C), Selection(L, C + 1) Next C Next L ' 'Protection feuille ActiveSheet.Protect ' End Sub ' Sub COMPARE(RgI As Range, RgF As Range) Dim ValI As Double Dim ValF As Double Dim TxVar As Double ' ValI = RgI.Value ValF = RgF.Value TxVar = (ValF - ValI) / ValI ' 'Analyse Select Case TxVar Case Is < 0 RgF.AddComment "Attention ! En baisse de " & Format(Abs(TxVar), "0.00 %") RgF.Interior.ColorIndex = 38 Case Is < 0.2 RgF.AddComment "Bien ! En hausse de " & Format(Abs(TxVar), "0.00 %") Case Else RgF.AddComment "Excellent ! En hausse de " & Format(Abs(TxVar), "0.00 %") RgF.Interior.ColorIndex = 37 End Select ' End Sub Sub DECAL_COL() Dim DerC As Long ' 'effacement commentaires COMMENT_EFFAC ' 'Déprotection de la feuille ActiveSheet.Unprotect ' 'selection tableau Set PremCel = Range("tabl1") PremCel.CurrentRegion.Select ' 'comptage lignes et colonnes NbLig = Selection.Rows.Count NbCol = Selection.Columns.Count ' C = 2 L = 1 ' 'décalage des cellules While C < NbCol 'boucle colonnes

Page 14: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

    Elise PRIGENT – BBA 1A

   

   

While L <= NbLig 'boucle lignes Selection(L, C) = Selection(L, C + 1) L = L + 1 Wend C = C + 1 L = 1 Wend ' 'calcul du numéro de la dernière colonne de droite DerC = PremCel.Column + NbCol - 1 ' 'effacement dernière colonne Columns(DerC).Select Selection.Clear ' 'verouillage des variables Selection.Locked = True ' ActiveSheet.Protect End Sub ' Sub init_col() Dim sourceR As Range Dim destR As Range ' 'effacement commentaires COMMENT_EFFAC ' 'Déprotection de la feuille ActiveSheet.Unprotect ' 'selection tableau Set PremCel = Range("tabl1") PremCel.CurrentRegion.Select ' 'comptage lignes et colonnes NbLig = Selection.Rows.Count NbCol = Selection.Columns.Count ' 'recopie incrémenté de l'année Set sourceR = Selection.Range(Cells(1, NbCol - 1), Cells(1, NbCol)) Set destR = Selection.Range(Cells(1, NbCol - 1), Cells(1, NbCol + 1)) sourceR.AutoFill Destination:=destR ' 'recopie formule Set sourceR = Selection.Cells(NbLig + 2, NbCol) Set destR = Selection.Range(Cells(1, NbCol - 1), Cells(1, NbCol + 1)) sourceR.AutoFill Destination:=destR ' 'déverouillage des variables Selection.Range(Cells(2, NbCol + 1), Cells(NbLig, NbCol + 1)).Locked = False ' ActiveSheet.Protect ' End Sub

TD6

Page 15: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

  Elise PRIGENT – BBA 1A

   

   

Pour créer un formulaire : Ouvrir dans visual basics User form en faisant: boite à outils, « user form » Les différentes propriétés :

Renommer un objet : propriété « name » Caption : correspondant au nom de la barre du questionnaire Font : pour changer la police de mon formulaire Changer la couleur du cadre « BackColor » avec ensuite l’option palette à gauche de la barre Changer de couleur au titre : « ForeColor » voir les propriétés Changer la disposition du texte ‘milieu, à gauche, à droite..’ : TextAlign

- Créer un cadre : Dans boite à outils sélectionné le troisième en partant de la gauche, ligne 2. -­‐ Créer des boutons à choix multiples : Boite à outils le premier bouton, ligne 2 À la place de « Value » (voir les propriétés) mettre « True » pour que le bouton soit enfoncé. -­‐ Zone à remplir : Commande Ab dans la boite à outils permet de créer des zones de texte et A permet d’écrire des titres

-­‐ Liste modifiable :

On commence par appuyer sur le 4ème bouton, première ligne On affecte ensuite des valeurs à notre liste déroulante sachant que les valeurs viennent d’Excel : cela correspond à la propriété « RowSource ». Ensuite ajouter le nom de la planche de valeur (rappel : dans Excel sélectionner la planche et renommer au lieu de cellule A13 par exemple)

Page 16: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

    Elise PRIGENT – BBA 1A

   

   

-­‐ Créer une « Toupie » Sélectionner le bouton situer en 4ème place dans la ligne 3 de la boîte à outils.

Pour ensuite afficher le formulaire… Private Sub Woorbook_Open()

MISSFRANCE.Show

End Sub On va ensuite associer des macros à notre questionnaire pour savoir qui sont les candidates qui peuvent ou non concourir :

Option Explicit ' Dim Yeux As String Dim Poids As Byte Dim Taille As Byte Dim Civ As String Dim Année As Integer Dim Age As Byte Dim NomB As Boolean Dim PrénomB As Boolean Dim CivB As Boolean Dim YeuxB As Boolean Dim AgeB As Boolean Dim TailleB As Boolean Dim PoidsB As Boolean Dim Tmin As Range 'Taille min Dim Tmax As Range 'Taille max Dim Pmin As Range 'Poids min Dim Pmax As Range 'Poids max Dim Amin As Range 'Age min Dim Amax As Range 'Age max Private Sub BleuF_Click() YeuxB = True Yeux = "Bleu" End Sub Private Sub BoutonAbandon_Click() Unload Me ActiveWorkbook.Close End Sub Private Sub BoutonNouv_Click() Call Init

Page 17: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

  Elise PRIGENT – BBA 1A

   

   End Sub Private Sub BoutonVal_Click() ' Set Tmin = Range("tminfc") Set Tmax = Range("tmaxfc") Set Pmin = Range("pminfc") Set Pmax = Range("pmaxfc") Set Amin = Range("aminfc") Set Amax = Range("amaxfc") ' 'Année correct ? If Len(AnnéeF) = 0 Then VerdictF = "année obligatoire" Exit Sub ' 'age Année = AnnéeF Age = Year(Date) - Année ' If Age >= Amin And Age <= Amax

Then AgeB = True Else AgeB = False End If ' If Poids >= Pmin And Poids <= Pmax

Then PoidsB = True Else PoidsB = False End If ' If Taille >= Tmin And Taille <= Tmax

Then TailleB = True Else TailleB = False End If ' If AgeB = True And TailleB = True And

PoidsB = True And YeuxB = True Then VerdictF = "Admise :)" Else VerdictF = "Recalée :(" End If End Sub Private Sub PoidsTP_Change() PoidsF = CStr(PoidsTP) Poids = PoidsTP

Page 18: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

    Elise PRIGENT – BBA 1A

   

    End Sub Private Sub TailleF_Change() TailleF = CStr(TailleTP) Taille = TailleTP End Sub Private Sub VertF_Click() YeuxB = True Yeux = "Vert" End Sub Private Sub MarronF_Click() YeuxB = False Yeux = "Marron" End Sub Private Sub NoirF_Click() YeuxB = False Yeux = "Noir" End Sub ' Private Sub MlleF_Click() CivB = True VerdictF = "" Civ = "Mlle" End Sub ' Private Sub MmeF_Click() CivB = True VerdictF = "" Civ = "Mme" End Sub Private Sub MF_Click() CivB = False VerdictF = "Vous n'êtes pas encore

atorisé à concourir" Civ = "M" End Sub Private Sub NomF_Change() If Len(NomF) = 0 Then VerdictF = "Nom obligatoire!" NomB = False Else VerdictF = "" NomB = True NomF = Format(NomF, ">") End If End Sub

Page 19: VBA – Visual Basic Application S2 · Elise PRIGENT – BBA 1A !!! ! VBA – Visual Basic Application S2 Toujours enregistrer le fichier sous le format « .xlsm » prenant en charge

  Elise PRIGENT – BBA 1A

   

   

Private Sub PrénomF_Change() If Len(PrénomF) = 0 Then VerdictF = "Prénom obligatoire!" PrénomB = False Else VerdictF = "" PrénomB = True PrénomF = Format(PrénomF, ">") End If End Sub ' Private Sub UserForm_Activate() Call Init End Sub ' Sub Init() 'Initialisation des contrôles du

formulaire MlleF = True MmeF = False MF = False NomF = "" PrénomF = "" AnnéeF = "" BleuF = True VertF = False MarronF = False NoirF = False PoidsF = 50 TailleF = 168 VerdictF = "" ' 'Initialisation des variables Civ = "Mlle" Yeux = "B" Taille = TailleF Poids = PoidsF CivB = True NomB = False PrénomB = False YeuxB = True TailleB = True PoidsB = True ' End Sub