CathyAstuce

VBA

GEMCCAP CONSEIL INFORMATIQUE BUREAUTIQUE
Formation - Conception Sites Internet
Applications Informatiques Personnalisées
Communauté partenaire Microsoft

LES FEUILLES D'EXCEL

  Les collections   Quelques propriétés intéressantes
  Ne pas confondre Name et Names PageSetup
Shapes
Visible 

Quelques méthodes intéressantes     Les évènements

Remonter I. Les collections

Dans Excel, vous avez 2 types de feuilles, les feuilles de calcul et les feuilles de graphique. Les 1ères représente la collection Worksheets et les 2es la collection Charts. Cette page est consacrée aux feuilles de calcul.

Pour travailler avec une feuille, vous pouvez utiliser les syntaxes suivantes :

  • Worksheets(n), où n est le numéro d'index de la feuille (de gauche à droite).
  • Worksheets("NomOnglet.xls"), où NomOnglet est le texte situé sur l'onglet de la feuille.
  • Le nom attribué à la feuille par l'intermédiaire de la propriété Name :
    • Dans la fenêtre VBA, affichez la fenêtre Propriétés (Affichage/Fenêtre propriétés)
    • Sélectionnez une feuille de calcul
    • Dans cette fenêtre Propriétés vous visualisez la propriété Name (à gauche) et le nom attribué à la feuille (à droite). Vous pouvez modifier ce nom, si possible en respectant cette règle : commencez le nom par flle, ce qui donne par exemple : flleIntro.
    • Vous pouvez dorénavent utiliser la feuille ainsi,
      flleIntro.Range("A1")="Essai d'utilisation d'une feuille"
    • Vous pouvez connaître ou attribuez un nom à la feuille avec la propriété CodeName.
  • ActiveSheet représente la feuille active (celle dont l'onglet est blanc et le nom est en gras.

Pour ajouter une ou plusieurs feuilles à un classeur, utilisez la méthode Add :
Worksheets.Add(Before, After, Count)Before représente la feuille qui doit suivre la nouvelle, After représente la feuille qui doit précéder la nouvelle et Count le nombre de feuilles à insérer. Si vous renseignez Before ne renseignez pas After et inversement. Si vous n'en renseignez aucun la nouvelle est ajoutée avant la feuille active.

Remonter II. Quelques propriétés intéressantes

Remonter II.1 Ne pas confondre Name et Names

ActiveSheet.Name permet de lire ou modifier le texte de l'onglet. Exemple :
ActiveSheet.Range("A1") = ActiveSheet.Name

ActiveSheet.Names permet de lire uniquement les noms propres à la feuille de calcul. Exemple : nommez Feuil1!Premiere, la cellule A1 et Feuil1!Seconde, la cellule B1, Feuil1 étant le nom de l'onglet. Puis tapez et exécutez cette procédure :
Sub essai()
   Dim Nom As Name
   Dim N As Byte

   N = 1
   For Each Nom In ActiveSheet.Names
      Cells(1, N) = Nom
      N = N + 1
   Next
End Sub

Cette procédure renverra les différents noms.

Remonter II. 2 PageSetup

Renvoie un objet PageSetup qui représente une description de la mise en page. Il contient tous les attributs de mise en page (zone d'impression, marge gauche, marge inférieure, taille du papier, etc.) en tant que propriétés. Grâce aux propriétés de cet objet, vous pouvez entièrement paramétrer la mise en page dans le code. Exemple : 

Sub Mise_En_Page()
   With Worksheets(1).PageSetup
      .LeftMargin = Application.CentimetersToPoints(0.5)
      .RightMargin = Application.CentimetersToPoints(0.75)
      .TopMargin = Application.CentimetersToPoints(1.5)
      .BottomMargin = Application.CentimetersToPoints(1.5)
      .HeaderMargin = Application.CentimetersToPoints(0.5)
      .FooterMargin = Application.CentimetersToPoints(0.5) 
   End With
End Sub

Remonter II. 2 Shapes

Renvoie une collection Shapes qui représente tous les formes de la feuille. Chaque objet Shape représente un objet de la couche de dessin, tel qu'une forme automatique, une forme libre, un objet OLE, une image, un contrôle ajouté grâce à la barre d'outils Boîte à outils Contrôle.
L'exemple suivant ajoute une ligne  bleu à la feuille active :

Sub UneLigne()
   With ActiveSheet.Shapes.AddLine(0, 0, 250, 250).Line
      .DashStyle = msoLineSingle
      .ForeColor.RGB = RGB(0, 51, 102)
   End With
End Sub

Remonter II. 3 Visible

 Si la feuille est visible, la propriété a la valeur True et False dans le cas contraire.
Mais si vous lui attribuez la valeur xlVeryHidden, la feuille sera masquée de telle sorte que la seule façon de la rendre à nouveau visible est de lui affecter la valeur True (l'utilisateur lui-même ne peut rendre la feuille visible).

Remonter III. Quelques méthodes intéressantes

Méthode Action
Activate Active la feuille (revient à cliquer sur l'onglet de la feuille).
Calculate Calcule la feuille
Copy(Before, After) Copie la feuille en un autre endroit du classeur. Before représente la feuille avant laquelle la feuille copiée sera placée, After représente la feuille après laquelle la feuille copiée sera placée. Vous ne devez renseigner que Before ou After.
Exemple : Worksheets(1).Copy ,Worksheets(3) qui copie la 1ère feuille avant la 3ème et  Worksheets(1).Copy Worksheets(3) qui copie la 1ère feuille après la 3ème.
Delete Supprime la feuille
Move(Before, After) Déplace la feuille en un autre endroit du classeur. Before et After se comporte comme pour la méthode Copy.
PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName) Imprime la feuille.
From : Numéro de la 1ère page,
To : Numéro de la dernière page,
Copies : Nombre de copie,
Preview : = True pour afficher un aperçu avant l'impression.
ActivePrinter : Le nom de l'imprimante à utiliser,
PrintToFile : = True pour imprimer dans un fichier,
Collate : = True pour assembler plusieurs copies
PrToFileName : spécifie le nom du fichier vers lequel vous souhaitez effectuer l'impression si PrintToFile : = True.
PrintPreview Affiche un aperçu de la feuille.
Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly) Protège une feuille.
Password : Chaîne de caractères spécifiant le mot de passe, respectez la casse (majuscule et/ou minuscule).
DrawingObjects = True
pour protéger les formes, False par défaut.
Contents = True
pour protéger le contenu, True par défaut.
Scenarios = True
pour protéger les scénarios, True par défaut.
UserInterfaceOnly =True
pour protéger l'interface utilisateur, mais pas les macros. Par défaut, la protection s'applique à la fois aux macros et à l'interface utilisateur.
Select Sélectionne la feuille.
Unprotect(Password) Supprime la protection d'une feuille, sans effet si la feuille n'est pas protégée.

Remonter IV. Les évènements

Depuis la version 97, VBA gère les évènements suivants d'un classeur, vous pouvez ainsi effectuer une action lors de ces évènements :
Procédure Se produit
Sub WorkSheet_Activate() lorsque la feuille est activée
Sub WorkSheet_Deactivate() lorsque la feuille est désactivée
Sub WorkSheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) lorsque l'utilisateur double-clique sur une feuille de calcul.
Target est la cellule la plus proche du pointeur de la souris lorsque le double-clic se produit.
Si vous attribuez la valeur True à Cancel, l'évènement est annulé.
Sub WorkSheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) lorsque l'utilisateur clique avec le bouton droit de la souris. Se comporte comme le précédent évènement.
Sub WorkSheet_Calculate() après le recalcul de la feuille de calcul
Sub WorkSheet_Change(ByVal Target As Range) lorsque les cellules de la feuille de calcul sont modifiées par l'utilisateur ou par un lien externe.
Target représente la plage modifiée, elle peut contenir plusieurs cellules.
Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) lorsque vous cliquez sur un lien hypertexte.
Target représente l'objet Hyperlink qui représente la destination du lien hypertexte.
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) lorsque la sélection change dans une feuille de calcul.
Target représente la nouvelle plage sélectionnée.

