FAQ VBA

FAQ VBAConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 133, dernière mise à jour : 15 juin 2021
Sommaire→Excel→Feuilles- 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:=xlChartEn 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.ActiveSheetA 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, FalseCe 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:=TrueJe 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 SubOn 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.75Le 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 SubC'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 WithCette 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


