Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUM OFFICE FAQs OFFICE TUTORIELS OFFICE LIVRES OFFICE SOURCES VBA ACCESS

Description de l'objet Feuille de calcul dans Excel

Date de publication : 14.11.2006 , Date de mise à jour : 15.04.2007

Par SilkyRoad (silkyroad.developpez.com)
 

Ce tutoriel décrit l'objet Feuille de calcul dans un classeur Excel.
Le document montre comment manipuler les feuilles par macro et propose une description des différentes méthodes et propriétés.

Tous les exemples de cette page ont été testés avec Excel2002.

I. Introduction
II. Les méthodes et propriétés dans La feuille de calcul
II-A. Les méthodes
II-A-1. Activate
II-A-2. Add
II-A-3. Calculate
II-A-4. ChartObjects
II-A-5. CheckSpelling
II-A-6. ClearArrows
II-A-7. Copy
II-A-8. CircleInvalid
II-A-9. ClearCircles
II-A-10. Delete
II-A-11. Evaluate
II-A-12. FillAcrossSheets
II-A-13. Move
II-A-14. OLEObjects
II-A-15. Paste
II-A-16. PasteSpecial
II-A-17. PivotTables
II-A-18. PivotTableWizard
II-A-19. PrintOut
II-A-20. PrintPreview
II-A-21. Protect
II-A-22. ResetAllPageBreaks
II-A-23. Scenarios
II-A-24. Select
II-A-25. SetBackgroundPicture
II-A-26. ShowAllData
II-A-27. ShowDataForm
II-A-28. Unprotect
II-B. Les propriétés
II-B-1. Application
II-B-2. AutoFilter
II-B-3. AutoFilterMode
II-B-4. Cells
II-B-5. CircularReference
II-B-6. CodeName
II-B-7. Columns
II-B-8. Comments
II-B-9. ConsolidationFunction
II-B-10. ConsolidationOptions
II-B-11. ConsolidationSources
II-B-12. Count
II-B-13. CustomProperties
II-B-14. DisplayPageBreaks
II-B-15. EnableAutoFilter
II-B-16. EnableCalculation
II-B-17. EnableOutlining
II-B-18. EnablePivotTable
II-B-19. EnableSelection
II-B-20. FilterMode
II-B-21. HPageBreaks
II-B-22. Hyperlinks
II-B-23. Index
II-B-24. MailEnvelope
II-B-25. Name
II-B-26. Outline
II-B-27. PageSetup
II-B-28. Parent
II-B-29. ProtectContents
II-B-30. ProtectDrawingObjects
II-B-31. Protection
II-B-32. ProtectionMode
II-B-33. ProtectScenarios
II-B-34. QueryTables
II-B-35. Range
II-B-36. Rows
II-B-37. ScrollArea
II-B-38. Shapes
II-B-39. StandardHeight
II-B-40. StandardWidth
II-B-41. Tab
II-B-42. Type
II-B-43. UsedRange
II-B-44. Visible
II-B-45. VPageBreaks
II-C. Les évènements
III. Cas particuliers
III-A. L'élément masqué Pictures
IV. Téléchargement


I. Introduction

Un classeur Excel est composé de feuilles de calcul et de feuilles graphiques, présentées sous formes d'onglets.




Les outils disponibles dans chaque feuille permettent la transformation des données brutes en informations pour calculer, analyser, mettre en forme et partager les résultats.
Chaque feuille de calcul est constituée de cellules: sur 65536 lignes par 256 colonnes (jusqu'à la version 2003 d'Excel), 1048576 lignes par 16384 colonnes dans Excel 2007. Les cellules permettent de stocker, puis de manipuler les données et sont principalement utilisées pour recevoir les fonctions (Formules) du tableur. Une feuille peut aussi contenir d'autres objets: Des images, contrôles, graphiques incorporés, formes automatiques, fichiers incorporés...
Le nombre d'onglets est uniquement limité par la quantité de mémoire disponible dans un classeur.


Il existe quatre possibilités pour spécifier une feuille par macro:

* Par le nom d'onglet:
'Cet exemple active la feuille nommée "historique2006"
Worksheets("historique2006").Activate


* Par l'index (L'index correspond à la position de l'onglet dans le classeur. La feuille de gauche porte l'index 1):
'Active la 1ere feuille du classeur
Worksheets(1).Activate


* Par la feuille active (Visible au premier plan):
'Renvoie le nom de la feuille placée au premier plan
ActiveSheet.Name