Quelques exemples :

  • Cochez une cellule :
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        If Target = "" Then
            Target = "X"
        Else
            Target = ""
        End If
        Cancel = True
    End Sub
  • Une farce, celle-ci déplace la sélection d'une ligne vers le bas et d'une colonne vers la droite :
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Static Farce As Boolean

        If Not Farce Then
            Farce = True
            Target.Offset(1, 1).Select
        Else
             Farce = False
        End If
    End Sub

    Pourquoi utiliser Farce, tout simplement parce que lorsque vous sélectionnez la nouvelle cellule avec Target.Offset(1, 1).Select, vous appelez de nouveau la procédure (Farce étant maintenant à True, vous n'exécutez pas de nouveau cette ligne), si cette variable n'existait pas la procédure travaillerait en boucle jusqu'à la provocation d'une erreur (vous vous retrouvez dans la cellule inférieure droite de la feuille).
  • Limiter l'évènement à une plage de cellule :
    Vous voulez, par exemple, exécutez une procédure lorsqu'une cellule de la plage A2:C10 est modifiée. Dans notre exemple, la procédure va simplement afficher le contenu et l'adresse de la cellule active.
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Union(Target, Range("A2:C10")).Address <> Range("A2:C10").Address Then Exit Sub
        MsgBox "La cellule " & ActiveCell.Address & " est égale à " & ActiveCell
    End Sub

    La méthode Union renvoie l'union d'une série de plages, ici si la cellule fait partie de la plage A2:C10 alors Union renverra la plage A2:C10 alors que si elle est en dehors, elle renvoie une combinaison de plage.
AccueilDébut de la page