Médiaforma

All posts in VBAExcel

Tous les classeurs possèdent des propriétés qui donnent des informations complémentaires sur son contenu, son auteur ou sa catégorie.

Pour accéder aux propriétés d’un classeur Excel 2016, basculez sur l’onglet Fichier dans le ruban puis cliquez sur Informations. Dans la vue backstage, cliquez sur Propriétés puis sur Propriétés avancées :

La boîte de dialogue des propriétés s’affiche et donne accès aux principales propriétés du classeur sous l’onglet Résumé :

Toutes ces propriétés peuvent être lues et modifiées en VBA. Pour cela, vous préciserez la propriété à laquelle vous voulez accéder dans la fonction ActiveWorkbook.BuiltinDocumentProperties(“p”) (où p est la propriété concernée). Voici quelques-unes des propriétés utilisables :

Nom de la propriété Equivalent dans la boîte de dialogue des propriétés
Title Titre
Subject Sujet
Author Auteur
Manager Responsable
Company Société
Keywords Mots clés
Comments Commentaires

 

Ainsi par exemple, cette instruction affichera le nom de l’auteur du classeur dans une boîte de dialogue :

MsgBox ActiveWorkbook.BuiltinDocumentProperties("Author")

Où encore, cette instruction affectera la chaîne “Cette propriété a été définie en VBA” à la propriété Subject du classeur :

ActiveWorkbook.BuiltinDocumentProperties("Subject") = "Cette propriété a été définie en VBA"

Pour accéder à toutes les propriétés du classeur, il n’est pas nécessaire de connaitre leur nom : vous pouvez parcourir la collection BuiltinDocumentsProperties avec une boucle For Each. Ici par exemple, nous affichons le nom des propriétés dans la colonne 1 et les valeurs correspondantes dans la colonne 2 :

On Error Resume Next

i = 1

Worksheets(1).Activate

For Each p In ActiveWorkbook.BuiltinDocumentProperties

    Cells(i, 1) = p.Name

    Cells(i, 2) = p.Value

    i = i + 1

Next

Remarque

L’instruction On Error Resume Next évite l’arrêt du code et l’affichage d’un message d’erreur lorsqu’une propriété n’est pas définie.

Voici le résultat :


Cet article va vous montrer comment créer un graphique à partir de données numériques.
Nous allons partir de ces données :


Ces instructions : Range("A1:C2").Select ActiveSheet.Shapes.AddChart.Select

Produisent le résultat suivant :

Vous voulez un autre type de graphique ? Utilisez l’enregistreur de macros.
Sélectionnez la plage A1-C3, basculez sur l’onglet Développeur du ruban et cliquez sur l’icône Enregistrer une macro dans le groupe Code. Basculez sur l’onglet Insérer du ruban et insérez le graphique qui vous convient. Ici par exemple, nous choisissons un graphique combiné :

Arrêtez l’enregistrement de la macro en cliquant sur l’icône Arrêter l’enregistrement dans le groupe Code, sous l’onglet Développeur du ruban. Voici le code qui a été généré :
ActiveSheet.Shapes.AddChart2(322, xlColumnClustered).Select
ActiveChart.FullSeriesCollection(1).ChartType = xlColumnClustered
ActiveChart.FullSeriesCollection(2).ChartType = xlLine
ActiveChart.FullSeriesCollection(2).AxisGroup = 2
Complétez ce code en ajoutant au début l’instruction qui sélectionne la plage A1-C2 :
Range(“A1:C2”).Select
ActiveSheet.Shapes.AddChart2(322, xlColumnClustered).Select
ActiveChart.FullSeriesCollection(1).ChartType = xlColumnClustered
ActiveChart.FullSeriesCollection(2).ChartType = xlLine
ActiveChart.FullSeriesCollection(2).AxisGroup = 2
Et le tour est joué :

N’hésitez pas à utiliser l’enregistreur de macros en renfort du VBA. Le code généré sera directement utilisable.


Le contrôle Image permet d’afficher des images dans une boîte de dialogue personnalisée.

Pour insérer un contrôle Image, sélectionnez l’outil Image dans la boîte à outils, puis cliquez dans la boîte de dialogue personnalisée :

Vous utiliserez les propriétés suivantes :

  • AutoSize pour adapter la taille de contrôle Image à l’image.
  • Picture pour affecter une image au contrôle Image.

