| auteur : Bidou |
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.
Vba |
ActiveWorkbook. Sheets . Add After:= ActiveWorkbook. Sheets . Item (ActiveWorkbook. Sheets . Count ), Type:= xlChart
|
|
| auteur : Bidou |
En effet, certains objets ne donnent pas accès aux fonctionnalités Intellisense. Pour contourner le problème,
utilisez une variable:
Vba |
Dim objFeuille As Worksheet
Set objFeuille = ActiveWorkbook. ActiveSheet
|
A partir de là, objFeuille vous fournira ses propriétés / méthodes.
|
| auteur : SilkyRoad |
Sélectionnez une cellule dans la feuille.
Maintenez enfoncée la touche Ctrl et utilisez la molette de la souris.
|
| auteur : Bidou |
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.
Vba |
Private Sub Worksheet_SelectionChange (ByVal Target As Excel. Range )
If Not Application. Intersect (" Target " , Range (" A1 " )) Is Nothing Then
. . . . . . . . .
End If
End Sub
|
|
| auteur : SilkyRoad | Vba |
Sub test ()
supprimerFeuillesVides ThisWorkbook
End Sub
|
Vba |
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
|
|
| auteur : SilkyRoad |
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:
Vba |
Application. CommandBars (" Workbook tabs " ). ShowPopup 400 , 100
|
|
| auteur : SilkyRoad |
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.
|
| auteurs : Bidou, Pierre Fauconnier |
La formule générique est :
Vba |
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'Excel2000, Pour une plage nommée :
Vba |
MsgBox Split (Range (" Plage " ). Address (1 , 0 ), " $ " )(0 )
|
Pour un objet Range :
Vba |
Split (MaPlage. Address , " $ " )(1 )
|
|
| auteur : SilkyRoad |
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:
Vba |
WorkSheets (" Feuil1 " ). Tab . ColorIndex = 6
|
|
| auteur : SilkyRoad |
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.
Vba |
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:
Vba |
Worksheets (1 ). ResetAllPageBreaks
|
|
| auteur : SilkyRoad |
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 ...
|
| auteur : SilkyRoad |
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:
Vba |
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 Excel2007, 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.
|
| auteur : SilkyRoad |
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.
Vba |
Private Sub Workbook_Open ()
Dim Fichier As String
Fichier = ThisWorkbook. FullName
Application. DisplayAlerts = False
With ActiveWorkbook
. ExclusiveAccess
. UnprotectSharing
. Worksheets (" Feuil3 " ). Protect Contents:= True , UserInterfaceOnly:= True
. ProtectSharing Filename:= Fichier
End With
Application. DisplayAlerts = True
End Sub
|
|
| auteur : SilkyRoad |
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.
Vba |
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).
Vba |
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
|
|
lien : Lire et écrire dans les classeurs Excel fermés
|
| auteur : SilkyRoad |
Ces exemples effacent le contenu d'une feuille nommée "Feuil1".
En utilisant la bibliothèque "Microsoft ActiveX Data Objects 2.x Library":
Vba |
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":
Vba |
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
|
|
lien : Lire et écrire dans les classeurs Excel fermés
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2008
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|