|  | 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. 
												 |