FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- Quelles différences entre Sheet et Worksheet ?
- Je n'obtiens pas les propriétés et méthodes de l'objet ActiveSheet !
- Comment zoomer rapidement dans la feuille de calcul ?
- Comment utiliser les évènements dans la feuille de calcul ?
- Comment utiliser le paramètre Target des événements de feuilles ?
- Comment limiter la possibilité de déplacement dans une feuille ?
- Comment supprimer les feuilles vides dans un classeur ?
- Ou trouver une description des méthodes et propriétés de la feuille de calcul ?
- Comment atteindre rapidement un onglet ?
- Comment déplacer ou copier rapidement une feuille vers un autre classeur ?
- Comment obtenir la valeur en lettre de la colonne ?
- Comment appliquer une couleur à l'onglet d'une feuille (à partir de Excel 2002) ?
- Comment supprimer les sauts de pages dans une feuille ?
- Comment personnaliser le premier numéro de page ?
- Comment manipuler des en-têtes et pieds de pages par VBA ?
- Comment insérer une image dans l'en-tête de page, par VBA ?
- Comment ajouter des numéros de page dans l'en-tête d'une feuille, sous Excel 2007 ?
- Comment regrouper les données contenues sur plusieurs feuilles ?
- Comment protéger une feuille dans un classeur déjà partagé ?
- Comment lister le nom des feuilles d'un classeur sans l'ouvrir ?
- Comment effacer toutes les données d'une feuille sans ouvrir le classeur ?
- Comment synchroniser le défilement des feuilles dans deux classeurs différents ?
- Comment définir rapidement une même largeur pour plusieurs colonnes d'une feuille ?
- Comment modifier le nombre de feuilles par défaut dans les nouveaux classeurs, sous Excel 2007 ?
- Où se trouve la transaction 'Aperçu des sauts de page' sous Excel 2007 ?
- Comment empêcher l'insertion ou la suppression de colonnes dans un tableau, sans protéger la feuille ?
- Comment supprimer la ligne complète si les cellules de la colonne A sont vides ?
- Comment afficher le nom de la feuille dans une cellule, par formule ?
- Comment réafficher des onglets masqués, sous Excel 2007 ?
- 6.1. Les formes automatiques (13)
- 6.2. Les objets type OleObject (20)
- 6.3. Les contrôles de formulaire (9)
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, certains objets ne donnent pas accès aux fonctionnalités Intellisense. Pour contourner le problème, utilisez une variable :
Dim
objFeuille As
Worksheet
Set
objFeuille =
ActiveWorkbook.ActiveSheet
A partir de là, objFeuille vous fournira ses propriétés / méthodes.
Sélectionnez une cellule dans la feuille.
Maintenez enfoncée la touche Ctrl et utilisez la molette de la souris.
Consultez l'article sur les évènements dans la feuille de calcul.
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
Faites un clic droit sur l'onglet de la feuille.
Choisissez l'option "Visualiser le code".
Affichez la fenêtre "Propriétés" (raccourci clavier F4).
Saisissez dans le champ "ScrollArea": $A$1
:$G$50
Fermez l'éditeur VBE.
Vous limitez ainsi l'accès de la ligne 50 et de la colonne G, dans la feuille sélectionnée.
Vous pouvez aussi utiliser la propriété ScrollArea par macro :
La macro suivante empêche également de faire défiler la feuille active au-delà
de la ligne 50 et de la colonne G.
Sub
LimiteDefilement
(
)
ActiveSheet.ScrollArea
=
"A1:G50"
End
Sub
Remarque :
Qu'elle soit paramétrée manuellement ou par macro, la propriété ScrollArea est réinitialisée à la
fermeture du classeur. A chaque
réouverture, cette propriété contient un champ vide. Utilisez l'évènement
Workbook_Open
si vous souhaitez automatiser la restriction à chaque ouverture du fichier :
Private
Sub
Workbook_Open
(
)
Worksheets (
"Feuil1"
).ScrollArea
=
"A1:G50"
End
Sub
Pour réinitialiser l'accès à l'ensemble de la feuille par macro, utilisez :
Sub
RetablitDefilement
(
)
ActiveSheet.ScrollArea
=
""
End
Sub
Sub
test
(
)
supprimerFeuillesVides ThisWorkbook
End
Sub
Sub
supprimerFeuillesVides
(
Wb As
Workbook)
Dim
Ws As
Worksheet
Application.ScreenUpdating
=
False
For
Each
Ws In
Wb.Worksheets
If
Ws.UsedRange.Cells.Address
=
"$A$1"
And
_
IsEmpty
(
Ws.Range
(
"A1"
)) And
Ws.Shapes.Count
=
0
Then
Application.DisplayAlerts
=
False
If
Wb.Worksheets.Count
>
1
Then
Ws.Delete
Application.DisplayAlerts
=
True
End
If
Next
Ws
Application.ScreenUpdating
=
True
End
Sub
Utilisez en premier lieu l'aide Excel (F1) très bien documentée.
Vous pouvez aussi consulter le tutoriel sur
la description de l'objet Feuille de calcul dans Excel.
Lorsque votre classeur est constitué de nombreuses feuilles, il est parfois pratique d'afficher la liste
des onglets dans un menu contextuel.
Pour obtenir cette liste, faites un clic droit sur la gauche de la barre d'onglets.
Ensuite, sélectionnez le nom d'onglet que vous souhaitez atteindre.
Il est aussi possible d'afficher ce menu par macro :
Application.CommandBars
(
"Workbook tabs"
).ShowPopup
400
, 100
Pour déplacer une feuille vers un autre classeur, faites glisser l'onglet dans la fenêtre de ce classeur.
Pour copier la feuille, maintenez la touche Ctrl enfoncée et faites glisser l'onglet.
Une autre solution consiste à faire un clic droit dans l'onglet à déplacer.
Ensuite, sélectionnez l'option Déplacer ou copier.
Sélectionnez le classeur de destination puis la feuille à copier, dans la boîte de dialogue.
Cochez l'option Créer une copie pour dupliquer la feuille dans le classeur de destination.
La formule générique est :
NumCol =
Cells
(
1
, 72
).Column
MsgBox
IIf
(
NumCol >
26
, Chr
(
64
+
NumCol \
26
) &
Chr
(
64
+
NumCol Mod
26
), Chr
(
64
+
NumCol))
D'autres possibilités à partir d'Excel 2000, Pour une plage nommée :
MsgBox
Split
(
Range
(
"Plage"
).Address
(
1
, 0
), "$"
)(
0
)
Pour un objet Range :
Split
(
MaPlage.Address
, "$"
)(
1
)
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 :
'-- Applique une couleur jaune à l'onglet de la Feuil1
WorkSheets
(
"Feuil1"
).Tab.ColorIndex
=
6
Les sauts de pages peuvent être verticaux (VPageBreaks) ou horizontaux (HPageBreaks). Seuls les sauts de page manuels (VPageBreaks(i).Type = xlPageBreakManual) peuvent être supprimés.
Cet exemple supprime tous les sauts de pages verticaux dans le 1er onglet.
Dim
i As
Integer
Dim
Wb As
Workbook
Set
Wb =
ThisWorkbook
MsgBox
Wb.Worksheets
(
1
).VPageBreaks.Count
For
i =
Wb.Worksheets
(
1
).VPageBreaks.Count
To
1
Step
-
1
If
Wb.Worksheets
(
1
).VPageBreaks
(
i).Type
=
xlPageBreakManual Then
_
Wb.Worksheets
(
1
).VPageBreaks
(
i).Delete
Next
Un exemple pour supprimer tous les sauts de pages manuels (verticaux et horizontaux) dans la feuille :
Worksheets
(
1
).ResetAllPageBreaks
Suivez cette procédure pour personnaliser la numérotation des pages dans une feuille.
Dans la feuille active :
Menu Fichier
Mise en page
Onglet Page
Dans le champ "Commencer la numérotation à:", saisissez la valeur que vous souhaitez utiliser pour la première page.
Si par exemple vous indiquez 2: la première page de la feuille active prendra cette valeur, La deuxième page de la feuille active
prendra le numéro 3 ... etc ...
Compléter les en-têtes et pieds de pages peut devenir une tâche fastidieuse lorsque le classeur
comporte un nombre important d'onglets.
Il est possible d'effectuer, via un bout de code en VBA, cette tâche une seule fois et de l'appliquer
automatiquement à l'ensemble des onglets.
Cette option est disponible à partir d'Excel 2002.
Remarque :
Par VBA, Il est nécessaire que "&G" fasse partie de la chaîne
de la propriété LeftHeader, afin que l'image s'affiche dans l'en-tête gauche.
Sub
insertionImage_EntetePage
(
)
With
ActiveSheet.PageSetup.LeftHeaderPicture
.Filename
=
_
"C:\Documents and Settings\michel\dossier\monImage.jpg"
.Height
=
40
' redéfinit la largeur de l'image
.Width
=
80
' redéfinit la hauteur de l'image
End
With
'Remarque Il est nécessaire que « &G » fasse partie de la chaîne
'de la propriété LeftHeader afin que l'image s'affiche dans l'en-tête gauche.
'info issue de l'aide en ligne Excel.
ActiveSheet.PageSetup.LeftHeader
=
"&G"
End
Sub
Passez en mode "Mise en page" afin d'accéder à l'en-tête de la feuille.
Sélectionnez une des trois zones au dessus du quadrillage de la feuille.
Un nouvel onglet "Création/Outils des en-têtes et pieds de page" apparait dans le ruban.
Dans le groupe "En-tête et pied de page", cliquez sur le bouton "En-tête".
Sélectionnez "Page 1 de ?" dans la liste déroulante.
Remarquez que de nombreuses autres options sont disponibles pour personnaliser les en-têtes.
Le champ est ajouté dans l'en-tête et affiche automatiquement les numéros de page sur le nombre total.
Vous pouvez bien entendu effectuer la même opération sur les pieds de page.
Si les tableaux sont structurés de manière identique, il est possible d'utiliser la fonction de consolidation d'Excel.
Sélectionnez une feuille vierge.
Utilisez le menu "Données".
Sélectionnez l'option "Consolider".
Sélectionnez une plage de cellules et cliquez sur le bouton "Ajouter" pour intégrer chaque tableau dans la consolidation.
Indiquez la fonction à appliquer aux données (Somme, Nombre, Moyenne, Max ?etc ?)
Cochez les options "Ligne du haut" et/ou "Colonne de gauche" si vous souhaitez afficher les entêtes de lignes et de colonnes.
Cliquez sur le bouton OK pour valider.
Le tableau consolidé s'affiche dans la cellule active.
Utilisez le bouton "Parcourir" pour récupérer des données externes.
Ce qui pourrait s'écrire de façon équivalente par macro :
Feuil4.Range
(
"B2"
).Consolidate
Sources:=
Array
(
"[NomClasseur.xls]Feuil1!R1C1:R10C4"
, _
"[NomClasseur.xls]Feuil2!R1C1:R5C4"
, "[NomClasseur.xls]Feuil3!R1C1:R5C4"
), _
Function
:=
xlSum, TopRow:=
True
, LeftColumn:=
True
, CreateLinks:=
False
Si vous utilisez Excel 2007, cliquez sur l'onglet "Données" dans le ruban.
Cliquez sur le bouton "Consolider" dans le groupe "Outils de données".
La suite de la procédure reste identique aux versions précédentes d'Excel.
Il n'est pas possible de protéger une feuille dont le classeur est déjà partagé. La solution suivante enlève le partage provisoirement, le temps de protéger la feuille mais cela signifie que vous perdez tous les autres avantages du partage :
* Les modifications en cours qui n'ont pas été enregistrées par les autres utilisateurs seront perdues.
* L'historique des modifications sera effacé. Vous devrez donc créer préalablement une sauvegarde de l'historique.
Private
Sub
Workbook_Open
(
)
'testé sous Excel 2007
Dim
Fichier As
String
Fichier =
ThisWorkbook.FullName
Application.DisplayAlerts
=
False
'Protège la feuille "Feuil3" et autorise les modifications uniquement par macro (UserInterfaceOnly:=True)
With
ActiveWorkbook
.ExclusiveAccess
.UnprotectSharing
'"Password"
.Worksheets
(
"Feuil3"
).Protect
Contents:=
True
, UserInterfaceOnly:=
True
.ProtectSharing
Filename:=
Fichier ', Password:="Password"
End
With
Application.DisplayAlerts
=
True
End
Sub
C'est possible en utilisant les bibliothèques "Microsoft ActiveX Data Objects 2.x Library" et "Microsoft ADO Ext. 2.x for DDL and Security":
Vous remarquerez que :
Le nom des feuilles est suivi du symbole $.
Les noms sont renvoyés par ordre alphabétique.
Les noms qui contiennent un espaces sont encadrés par une quote '.
Les cellules et plages nommées (qui sont considérées comme des tables) sont aussi listées.
Le nom des feuilles créées dynamiquement (voir le chapitre IV-D) n'ont pas le symbole $.
Le nom des feuilles créées dynamiquement est renvoyé 2 fois: Par l'onglet et la plage nommée associée.
Sub
ListeFeuillesClasseurFerme
(
)
Dim
XlConnect As
Object, XlCatalog As
Object
Dim
Fichier As
String
, Resultat As
String
Dim
Feuille As
Object
Fichier =
"C:\dossier\Nom classeur.xls"
Set
XlConnect =
CreateObject
(
"ADODB.Connection"
)
Set
XlCatalog =
CreateObject
(
"ADOX.Catalog"
)
XlConnect.Open
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
&
Fichier &
_
";Extended Properties=Excel 8.0;"
Set
XlCatalog.ActiveConnection
=
XlConnect
For
Each
Feuille In
XlCatalog.Tables
Resultat =
Resultat &
Feuille.Name
&
vbCrLf
Next
MsgBox
Resultat
End
Sub
Et une fonction pour vérifier si une feuille spécifique existe (renvoie vrai ou faux).
Sub
Test
(
)
MsgBox
WorksheetExist
(
"C:\dossier\rapport.xls"
, "Feuil1"
)
End
Sub
Function
WorksheetExist
(
XlFile As
String
, strWsName As
String
) As
Boolean
Dim
XlConnect As
Object, XlCatalog As
Object
Dim
Feuille As
Object
Set
XlConnect =
CreateObject
(
"ADODB.Connection"
)
Set
XlCatalog =
CreateObject
(
"ADOX.Catalog"
)
XlConnect.Open
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
&
XlFile &
_
";Extended Properties=Excel 8.0;"
Set
XlCatalog.ActiveConnection
=
XlConnect
On
Error
Resume
Next
Set
Feuille =
XlCatalog.Tables
(
strWsName &
"$"
)
On
Error
GoTo
0
If
Feuille Is
Nothing
Then
WorksheetExist =
False
Else
WorksheetExist =
True
End
If
XlConnect.Close
Set
XlConnect =
Nothing
End
Function
Ces exemples effacent le contenu d'une feuille nommée "Feuil1".
En utilisant la bibliothèque "Microsoft ActiveX Data Objects 2.x Library":
Sub
EffacerContenuFeuille_ClasseurFerme
(
)
Dim
Cn As
ADODB.Connection
Dim
Fichier As
String
Fichier =
"C:\dossier\NomClasseur.xls"
Set
Cn =
New
ADODB.Connection
With
Cn
.Open
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
&
Fichier &
_
";Extended Properties=Excel 8.0;"
.Execute
"DROP TABLE [Feuil1$]"
.Close
End
With
Set
Cn =
Nothing
End
Sub
En utilisant la bibliothèque "Microsoft ADO Ext. 2.x for DDL and Security":
Sub
EffacerContenuFeuille_ClasseurFerme_V02
(
)
Dim
Cat As
ADOX.Catalog
Dim
Fichier As
String
Fichier =
"C:\dossier\NomClasseur.xls"
Set
Cat =
New
ADOX.Catalog
Cat.ActiveConnection
=
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
&
Fichier &
_
";Extended Properties=Excel 8.0;"
Cat.Tables.Delete
(
"Feuil1$"
)
Set
Cat =
Nothing
End
Sub
Cette méthode peut servir à comparer les données contenues dans deux classeurs.
Sous Excel 2007 :
Ouvrez les deux classeurs.
Activez les feuilles à comparer dans chaque classeur.
Sélectionnez l'onglet "Affichage".
Cliquez sur le bouton "Afficher côte à côte".
(Si plus de 2 classeurs sont déjà ouverts, Excel affiche une fenêtre pour choisir quel fichier va
être comparé avec le classeur actif.)
Le bouton "Défilement synchrone" (qui était jusque là grisé) est maintenant activé.
Les deux feuilles défilent désormais de manière synchrone lorsque vous utilisez la barre de défilement ou la molette de la souris.
Par défaut, les deux feuilles sont affichées horizontalement.
Cliquez sur le bouton "Réorganiser tout" pour modifier la mise en page des feuilles (par exemple verticalement).
Le bouton "Rétablir la position de la fenêtre" permet de réafficher horizontalement les deux feuilles à comparer.
Nota :
Vous pouvez désactiver provisoirement la fonction de défilement en cliquant sur le bouton "Défilement synchrone".
Sélectionnez plusieurs colonnes (contigües ou non contigües).
Cliquez sur le bord de l'entête de plus à droite de la sélection.
Redéfinissez la largeur de la colonne à en gardant le bouton gauche de la souris enfoncée et en la déplaçant horizontalement.
Toutes les colonnes sélectionnées sont redimensionnées à l'identique lorsque vous relâchez la souris.
Le principe est identique pour définir rapidement la hauteur des lignes.
Utilisez le bouton "Office"
Bouton "Options Excel"
Sélectionnez le menu "Standard"
Dans la partie "Lors de la création de classeurs", modifiez à votre convenance le nombre inscrit dans le
champ "Inclure des feuilles" (le nombre de feuilles initial est 3).
Cliquez sur le bouton OK pour valider.
Le nombre maximal de feuilles par défaut est 255. Si vous avez besoin de feuilles supplémentaires vous devrez les insérer manuellement : Sous Excel 2007, vous pouvez insérer une nouvelle feuille en cliquant sur le dernier onglet sur la droite dans la barre d'onglets. Vous pouvez également utiliser le raccourci clavier MAJ+F11.
Cette option se trouve en bas dans la barre d'état, juste à coté du curseur de zoom.
Le menu possède 3 boutons :
Normal,
Mise en page (telles qu'apparaitront les feuilles lors de l'impression),
Aperçu des sauts de page.
Une solution consiste à insérer une formule matricielle dans cette zone de cellules.
Il s'agit plus d'une protection contre les mauvaises manipulations mais qui sera déjà suffisamment efficace
pour la majorité des utilisateurs.
Par exemple, vous disposez d'un tableau dans les colonnes A à E.
Nous allons utiliser les noms de champs dans la première ligne du tableau pour créer une formule matricielle.
Sélectionnez la cellule A1.
Collez la formule suivante dans la cellule (ChampX correspond à chaque nom d'en-tête dans votre tableau).
=TRANSPOSE
({"Champ1"
;"Champ2"
;"Champ3"
;"Champ4"
;"Champ5"
})
Sélectionnez la plage A1:E1.
Appuyez sur la touche clavier F2.
Validez la formule matricielle : Ctrl+Maj+Entrée.
Maintenant, un message bloquant s'affiche lorsque vous tentez une insertion ou une suppression entre les colonnes A et E : "impossible de modifier une partie de matrice".
Supprimez la ligne d'en-tête pour annuler la protection.
Nota :
Si vous êtes bloqué dans la matrice, appuyez deux fois sur la touche Echap.
Remarque :
Cette solution renvoie une erreur si la colonne A ne contient pas de cellule vide entre les différents enregistrements.
'Supprime la ligne complète si les cellules de
'la colonne A sont vides.
Dim
x As
Long
x =
Range
(
"A65536"
).End
(
xlUp).Row
Cells.Range
(
"A1:A"
&
x).
_
SpecialCells
(
xlCellTypeBlanks).EntireRow.Delete
Excel dispose de la fonction =CELLULE
("nomfichier"
) qui permet d'afficher le
chemin, le nom du classeur et le nom de la feuille contenant la formule.
Il suffit ensuite d'écrire une fonction qui va extraire uniquement le nom de la feuille.
Le classeur doit être préalablement sauvegardé.
=DROITE
(CELLULE
("nomfichier"
;A1
);NBCAR
(CELLULE
("nomfichier"
;A1
))-TROUVE
("]"
;CELLULE
("nomfichier"
;A1
)))
Effectuez un clic droit sur la barre d'onglets.
Choisissez l'option 'Afficher' dans le menu contextuel.
Sélectionnez la feuille à réafficher dans la boîte de dialogue.
Cliquez sur le bouton OK pour valider.