FAQ VBA
FAQ VBAConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 133, dernière mise à jour : 15 juin 2021
- Quelles différences entre Sheet et Worksheet ?
- Je n'obtiens pas les propriétés et méthodes de l'objet ActiveSheet !
- Comment ajouter un numéro de page à l'impression ?
- Comment protéger ma feuille ?
- A quoi sert l'événement Calculate de la feuille ?
- Comment utiliser le paramètre Target des événements de feuilles ?
- Comment ajouter un CommandButton à une feuille ?
- Comment ajouter une commande au menu contextuel d'une cellule Excel ?
- Comment insérer une image sans donner sa taille et dans une cellule définie ?
- Comment appliquer une couleur à l'onglet d'une feuille (à partir de Excel 2002) ?
Attention, il n'existe pas d'objet Sheet. Un classeur renvoie deux collections, Sheets et Worksheets. La collection Sheets représente l'ensemble des feuilles d'un classeur quelque soit leurs types. La collection Worksheets représente l'ensemble des feuilles de calcul d'un classeur. De fait, on utilise la collection Sheets que lorsqu'on doit manipuler un classeur ayant des feuilles mixtes (graphiques et calculs), généralement pour ajouter une feuille graphique vierge.
ActiveWorkbook.Sheets.Add
After:=
ActiveWorkbook.Sheets.Item
(
ActiveWorkbook.Sheets.Count
), Type
:=
xlChart
En effet, sur Excel 97, certains objets ne donnent pas accès aux fonctionnalités Intellisense. Pour contourner le problème, utiliser une variable
Dim
objFeuille As
Worksheet
Set
objFeuille =
ActiveWorkbook.ActiveSheet
A partir de là, objFeuille vous fournira ses propriétés / méthodes
La gestion de la mise en page de votre feuille pour l'impression passe par l'intermédiaire de la propriété PageSetup. Celle-ci renvoie un objet PageSetup qu'il faut manipuler. Par exemple
With
objFeuille.PageSetup
.CenterFooter
=
"&P"
.CenterHeader
=
"&F"
.FirstPageNumber
=
3
.FitToPagesWide
=
1
.Orientation
=
xlLandscape
.PrintGridlines
=
False
.PrintHeadings
=
False
End
With
objFeuille.PrintOut
1
, 1
, 1
, False
Ce code imprime la feuille en mettant le nom du fichier dans l'en-tête, le numéro de page dans le pied, celui-ci commençant à 3, force l'impression sur une page en largeur en mode paysage. Ni les lignes, ni les numéros de lignes/colonnes ne seront imprimés.
La méthode Protect permet de gérer plusieurs protections selon les paramètres. Elle est de la forme
Protect
(
Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly)
Tout ces paramètres sont facultatifs. C'est pour cela qu'on trouve souvent des codes ressemblant à :
- DrawingObjects : protège les contrôles et les formes dessinées de la feuille
- Contents : Protège le contenu (graphique ou cellules)
- Scenarios : Protège les cellules variables du scénario
- UserInterfaceOnly : Protège les UserForm sans protéger le code
ActiveSheet.Protect
Password:=
"MonPasse"
, Contents:=
True
Je serais tenté de répondre "à rien". Celui-ci intervient après le recalcul, ce qui fait qu'il a peu d'utilisations concrètes. Néanmoins il permet de déclencher une opération nécessitant d'attendre la fin du recalcul
Target représente la plage des cellules affectées par l'événement. A ce titre, c'est un objet Range. Pour savoir si cette plage contient un élément d'un plage particulière, on teste l'intersection des deux plages.
Private
Sub
Worksheet_SelectionChange
(
ByVal
Target As
Excel.Range
)
If
Not
Application.Intersect
(
"Target"
, Range
(
"A1"
)) Is
Nothing
Then
.........
End
If
End
Sub
On passe par la méthode Add de la collection Shapes
Dim
objWorksheet As
Worksheet
Set
objWorksheet =
ThisWorkbook.Worksheets
(
1
)
objWorksheet.Shapes.AddOLEObject
"Forms.CommandButton.1"
, , , , , , , 141
, 28
.5
, 153
, 27
.75
Le bouton sera créé ici en (141;28,5) et d'une taille de 153x27,75
Pour ajouter une commande au menu contextuel (apparaissant sur click droit) d'une cellule, il suffit d'ajouter une entrée à la CommandeBar "Cell" (menu contextuel cellule feuille de calcul).
'
' Rajout d'une entrée dans menu contextuel
'
Function
MenuCell
(
stCde As
String
, stMess As
String
)
Dim
mc As
CommandBarControls
Dim
bo As
CommandBarButton
Set
mc =
CommandBars
(
"Cell"
).Controls
Set
bo =
mc.Add
(
msoControlButton, Temporary:=
True
)
bo.Caption
=
stMess
bo.OnAction
=
stCde
End
Function
Exemple d'utilisation :
Ajout d'une entrée Ajouter Prefixe, permettant, sur click droit sur une cellule, de remplacer la valeur de chaque cellule sélectionnée par la valeur courante précédée d'une chaine de caractére saisie dans une inputBox.
'Initialisation dans l'évènement Workbook_open
'
Private
Sub
Workbook_Open
(
)
MenuCell "Ajouter Prefixe"
, "AjoutePrefixe"
End
Sub
' Fonction exemple..
'
Sub
AjoutePrefixe
(
)
Dim
Pre As
String
Dim
s as
range, c As
Object
Pre =
InputBox
(
"prefixe"
)
Set
s =
Selection
For
Each
c In
s
c.Value
=
Pre &
c.Value
Next
End
Sub
C'est un peu complexe. Pour insérer une image on utilise habituellement :
Dim
objFeuille As
Worksheet, objShape As
Shape
Set
objFeuille =
ActiveSheet
Set
objShape =
objFeuille.Shapes.AddPicture
(
"c:\developpez\logo_developpez.gif"
, msoFalse, msoCTrue, 100
, 100
, 70
, 70
)
Cette méthode oblige de passer les valeurs de hauteur et de largeur (dans notre cas 70,70). Cependant, pour faire ce que vous voulez, il faut passer par la manipulation des objets Pictures
Dim
objFeuille As
Worksheet, objPict As
Picture
Set
objFeuille =
ActiveSheet
Set
objPict =
objFeuille.Pictures.Insert
(
"C:\developpez\logo_developpez.gif"
)
With
objPict
.Left
=
Range
(
"G2"
).Left
.Top
=
Range
(
"G2"
).Top
End
With
Cette option n'est disponible qu'à partir de la version Excel 2002.
En mode feuille de calcul : Click droit sur l'onglet >> Couleur d'onglet...
Par le code VBA :
'-- Appliquer une couleur jaune à l'onglet de la Feuil1
Sheets
(
"Feuil1"
).Tab.ColorIndex
=
6