* Par le CodeName:
'Active la feuille dont le nom de code objet est "Feuil1"
Feuil1.Activate

Le CodeName représente le nom de l'objet Feuille dans l'éditeur de macros. Il ne faut pas le confondre avec le nom de l'onglet. Les 2 sont identiques par défaut, mais le CodeName ne change pas lorsque vous modifiez le nom d'un onglet.

Le CodeName peut être modifié dans la fenêtre propriété du module objet.




La propriété Sheets renvoie tous les types de feuilles contenues dans le classeur: Les feuilles graphiques et feuilles de calcul.
La propriété Worksheets renvoie uniquement la collection de feuilles de calcul.

Lorsque vous souhaitez placer la feuille de calcul dans une variable, utilisez l'objet Worksheet:
Vba

'Déclare la variable objet Worksheet 
Dim Ws As Worksheet 

'Attribue la référence objet à la variable 
'La feuille est un Objet: la variable doit donc être précédée de l'instruction Set lors de l'attibution. 
Set Ws = Worksheets("Feuil2") 
'Manipulation de l'objet: 
'Exemple pour renvoyer l'index (position) de la feuille dans le classeur 
MsgBox "Index de la feuille nommée '" & Ws.Name & "': " & Ws.Index



Si vous souhaitez créer une boucle sur l'ensemble des feuilles de calcul, utilisez:
Vba

'Déclare la variable objet Worksheet 
Dim Ws As Worksheet 

'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris 
'en compte. 
'ThisWorkbook correspond à l'objet classeur contenant la macro 
For Each Ws In ThisWorkbook.Worksheets 
    'Renvoie le nom de chaque feuille 
    MsgBox Ws.Name 
Next Ws 



Si le classeur contient un onglet Graphique et que vous souhaitez l'intégrer dans la boucle, utilisez:
Vba

'Déclare la variable objet 
Dim Ws As Object 

'Boucle sur tous les onglets du classeur 
'ThisWorkbook correspond à l'objet classeur contenant la macro 
For Each Ws In ThisWorkbook.Sheets 
    'Renvoie le nom de chaque onglet 
    MsgBox Ws.Name 
Next Ws


'Nota:
'La clause TypeOf permet de contrôler vers quel objet de l'application pointe la variable. 
'Pour retrouver le nom de toutes les feuilles graphiques dans le classeur actif, vous pouvez utiliser:
  	'Dim Sh As Object
  	'For Each Sh In ActiveWorkbook.Sheets
  	'If TypeOf Sh Is Chart Then MsgBox Sh.Name
  	'Next



II. Les méthodes et propriétés dans La feuille de calcul


II-A. Les méthodes


II-A-1. Activate

Permet d'activer un onglet.
Cet exemple active la feuille nommée "Feuil1".
Vba

Worksheets("Feuil1").Activate



II-A-2. Add

Permet d'ajouter une feuille dans le classeur. Add(Before, After, Count, Type).

L'argument Before spécifie la feuille avant laquelle la nouvelle feuille est ajoutée.
L'argument After spécifie la feuille après laquelle la nouvelle feuille est ajoutée.
L'argument Count spécifie le nombre de feuilles à ajouter. La valeur par défaut est 1 si l'argument n'est pas précisé.
L'argument Type spécifie le type de feuille ajouté (xlWorksheet, xlChart).
Vba

'Ajoute une feuille et la positionne à la fin du classeur.
ThisWorkbook.Sheets.Add After:=Sheets(ThisWorkbook.Sheets.Count)

'Exemple pour ajouter 3 feuilles:
ThisWorkbook.Sheets.Add After:=Sheets(ThisWorkbook.Sheets.Count), Count:=3



II-A-3. Calculate

Permet de déclencher le calcul des fonctions dans la feuille indiquée.
Vba

'Lance le calcul dans la 1ere feuille du classeur
Worksheets(1).Calculate 



II-A-4. ChartObjects

Renvoie la collection de graphiques placés dans la feuille de calcul. Ces graphiques sont aussi dits "incorporés".

La procédure suivante boucle sur les graphiques de la feuille active afin de les redimensionner et les repositionner verticalement.
Vba

Dim Ch As ChartObject

Application.ScreenUpdating = False

'Boucle sur les graphiques de la feuille active
For Each Ch In ActiveSheet.ChartObjects
    'Récupère le nom de chaque graphique
    'MsgBox Ch.Name

    With Ch
        .Left = 50 'position horizontale
        .Top = 20 + (230 * (Ch.Index - 1)) 'position verticale
        .Height = 200 'hauteur graphique
        .Width = 350 'largeur graphique
    End With