Pour affecter une image au contrôle Image, vous affecterez la fonction LoadPicture() à la propriété Picture du contrôle:

Image1.Picture = LoadPicture("chemin et nom de l'image")

A titre d’exemple, nous allons afficher une image dans une boîte de dialogue personnalisée. Lorsque l’utilisateur cliquera dessus, une deuxième image sera affichée. Lorsqu’il cliquera à nouveau dessus, la première image sera affichée. Ainsi de suite…

Nous utiliserons les deux images suivantes :

Créez une nouvelle boîte de dialogue personnalisée.

A l’aide de la fenêtre Propriétés, affectez le texte “Le contrôle Image” à la propriété Caption de UserForm1.

Insérez un contrôle Label. Cliquez sur ce contrôle. A l’aide de la fenêtre Propriétés, affectez le texte “Cliquez sur l’image” à sa propriété Caption.

Insérez un contrôle Image. Cliquez sur ce contrôle. A l’aide de la fenêtre Propriétés, initialisez à True sa propriété AutoSize. Cliquez sur (Image bitmap) en face de la propriété Picture et affectez-lui l’image du premier papillon :

Voici ce que vous devriez obtenir :

Basculez sur la fenêtre Code en appuyant sur la touche de fonction F7.

Pour savoir quelle image est affichée dans le contrôle Image, nous allons utiliser une variable que nous appellerons papillon :

Dim papillon

Sélectionnez UserForm dans la première liste déroulante et Initialize dans la deuxième et définissez le code suivant pour mémoriser que le premier papillon est affiché au démarrage de l’application :

Voici le code de la procédure UserForm_Initialize() :

Private Sub UserForm_Initialize()

  papillon = "papillon1"

End Sub

Sélectionnez Image1 dans la première liste déroulante et MouseUp dans la seconde, puis complétez la procédure Image1_MouseUp() comme ceci :

Private Sub Image1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

  If papillon = "papillon1" Then

    papillon = "papillon2"

    Image1.Picture = LoadPicture("C:\data\mediaforma\Images\papillon2.jpg")

  Else

    papillon = "papillon1"

    Image1.Picture = LoadPicture("C:\data\mediaforma\Images\papillon1.jpg")

  End If

End Sub

Lorsque l’utilisateur clique sur l’image, un événement MouseUp est généré. Si la variable papillon vaut papillon1, cela signifie que le premier papillon est affiché. Dans ce cas, la variable papillon est initialisée à papillon2 et le deuxième papillon est affiché à la place du premier :

  If papillon = "papillon1" Then

    papillon = "papillon2"

    Image1.Picture = LoadPicture("C:\data\mediaforma\Images\papillon2.jpg")

Si la variable papillon est différente de papillon1, cela signifie que le deuxième papillon est affiché. Dans ce cas, la variable papillon est initialisée à papillon1 et le premier papillon est affiché à la place du deuxième :

  Else

    papillon = "papillon1"

    Image1.Picture = LoadPicture("C:\data\mediaforma\Images\papillon1.jpg")

  End If

Dans cet article, je vais vous montrer comment exécuter un calcul mathématique au clic sur un bouton et afficher le résultat dans un TextBox. Voici le résultat attendu :

Créez une nouvelle boîte de dialogue personnalisée. Affectez la valeur “Calculs dans un UserForm” à sa propriété Caption.

Aoutez deux Label, deux TextBox et un CommandButton.

Affectez la valeur :

  • “Entrez un calcul” à la propriété Caption du premier Label.
  • “Résultat” à la propriété Caption du deuxième Label.
  • “Calculer” à la propriété Caption du CommandButton.

Pour obtenir le résultat du calcul entré dans le premier TextBox, nous allons utiliser une fonction très pratique : Evaluate(). Cette fonction demande un argument de type String qui contient un calcul. Elle retourne le résultat du calcul.

Double-cliquez sur le bouton. L’affichage bascule sur la fenêtre Code et la procédure CommandButton1_Click() est créée. Complétez-la comme ceci :

Private Sub CommandButton1_Click()

  TextBox2.Text = Evaluate(TextBox1.Text)

End Sub

Le résultat de la fonction Evaluate() est simplement affecté à la propriété Text du deuxième TextBox pour afficher le résultat.


Le contrôle CommandButton (bouton) permet essentiellement d’exécuter du code lorsque l’utilisateur clique dessus.

