Easy-Micro

ESPACEMEMBRE VBA
Objet Feuille

L'objet feuille

Un ensemble d'objets, souvent du même type, est une collection. Exemple : l'ensemble des feuilles d'un classeur: sheets. Au sein d'une collection, on identifie chaque élément par un index (numéro) ou un nom. Exemple, Sheets(1) identifie la 1ère feuille du classeur, tandis que Sheets("feuil1") identifie la feuille dont l'intitulé de l'onglet est feuil1.

Exemple, saisissez dans la fenêtre exécution (Ctrl + g) :
'Ajoute une feuille
ActiveWorkbook.Sheets.Add

'Ajoute une feuille en dernier
Sheets.Add.Move After:=Sheets(Sheets.Count)

'Ajoute une feuille nommée "Mafeuille" devant la feuille active
ActiveWorkbook.Sheets.Add.Name = "Mafeuille"

'Masque les onglets des feuilles (voir menu outils/options)
ActiveWorkbook.DisplayWorkbookTabs = False

'Imprimer la feuille active
ActiveWindow.SelectedSheets.PrintOut Copies:=1

Note : Quelle est la différence entre Sheets et WorkSheets ?
En fait, Sheets contient toutes les feuilles, même les graphiques ou les Macros Excel (En fait, tout ce que vous pouvez insérer quand vous cliquez avec le bouton droit sur un onglet et que vous choisissez "Insérer..."). Tandis que WorkSheets ne parcourt QUE les feuilles "Normales".


VBA Supprimer une (ou des) feuille(s)
'Exemple simple: supprimer une feuille
sheets(mafeuille").delete

'Autre exemple: Idéal: enlever les alertes
Application.DisplayAlerts = False
sheets("mafeuille").delete
Application.DisplayAlerts = True



VBA Feuilles et tableaux
Sub recupe_nom_feuille_ds_tableau()

Dim i As Integer
Public tableaudefeuille() As String

' Permet de redimentionner le tableau dynamiquement
' Cela évite de donner absolument un nombre précis dans les parenthèses
ReDim tableaudefeuille(Sheets.Count)

'Remplissage
For i = 0 To Sheets.Count - 1 'Une matrice commence toujours à 0
tableaudefeuille(i) = Sheets(i+1).Name
Next

'Exemple d'affichage
'Range("A10").Value = tableaudefeuille(1)

'Affiche tout le tableau
Dim h As Byte
For h = 0 To UBound(tableaudefeuille)
Range("A" & h +1).Value = tableaudefeuille(h)
Next h

End Sub


VBA Recherche de feuilles
Sub recherche_feuille()
'Rechercher une feuille dans un classeur

Dim mafeuille As Worksheet
Dim nomdemafeuille As String
Dim existelle As Boolean

' récupère les noms des feuilles du tableau tableaudefeuille (voir exemple ci-dessus)
nomdemafeuille = tableaudefeuille(1)
For Each mafeuille In ThisWorkbook.Worksheets
If StrComp(mafeuille.Name, nomdemafeuille, vbTextCompare) = 0 Then
'Renvoie une valeur de type Variant (Integer) indiquant le résultat d'une comparaison de chaines.
    existelle = True
    'mafeuille.Activate
    Exit For
End If
Next mafeuille

'Si existelle est False, il faut créer la feuille
If existelle = False Then
    Sheets.Add.Move After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = nomdemafeuille
End If

End Sub


VBA Récupérer le nom d'une feuille
Sub recupe_tout()
'Nombre de caractères
ActiveSheet.Range("A1").Value = Len(ActiveSheet.Name)

'Trois derniers caractère du nom de la feuilles
ActiveSheet.Range("A2").Value = Right(ActiveSheet.Name, Len(ActiveSheet.Name) - 3)

End Sub

VBA Impression
Un contenu dans Excel est nécéssaire pour tester tous ces exemples.
Définir l'imprimante par défaut :
ActivePrinter="Canon LBP-465 sur LPT1"

Définir la ligne de titre :
ActiveSheet.PageSetUp.PrintTitleRows="$1:$1"

Pour définir un appercu avant impression :
ActiveSheet.PrintPrewiew

Pour définir une zone d'impression :
ActiveSheet.PageSetup.PrintArea = "A1:$K$36"

Pour supprimer une zone d'impression :
ActiveSheet.PageSetup.PrintArea = ""

Sélectionner un bac d'impresion. La première page et les autres pages (280 est le numéro du bac):
ActiveSheet.PageSetUp.FirstPageTray=280
ActiveSheet.PageSetUp.OtherPagesTray=280

Sélectionner un bac d'impression depuis Word avec les
trois constantes Word : wdPrinterLowerBin ou wdPrinterUpperBin ou wdDialogFilePrint :
ActiveDocument.PageSetup.FirstPageTray = wdPrinterLowerBin
ActiveDocument.PageSetup.OtherPagesTray = wdPrinterLowerBin

Pour insérer un saut de page horizontal :
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell

Pour insérer un saut de page vertical :
ActiveWindow.SelectedSheets.VPageBreaks.Add Before:=ActiveCell

Pour imprimer, utilisez la méthode PrintOut, sa syntaxe est la suivante :

UnePlage.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName)

• From représente le numéro de la page à partir de laquelle commence l'impression. Si vous ne le spécifiez pas l'impression commence à la 1ère page.
• To représente le numéro de la dernière page à imprimer. Si vous ne le spécifiez pas l'impression s'effectue jusqu'à la dernière page.
• Copies représente le nombre de copies à imprimer. Si vous ne le spécifiez pas une seule copie est imprimée.
• Preview doit être à True pour afficher un aperçu avant l'impression.
• ActivePrinter définit le nom de l'imprimante.
• PrintToFile doit être à True pour imprimer dans un fichier. Si vous ne spécifiez pas PrToFileName, Excel invite l'utilisateur à entrer le nom du fichier.
• Collate doit être à True pour assembler plusieurs copies.
• PrToFileNams spécifie le nom du fichier vers lequel vous souhaitez effectuer l'impression.


VBA Liste des évènements de l'objet Worksheet
Activate : quand une feuille est activée
BeforeDoubleClick : lors d'un double-clic
BeforeRightClick : lors d'un clic avec le bouton droit de la souris
Calculate : après le recalcul de la feuille de calcul
Change : lors de la modification d'une cellule
Deactivate : quand une feuille est désactivée
FollowHyperlink : lors d'un clic sur un lien hypertexte
PivotTableUpdate : lorsqu'un rapport de tableau croisé dynamique a été mis à jour
SelectionChange : lors d'un changement de sélection

-> voir les Astuces de Michel pour d'autres exemple VBA sur les feuilles et sur les classeurs.


< Page précédente VBA Page suivante >