Next Ch

Application.ScreenUpdating = True


Un graphique spécifique peut être manipulé par son index ou son nom:
Vba

'Permet de renommer le 1er graphique de la feuille active
ActiveSheet.ChartObjects(1).Name = "Le Graphique"

'Vérifie le nom attribué
MsgBox ActiveSheet.ChartObjects(1).Name

'Permet de renommer un graphique nommé "Le Graphique"
ActiveSheet.ChartObjects("Le Graphique").Name = "Nouveau Nom"

'Vérifie le nom attribué
MsgBox ActiveSheet.ChartObjects(1).Name



II-A-5. CheckSpelling

Permet de lancer la correction orthographique dans la feuille spécifiée.

Cet exemple vérifie l'orthographe des mots saisis dans le Feuil1. La boîte de dialogue s'affiche si des corrections sont nécéssaires.
Vba

Dim IgnoreMajuscule As Boolean
Dim Suggestion As Boolean
Dim MonDico As String

'indique le nom de fichier du dictionnaire personnalisé à examiner si le mot
'n'est pas trouvé dans le dictionnaire principal.(Facultatif)
MonDico = ""

'Affiche une liste de suggestions lorsqu'un mot est mal orthographié.(Facultatif)
Suggestion = True
'Permet d'ignorer les mots en majuscules.(Facultatif)
IgnoreMajuscule = True

Worksheets("Feuil1").CheckSpelling MonDico, IgnoreMajuscule, Suggestion



II-A-6. ClearArrows

Permet d'effacer les flèches d'audit dans la feuille de calcul.
Ces flèches ont été ajoutées à l'aide de la fonction d'audit ( Menu Outils / Audit de formules / ...).
Vba

Worksheets("Feuil1").ClearArrows



II-A-7. Copy

Effectue une copie de la feuille.
Les arguments Before et After permettent de spécifier l'onglet avant ou après lequel la feuille copiée sera placée (Il n'est pas possible d'utiliser ensemble les deux arguments).
Vba

'Crée une copie de la Feuil1 et la positionne à la fin du classeur.
Worksheets("Feuil1").Copy After:=Sheets(Sheets.Count)

Si vous ne spécifiez pas les arguments Before ou After, la procédure crée un nouveau classeur contenant la feuille copiée.
Vba

'Crée une copie de la Feuil1 dans un nouveau classeur
Worksheets("Feuil1").Copy
'Sauvegarde la copie
ActiveWorkbook.SaveAs "C:\LaFeuilleDupliquee.xls"
'Ferme le classeur sauvegardé
ActiveWorkbook.Close True



II-A-8. CircleInvalid

Encercle les entrées incorrectes dans la feuille de calcul.
Vba

Worksheets("Feuil2").CircleInvalid



II-A-9. ClearCircles

Supprime les cercles qui indiquent des entrées incorrectes de la feuille de calcul.
Vba

Worksheets("Feuil2").ClearCircles



II-A-10. Delete

Permet de supprimer la feuille de calcul.
Nota:
Il n'est pas possible de supprimer une feuille si elle est unique dans le classeur.
Vba

'DisplayAlerts = False permet de ne pas afficher le message d'alerte qui survient
'lorsque l'on supprime un onglet.
Application.DisplayAlerts = False
'Suppression de la feuille nommée "Feuil2"
Worksheets("Feuil2").Delete
'Ne pas oublier de réinitialiser DisplayAlerts à True
Application.DisplayAlerts = True



II-A-11. Evaluate

Convertit le nom (conforme aux conventions Microsoft Office Excel) spécifié en objet ou en valeur.
Vba

Dim Cellule As Range

'--- Utilise Evaluate pour récupérer le contenu de la cellule A1
MsgBox Worksheets("Feuil1").Evaluate("A1")
'Equivalent:
MsgBox Worksheets("Feuil1").[A1]


'--- Utilise Evaluate pour définir un objet Range
Set Cellule = Worksheets("Feuil1").[A1]
'Applique la couleur verte dans la cellule
Cellule.Interior.ColorIndex = 4



II-A-12. FillAcrossSheets

Copie la plage de cellules d'un onglet au même emplacement dans toutes les autres feuilles de calcul spécifiées.
Vba

Dim Tableau As Variant
Dim ArgType As Long