Pour insérer un contrôle CommandButton, sélectionnez l’outil CommandButton dans la boîte à outils, puis cliquez dans la boîte de dialogue personnalisée :

Vous utiliserez :

  • La propriété Caption pour définir le texte qui apparait sur le bouton.
  • L’événement Click pour réagir au clic sur le bouton.

A titre d’exemple, nous allons définir une boîte de dialogue personnalisée qui contient un CommandButton. Lorsque l’utilisateur clique sur ce bouton, un message sera affiché à l’aide de la méthode MsgBox.

Voici la boîte de dialogue personnalisée :

Un CommandButton est inséré, puis sa propriété Caption est initialisée à “Cliquez ici”.

Double-cliquez sur le bouton et complétez la procédure CommandButton1_Click() comme ceci :

Private Sub CommandButton1_Click()

MsgBox "Merci d'avoir cliqué"

End Sub

Il ne reste plus qu’à lancer la boîte de dialogue personnalisée en cliquant sur le bouton Exécuter, ou en appuyant sur la touche de fonction F5 :


Le contrôle SpinButton (toupie) permet d’incrémenter ou de décrémenter une valeur d’un certain pas entre une valeur minimale et une valeur maximale.

Pour insérer un contrôle SpinButton, sélectionnez l’outil Toupie dans la boîte à outils, puis tracez le contour voulu dans la boîte de dialogue personnalisée. Selon votre tracé, le contrôle sera horizontal ou vertical :

Vous utiliserez essentiellement les propriétés suivantes dans un SpinButton :

Propriété Signification
Min Valeur minimale
Max Valeur maximale
SmallChange Pas de progression

A titre d’exemple, nous allons définir une boîte de dialogue personnalisée qui contient un contrôle MultiPage composé de deux pages : une pour définir les caractéristiques du SpinButton et une autre pour utiliser le SpinButton :

La mise en place des contrôles n’offre aucune difficulté.

Pour faire fonctionner cette boîte de dialogue personnalisée, nous allons écrire quelques lignes de code VBA.

Au clic sur le bouton de la première page :

  • Les valeurs saisies dans les trois zones de texte sont affectées aux propriétés Min, Max et SmallChange du SpinButton.
  • Le texte “Valeur actuelle : 0” est affiché dans le label de la deuxième page.
  • La boîte de dialogue bascule automatiquement sur la deuxième page.
Private Sub CommandButton1_Click()

  With SpinButton1

    .Min = TextBox1.Value

    .Max = TextBox2.Value

    .SmallChange = TextBox3.Value

  End With

  Label4.Caption = "Valeur actuelle : 0"

  MultiPage1.Value = 1 'Active la deuxième page

End Sub

Pour compléter la prise en compte du clic sur le bouton, il reste à prendre en compte le clic sur les boutons du SpinButton. La valeur du SpinButton est alors automatiquement modifiée. Il suffit de l’afficher dans le label :

Private Sub SpinButton1_Change()

  Label4.Caption = "Valeur actuelle : " & SpinButton1.Value

End Sub

Les contrôles MultiPage sont intéressants lorsque de nombreux contrôles doivent être placés dans une boîte de dialogue personnalisée. Ils donnent accès à plusieurs pages via des onglets. Par défaut deux onglets sont créés, mais il est très simple d’en ajouter en mode conception ou avec du code VBA.

Pour insérer un contrôle MultiPage, glissez-déposez un contrôle MultiPage sur la boîte de dialogue personnalisée :

Lorsque vous sélectionnez une page en sélectionnant sur son onglet, plusieurs propriétés intéressantes peuvent être utilisées :

Propriété Signification
Caption Texte dans l’onglet
Enabled Accessible (True) ou non (False)
Picture Arrière-plan de la page
Visible Onglet de la page affiché (Trie) ou caché (False)

 

La propriété Value du contrôle MultiPage détermine quelle page est affichée : 0 représente la première page, 1 représente la deuxième, ainsi de suite…

Pour ajouter une page en mode conception, cliquez du bouton droit dans la barre des onglets et sélectionnez Nouvelle page dans le menu :

Pour faire la même chose en VBA, vous utiliserez ces instructions :

Set p3 = MultiPage1.Pages.Add

P3.Caption = "Page 3"

Une fois le contrôle MultiPage en place, il ne vous reste plus qu’à insérer les contrôles voulus dans les différentes pages.