Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo
Sommaire > Les feuilles de calcul
        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 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 ?
        6.1. Les formes automatiques (8)
                Comment afficher le contenu d'une cellule dans une forme automatique ?
                Comment récupérer le nom de la forme sur laquelle j'ai cliqué ?
                Comment récupérer l'emplacement de la forme automatique dans la feuille ?
                Comment ajouter une forme automatique dans la feuille ?
                Comment boucler sur les formes contenues dans une feuille et renvoyer leur nom et leur type ?
                Comment supprimer toutes les formes dans la feuille ?
                Comment regrouper les formes automatiques ?
                Comment insérer une image dans une forme automatique ?
        6.2. Les objets type OleObject (13)
                Comment insérer un contrôle dans la feuille et lui attacher une macro ?
                Comment ajouter un Label transparent dans la feuille ?
                Comment boucler sur les cases à cocher ?
                Comment ajouter un bouton dynamiquement et y associer une macro ?
                Comment remplir une ComboBox sans doublon ?
                Comment trier le contenu d'un ComboBox par ordre alphabétique ?
                Comment lancer la macro d'un CommandButton depuis une autre macro ?
                Comment insérer un fichier Word dans la feuille de calcul ?
                Comment vérifier si le document Word, inséré dans la feuille, est vide ?
                Comment lancer en mode plein écran une présentation ppt contenue dans une feuille de calcul ?
                Comment insérer un son Wave dans une feuille de calcul ?
                Comment identifier le contrôle utilisé dans la feuille de calcul ?
                Comment gérer les tabulations pour passer d'un TextBox à l'autre, sur la feuille de calcul ?
        6.3. Les contrôles de formulaire (6)
                Quelle est la différence entre les contrôles de formulaire et les contrôles OleObject ?
                Comment vérifier le statut d'une case à cochée ?
                Comment boucler sur les cases à cocher formulaires d'une feuille de calcul ?
                Comment supprimer tous les contrôles de formulaire contenus dans une feuille ?
                Comment identifier les lignes sélectionnées dans une Listbox formulaire ?
                Comment créer des contrôles de formulaire dynamiquement par macro ?

precedent    sommaire    suivant   


Quelles différences entre Sheet et Worksheet ?
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

Je n'obtiens pas les propriétés et méthodes de l'objet ActiveSheet !
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.



Comment zoomer rapidement dans la feuille de calcul ?
auteur : SilkyRoad
Sélectionnez une cellule dans la feuille.
Maintenez enfoncée la touche Ctrl et utilisez la molette de la souris.


Comment utiliser le paramètre Target des événements de feuilles ?
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

Comment limiter la possibilité de déplacement dans une feuille ?
auteur : SilkyRoad
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.

Vba

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:

Vba

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:

Vba

Sub RetablitDefilement()
  ActiveSheet.ScrollArea = ""
End Sub 




Comment supprimer les feuilles vides dans un classeur ?
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

Ou trouver une description des méthodes et propriétés de la feuille de calcul ?
auteur : SilkyRoad
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.



Comment atteindre rapidement un onglet ?
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

Comment déplacer ou copier rapidement une feuille vers un autre classeur ?
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.



Comment obtenir la valeur en lettre de la colonne ?
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)

Comment appliquer une couleur à l'onglet d'une feuille (à partir de Excel 2002) ?
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

'-- Applique une couleur jaune à l'onglet de la Feuil1 
WorkSheets("Feuil1").Tab.ColorIndex = 6

Comment supprimer les sauts de pages dans une feuille ?
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

Comment personnaliser le premier numéro de page ?
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 ...



Comment regrouper les données contenues sur plusieurs feuilles ?
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.



Comment protéger une feuille dans un classeur déjà partagé ?
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()
    'testé sous Excel2007
    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

Comment lister le nom des feuilles d'un classeur sans l'ouvrir ?
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

Comment effacer toutes les données d'une feuille sans ouvrir le classeur ?
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

precedent    sommaire    suivant   

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.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com