'--- Précise comment doit être copiée la plage de cellules
'xlFillWithAll est la valeur par défaut si l'agument n'est pas spécifié
ArgType = xlFillWithAll 'copie tout
'ArgType = xlFillWithContents 'contenu des cellules
'ArgType = xlFillWithFormats 'Le format des cellules
'---

Tableau = Array("Base", "Feuil1", "Feuil3", "Feuil6")
'Copie la plage A1:A10 de la feuille "Base" vers les feuilles spécifiées 
'dans le tableau Array("Feuil1", "Feuil3", "Feuil6"):
    'Nota:
    'La feuille source doit être aussi indiquée dans le tableau
Sheets(Tableau).FillAcrossSheets Worksheets("Base").Range("A1:A10"), ArgType



Pour recopier la plage A1:E5 de la Feuil1 dans toutes autres les feuilles du classeur, utilisez:
Vba

Worksheets.FillAcrossSheets Worksheets("Feuil1").Range("A1:E5"), xlFillWithAll



II-A-13. Move

Permet de déplacer une feuille dans le classeur.
Les arguments Before et After permettent de spécifier l'onglet avant ou après lequel la feuille sera déplacée. (Il n'est pas possible d'utiliser ensemble les deux arguments).

Cet exemple trie les feuilles par ordre alphabétique.
Vba

Sub TrierFeuilles()
    Dim WS As Object
    Dim I As Byte
    
    Application.ScreenUpdating = False
        For Each WS In ActiveWorkbook.Sheets
            For I = 2 To ActiveWorkbook.Sheets.Count
                If Sheets(I - 1).Name > Sheets(I).Name Then _
                    Sheets(I - 1).Move After:=Sheets(I)
            
            Next I
        Next WS
    Application.ScreenUpdating = True
End Sub


Si vous n'indiquez pas les arguments Before ou After, la propriété déplace la feuille du classeur d'origine vers un nouveau classeur.


II-A-14. OLEObjects

Représente les contrôles ActiveX, les objets OLE incorporés ou liés dans une feuille de calcul.

Cette procédure crée un objet CommandButton dans la feuille et y associe une procédure évènementielle.
Vba

Dim Ws As Worksheet
Dim Obj As OLEObject
Dim laMacro As String
Dim x As Integer

Set Ws = Sheets.Add 'Ajoute une nouvelle feuille
    
'ajoute un CommandButton dans la nouvelle feuille
Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1")
With Obj
    .Name = "monBouton" 'renomme le bouton
    .Left = 50 'position horizontale par rapport au bord gauche de la feuille
    .Top = 50 'position verticale par rapport au bord haut de la feuille
    .Width = 150 'largeur
    .Height = 30 'hauteur
    .Object.Caption = "Supprimer données feuille"
End With

'Ajoute la procédure dans la feuille
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
    .CreateEventProc "Click", "monBouton"
    x = .ProcStartLine("monBouton_Click", vbext_pk_Proc)
    .InsertLines x + 2, "Cells.Clear"
End With



Cette procédure montre comment boucler sur la collection de contrôles dans la feuille.
Vba

Dim Obj As OLEObject
    
For Each Obj In Feuil1.OLEObjects
    'Nom de l'objet.
    Debug.Print Obj.Name
    
    'Type de contrôle.
    '(Renvoie une erreur si la feuille contient des objets type fichiers insérés)
    Debug.Print TypeName(Obj.Object)
Next Obj



Il est possible de boucler sur un type d'objets spécifique.
Cet exemple utilise la fonction TypeName:
Vba

Dim Obj As OLEObject
    
'Boucle sur les objets contenus dans la feuille.
For Each Obj In Feuil1.OLEObjects
    'Vérifie s'il s'agit d'un contrôle ActiveX
    If Obj.ShapeRange.Type = msoOLEControlObject Then
        'Vérifie s'il s'agit d'un TextBox et en récupère le contenu si c'est le cas.
        If TypeName(Obj.Object) = "TextBox" Then MsgBox Obj.Object.Value
    End If
Next Obj

Une autre méthode pour identifier les TextBox. Utilisation de l'instruction TypeOf:
Vba

Dim Obj As OLEObject
    
'Boucle sur les objets contenus dans la feuille.
For Each Obj In Feuil1.OLEObjects
    'Vérifie s'il s'agit d'un contrôle ActiveX
    If Obj.ShapeRange.Type = msoOLEControlObject Then
        'Vérifie s'il s'agit d'un TextBox et en récupère le contenu si c'est le cas.
        If TypeOf Obj.Object Is MSForms.TextBox Then MsgBox Obj.Object.Value
    End If
Next Obj



Et pour boucler sur des objets à partir de leur nom, utilisez l'exemple ci dessous qui boucle sur des TextBox nommés "TextBox1" à "TextBox4":
Vba

Dim i As Byte
For i = 1 To 4
    'Boucle sur 4 Textbox nommés "Textbox1" à "Textbox4" pour y afficher
    'les données contenues dans les cellules A1 à A4, dans la Feuil2.
    Feuil1.OLEObjects("TextBox" & i).Object.Text = Feuil2.Cells(i, 1)
Next



Cet exemple montre comment insérer un document Word, sous forme d'icône, dans la feuille.
Vba

Dim Ws As Worksheet
Dim Fichier As String

'Indique la feuille qui va recevoir l'objet
Set Ws = ThisWorkbook.Worksheets("Feuil1")

'Définit le fichier à insérer
Fichier = "C:\Documents and Settings\michel\le document.doc"

'Insère le document Word, sous forme d'icone, dans la feuille
Ws.OLEObjects.Add Filename:=Fichier, _
    Link:=False, DisplayAsIcon:=True, IconIndex:=0, _
    IconLabel:=Fichier



II-A-15. Paste

Colle le contenu du Presse-papiers dans la feuille spécifiée.
Vba

'Copie la plage de cellules A1:A10 dans la Feuil1
Worksheets("Feuil1").Range("A1:A10").Copy

'Effectue le collage dans la plage B1:B10 de la Feuil2
Worksheets("Feuil2").Paste Destination:=Worksheets("Feuil2").Range("B1:B10")
'ou
'Worksheets("Feuil2").Paste Destination:=Worksheets("Feuil2").Range("B1")

'Permet de désactiver le presse papier
Application.CutCopyMode = False

Le collage est effectué à l'emplacement de la sélection si vous ne spécifiez pas l'argument Destination.


L'argument Link permet de réaliser un collage avec liaison.
Vba

'
'Nécéssite d'activer la référence "Microsoft Forms 2.0 Object Library"
'
Dim Cible As dataObject

'-- Copie la plage de cellules A1:A10 dans la Feuil1 ---
Worksheets("Feuil1").Range("A1:A10").Copy

'Effectue un collage avec liaison dans la Feuil3
With Worksheets("Feuil3")
    .Activate
    .Range("E5").Select
    .Paste link:=True
End With
'-------------------------------------------------------

'--- permet de vider le presse papier ---
Set Cible = New dataObject
Cible.setText ""
Cible.putInClipboard
Set Cible = Nothing
'----------------------------------------

Les arguments Destination et Link ne peuvent pas être utilisés ensemble.


II-A-16. PasteSpecial

Permet d'effectuer un collage en précisant le format à appliquer.
Cet exemple colle un graphique au format image dans une autre feuille du classeur.
Vba

'Effectue une copie du 1er graphique contenu dans la feuille nommée "Feuil1"
Worksheets("Feuil1").ChartObjects(1).Copy
'Active la Feuil2
Worksheets("Feuil2").Activate
'Colle le graphique au format Image MetaFichier dans la Feuil2
Worksheets("Feuil2").PasteSpecial Format:="Picture (Enhanced Metafile)", _
    Link:=False, DisplayAsIcon:=False



II-A-17. PivotTables

Représente les tableaux croisés dynamiques contenus dans la feuille.

Vba

Dim Pvt As PivotTable
    
'Définit le TCD contenu dans la feuille
Set Pvt = Worksheets("Feuil4").PivotTables("Tableau croisé dynamique1")
'Met à jour le TCD
Pvt.RefreshTable



II-A-18. PivotTableWizard

Permet de créer un objet PivotTable dans la feuille.
L'exemple suivant ajoute un TCD dans la feuille nommée "Feuil4", à partir des données de la Feuil1. Le tableau croisé dynamique est positionné dans la cellule B10.
Vba

Worksheets("Feuil4").PivotTableWizard _
    SourceType:=xlDatabase, _
    SourceData:=Worksheets("Feuil1").Range("A1:E100").Address(, , xlR1C1, True), _
    TableDestination:=Worksheets("Feuil4").Range("B10"), _
    TableName:="TCD_1"

With Worksheets("Feuil4").PivotTables("TCD_1")
    .