IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ Excel

FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022 

 
OuvrirSommaireLes classeurs

Il y a deux méthodes. On peut restreindre le nombre de feuilles de calcul créées dans un nouveau classeur

Vba
Sélectionnez
Application.SheetsInNewWorkbook = 1
Application.Workbooks.Add

Seulement cela est un paramétrage de l'application et il faudrait restaurer l'ancienne valeur. On peut aussi créer un classeur contenant une feuille de type spécifique

Vba
Sélectionnez
Application.Workbooks.Add xlWBATWorksheet

contient une feuille de calcul

Vba
Sélectionnez
Application.Workbooks.Add xlWBATChart

Contient une feuille graphique

Créé le 14 février 2004  par Bidou

On utilise la méthode Open de la collection WorkBooks Elle accepte plusieurs paramètres dont quelques-uns sont utiles à connaître, FileName est le seul paramètre obligatoire. Il doit contenir le chemin complet

Vba
Sélectionnez
Application.Workbooks.Open "d:\tuto.xls"

On peut aussi passer par la méthode GetOpenFilename pour laisser l'utilisateur sélectionner le fichier

Vba
Sélectionnez
Application.Workbooks.Open Application.GetOpenFilename()

Les paramètres intéressants supplémentaires sont : UpdateLinks

* 0 --> Ne met à jour aucune référence
     * 1 --> Met à jour des références externes mais pas des références distantes
     * 2 --> Met à jour des références distantes mais pas des références externes
     * 3 --> Met à jour des références distantes et des références externes

Une référence externe appartient à un autre classeur, une référence distante appartient à un autre programme. ReadOnly Booléen qui définit si le classeur doit être ouvert en lecture seule Password Représente le mot de passe pour un classeur à ouverture protégée

Créé le 14 février 2004  par Bidou

Dans ce cas on utilises des variables :

Vba
Sélectionnez
Dim objWorkbookSource As Workbook, objWorkbookCible As Workbook
 
Set objWorkbookSource = Workbooks.Open(Application.GetOpenFilename)
Set objWorkbookCible = Workbooks.Add()

Il ne reste plus qu'à basculer entre les deux variables

Créé le 14 février 2004  par Bidou

Dans Excel, la protection d'un objet ne joue que sur les descendants directs.
Je m'explique: la protection d'un classeur ne protège que ses fenêtres et sa structure de feuille.

Si je fais :

Vba
Sélectionnez
ActiveWorkbook.Protect Password:="monpasse", Structure:=True, Windows:=False

Je ne protège que la structure. Cela veut dire qu'il n'est pas possible d'ajouter, de supprimer ou de déplacer des feuilles. En aucun cas cela ne protège les cellules. Pour cela il faut protéger la ou les feuilles.

Créé le 14 février 2004  par Bidou

On utilise la méthode FillAcrossSheet de l'objet WorkBook

Vba
Sélectionnez
ThisWorkbook.Worksheets.FillAcrossSheets Range("A1:C10"), xlFillWithAll

Notez que le deuxième paramètre permet de préciser si on veut dupliquer le contenu, le format ou les deux.

Créé le 14 février 2004  par Bidou

Sélectionnez la feuille complète (ou la plage de cellules) à dupliquer.
Ajoutez à la sélection, les feuilles qui vont recevoir les données.
Pour cela, vous avez deux solutions :
Regroupez les feuilles manuellement en conservant la touche SHIFT enfoncée, ou faites un clic droit dans la barre d'onglets et choisissez l'option 'Sélectionnez toutes les feuilles'.

Ensuite, activez l'onglet 'Accueil' dans le ruban.
Cliquez sur le bouton 'Remplissage' dans le groupe 'Edition'.
Choisissez l'option 'Dans toutes les feuilles de données'.

La boîte de dialogue qui s'affiche permet de préciser le type de recopie :
* Tout
* Le contenu
* Les formats

Cliquez sur le bouton OK pour valider.
La recopie a été effectuée sur les feuilles de destination.

Créé le 19 février 2009  par SilkyRoad

Dans le module ThisWorkbook on met

Vba
Sélectionnez
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Cancel=true 
End Sub

Comme à un moment il faudra fermer le classeur on désactivera la gestion des événements

Vba
Sélectionnez
Application.EnableEvents = False
ThisWorkbook.Close True
Créé le 14 février 2004  par Bidou

Les évènements permettent l'interaction entre votre programme et l'utilisateur. Il s'agit de procédures qui se déclenchent automatiquement lorsqu'une action prédéfinie survient.
Vous pouvez ainsi intercepter l'activation du classeur ou un de ses onglets, la modification d'une cellule, etc.

Les procédures évènementielles du module objet ThisWorkbook prennent en compte :
* Le classeur (Workbook_...)
* La collection de feuilles dans le classeur (Workbook_Sheet..)
* La fenêtre contenant le classeur (Workbook_Window...)

Pour plus de détails, consultez l'article sur les évènements du classeur.

Créé le 9 avril 2007  par SilkyRoad

ActiveWorkbook représente le classeur de la fenêtre active (qui se trouve au premier plan).

ThisWorkbook représente le classeur qui contient la macro en cours.

ThisWorkbook représente le classeur qui contient le code faisant appel à ThisWorkbook. ActiveWorkbook représente le classeur actif de l'application. De manière générale, il vaut mieux éviter les objets actifs et privilégier des variables, car la programmation des objets actifs est assez piègeuse : ceux-ci tendent à ne plus l'être (actif) quand on en a besoin.
Prenons un exemple.

 
Sélectionnez
Set objSheet = ThisWorkbook.Sheets("recup")
Application.Workbooks.Open "d:\user\tuto1.xls"
ActiveWorkbook.OpenLinks Name:=ActiveWorkbook.LinkSources(xlExcelLinks)

Après l'appel de OpenLinks plus de possibilité de savoir aisément quel classeur est désigné par ActiveWorkbook.

Créé le 10 avril 2007  par Bidou, Etienne Bar, SilkyRoad

Allez dans l'éditeur de macros.
Accédez à l'explorateur de projet (Ctrl+R)
Double cliquez sur le module objet ThisWorkbook de la macro complémentaire.
Dans les propriétés (menu Affichage/Fenêtre Propriétés ou F4), indiquez la valeur de IsAddin à False.
Sauvegardez le classeur sous un nouveau nom.

Créé le 14 avril 2007  par SilkyRoad

Qui n'a jamais subi le désagrément d'un fichier devenu impossible à ouvrir, et perdu ainsi des heures (voir des jours) de travail ?

Malheureusement, personne n'est à l'abri de ce type de soucis. Le lien ci dessous présente quelques solutions de dépannage afin de récupérer les données dans des classeurs Excel endommagés ou corrompus.
Les informations fournies n'ont pas la prétention de remplacer les outils professionnels. L'objectif consiste à décrire quelques pistes de dépannage, que vous pourrez facilement mettre en oeuvre par vos propres moyens.

Consultez le tutoriel.

Les exemples décrits dans ce document sont plus ou moins efficaces en fonction du type de problème rencontré dans les fichiers.
Il faut donc, avant tout, chercher à prévenir ces situations en créant des sauvegardes régulières de vos données.
Il est essentiel de mettre en place une stratégie permettant de sauvegarder les fichiers. Vous disposerez ainsi de copies récentes en cas de problème sur le fichier original.

Créé le 9 avril 2007  par SilkyRoad

Vous pouvez utiliser les formules de liaison afin de lire dans un classeur fermé :

 
Sélectionnez
='C:\Documents and Settings\dossier\[ClasseurBase.xls]Feuil1'!$A$1


Il est aussi possible de faire une recherche dans un classeur fermé.
La fonction suivante recherche "DVP" dans la colonne A et affiche la donnée correspondante de la colonne B :
=RECHERCHEV("DVP";'C:\Documents and Settings\dossier\[ClasseurBase.xls]Feuil1'!$A:$B;2;FAUX)

Vous devrez utiliser des macros si vous souhaitez écrire dans les classeurs fermés.
Consultez le tutoriel pour lire et écrire dans un classeur fermé, par macro.

Nota :
Pour vous connecter aux classeurs fermés Excel 2007 (xlsx et xlsm), en utilisant le modèle ADO, appliquez la chaîne de connexion suivante :

Vba
Sélectionnez
Dim Cn As ADODB.Connection
Dim Fichier As String
 
'Définit le classeur fermé servant de base de données
Fichier = "C:\Documents and Settings\mimi\dossier\NomClasseur.xlsx"
 
Set Cn = New ADODB.Connection
 
With Cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
        & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
    .Open
End With
Mis à jour le 30 septembre 2007  par SilkyRoad

Si dans votre feuille, un entête de colonne contient un point (Nom. Champ), vous devez remplacer le point par un dièse, dans la requête.

Exemple :

Vba
Sélectionnez
UPDATE [Feuil1] SET [Feuil1].[Nom# Champ] = .....
Créé le 26 mai 2008  par pc75

Utiliser le raccourci clavier Ctrl et F6 pour naviguer entre les classeurs ouverts.

Vous pouvez aussi atteindre rapidement un classeur en utilisant le menu Fenêtre.

Image non disponible

Créé le 15 avril 2007  par SilkyRoad

Appliquez la valeur False à la propriété EnableEvents. De cette manière, la procédure évènementielle Workbook_Open ne se déclenchera pas.

Vba
Sélectionnez
Sub OuvertureClasseur()
    Dim Fichier As String
    Dim Wb As Workbook
 
    Fichier = "C:\monClasseurBase.xls"
 
    'Désactive les évènements
    Application.EnableEvents = False
    'Ouvre le classeur
    Set Wb = Workbooks.Open(Filename:=Fichier)
    'Ne pas oublier de réactiver les évènements
    Application.EnableEvents = True
 
    '
    '...
    '
End Sub
Créé le 14 mai 2007  par SilkyRoad

Microsoft Office system 2007 dispose d'un complément gratuit pour enregistrer ou exporter vos fichiers aux formats PDF et XPS.

Installez et utilisez le complément pour convertir un document Office au format PDF ou XPS.

Si vous souhaitez ensuite créer un enregistrement pdf par macro, utilisez cette syntaxe :

Vba
Sélectionnez
'Attention :
'Si le fichier existe déjà il sera écrasé sans message d'avertissement.
'
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:="C:\Documents and Settings\mimi\dossier\NomClasseur.pdf", _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False

Pour enregistrer uniquement une plage de cellules :

Vba
Sélectionnez
Worksheets("Agenda").Range("A1:M42").ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:="C:\Documents and Settings\mimi\dossier\RapportTest.pdf", _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False
Mis à jour le 30 septembre 2007  par SilkyRoad

Le menu de vérification est un point important dans Excel 2007 car il liste toutes les fonctionnalités risquant d'être perdues ou dégradées si le classeur est enregistré dans une version d'Excel antérieure.
Par exemple, si vous sauvegardez votre classeur dans une ancienne version d'Excel, les données après la 65 536ième ligne et de la 256e colonne ne seront pas prise en compte.
De la même manière, les formules qui font références à des cellules au delà de cette limite poseront aussi un problème.

Une fois les points de différence identifiés, vous pourrez apporter les modifications nécessaires à une meilleure compatibilité descendante.

Pour lancer la procédure de vérification :
     Cliquez sur le bouton Office.
     Sélectionnez le menu Préparer.
     Cliquez sur le bouton Activer le vérificateur de compatibilité.
     Une boîte de dialogue va afficher tous les éléments incompatibles, ainsi que des liens d'aide et de correction.

Si vous utilisez une ancienne version d'Excel, vous pouvez lire, modifier et enregistrer les classeurs aux nouveaux formats Microsoft Office 2007 grâce au pack de compatibilité pour Microsoft Office 2000, Office XP ou Office 2003.

Téléchargez le pack de compatibilité.

Créé le 20 août 2007  par SilkyRoad

Avant de distribuer votre classeur, assurez vous que celui-ci ne contient plus de données personnelles ou confidentielles: le suivi des modifications, les commentaires, les textes masqués, les informations d'identification qui vous permettent de rédiger ou de modifier des documents en groupe (travail collaboratif)...

Pour supprimer les données confidentielles, utilisez :
     L'Inspecteur de document dans Excel 2007, en cliquant sur le bouton Office/Menu Préparer/Inspecter le document.

ou

Utilisez le complément de suppression des métadonnées pour Office 2003/XP.

L'inconvénient :
Il est possible que vous receviez des messages d'avertissement concernant la confidentialité au moment de la sauvegarde :
"Ce document contient des macros, des contrôles ActiveX, des informations sur le kit d'extension XML ou des composants Web. Ils peuvent renfermer des informations personnelles qui ne peuvent pas être supprimées par l'inspecteur de document."

Ce n'est pas un message d'erreur mais un message d'alerte car vous avez activé le paramètre de "suppression des informations personnelles de propriétés du fichier lors des enregistrements".

Pour annuler cette vérification :
Bouton Office
Bouton "Options Excel".
Menu "Centre de gestion de la confidentialité".
Bouton "Paramètres du centre de gestion de la confidentialité".
Décochez l'option "Supprimer les informations personnelles de propriétés du fichier lors de l'enregistrement".
Cliquez sur le bouton OK pour valider.

Mis à jour le 18 novembre 2008  par SilkyRoad

Si vous avez besoin de respecter une charte graphique ou si vous devez souvent répéter la même mise en forme dans différents classeurs, il peut être intéressant de créer un modèle afin de gagner du temps.

Ouvrez un nouveau classeur :
Bouton Office/Nouveau/Nouveau classeur Excel.

Appliquez les mises en forme et les personnalisations que vous souhaitez voir apparaitre dans votre futur modèle.

Lors de l'enregistrement, vous avez le choix entre 2 types d'extension :
* xltx (Modèle par défaut)
* xltm (Modèle autorisant les macros)

Quand vous sélectionnez un de ces deux formats dans le champ "Type de fichier", l'arborescence de la boîte de dialogue se place automatiquement sur le répertoire :

 
Sélectionnez
C:\Documents and Settings\mimi\Application Data\Microsoft\Templates

(Vous pouvez ajouter des sous dossiers dans "Templates" si vous devez ranger plusieurs modèles par thème).

Choisissez l'extension, nommez votre classeur et cliquez sur le bouton "Enregistrer" pour valider.

Ensuite, pour utiliser ce modèle :
Cliquez sur le bouton Office
Nouveau
Menu "Mes modèles" (à condition bien entendu d'avoir sauvegardé le fichier dans le dossier "Templates")
Votre modèle personnel apparait dans la boîte de dialogue "Nouveau".
Double cliquez sur le nom pour le lancer.
Un classeur normal, mais disposant de vos personnalisations, s'ouvre et vous pouvez travailler dessus comme pour n'importe quel autre fichier Excel. Vous remarquerez que dans chaque session Excel, le nom du modèle est suivi d'un numéro d'index incrémenté (NomModèle1, NomModèle2 ... etc... ) .

Créé le 2 octobre 2007  par SilkyRoad

Voici une macro à placer par exemple dans le module objet ThisWorkbook d'un classeur xla.
La procédure affiche le nom de tous les classeurs qui sont ouverts, après que le complément soit lancé.

Vba
Sélectionnez
Option Explicit
 
Public WithEvents XL As Excel.Application
 
 
Private Sub Workbook_Open()
  Set XL = Excel.Application
End Sub
 
'Pour gérer l'ouverture des classeurs 
Private Sub XL_WorkbookOpen(ByVal Wb As Workbook)
    'Affiche le nom du nouveau classeur ouvert
    If Wb.Name <> ThisWorkbook.Name Then MsgBox Wb.Name
End Sub
 
'Pour gérer la création de nouveaux classeurs
Private Sub XL_NewWorkbook(ByVal Wb As Workbook) 
    MsgBox Wb.Name 
End Sub
Mis à jour le 18 novembre 2008  par SilkyRoad

Utilisez le menu Outils,
Suivi des modifications,
Afficher les modifications.

La fenêtre qui s'affiche permet de spécifier :
     * La période.
     * Le nom de l'utilisateur.
     * La plage de cellules que vous souhaitez suivre.

Les cellules qui répondent aux critères de suivi sont encadrées et identifiables par un triangle bleu dans le coin supérieur gauche, lorsqu'elles sont modifiées.
Les informations de modifications apparaissent sous forme d'annotation lorsque vous passez le curseur de la souris sur la cellule.

L'option "Lister les modifications dans une autre feuille" récapitule les modifications sous forme de tableau de synthèse (onglet "Historique"). Les modifications du classeur doivent préalablement être sauvegardées.
     Menu Outils
     Suivi des modifications
     Afficher les modifications
     Cochez l'option "Lister les modifications dans une autre feuille et cliquez sur le bouton OK pour valider.

Le menu "Accepter ou refuser les modifications" permet, comme son nom l'indique, de valider ou pas, les modifications apportées dans le classeur :
     Menu Outils
     Suivi des modifications
     Accepter ou refuser les modifications
     Suivez les instructions de la boîte de dialogue pas à pas pour gérer les modifications.

Dans Excel 2007, cette fonction est accessible depuis l'onglet "Révision", groupe "Modifications".

Créé le 2 octobre 2007  par SilkyRoad
Vba
Sélectionnez
Sub Test()
    If VerifOuvertureClasseur("C:\Dossier\nom classeur.xls") Then
        MsgBox "Classeur déja ouvert."
    Else
        MsgBox "Classeur fermé."
    End If
End Sub
 
 
Function VerifOuvertureClasseur(Fichier As String) As Boolean
    Dim x As Integer
 
    On Error Resume Next
    x = FreeFile()
 
    Open Fichier For Input Lock Read As #x
    Close x
 
    If Err.Number = 0 Then VerifOuvertureClasseur = False
    If Err.Number = 70 Then VerifOuvertureClasseur = True
 
    On Error GoTo 0
End Function
Créé le 5 décembre 2007  par SilkyRoad

"Classeur1_Fermé.xls" est le classeur source. Toutes les données de la Feuil1 sont récupérées dans la requête.
Classeur2_Fermé.xls" est le classeur destination. Les données récupérées sont ajoutées a la suite des enregistrements existants.

Nota :
Le classeur contenant la macro et les 2 classeurs fermés sont dans le même répertoire.
Vous devez préalablement activer la référence "Microsoft ActiveX Data Object 2.x Library".

Vba
Sélectionnez
Sub tranfertEntreClasseursFermes()
Dim Cn As New ADODB.Connection
Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset
Dim oConn As ADODB.Connection
Dim j As Integer
 
'------------------------------------------------------------------
' "Classeur1_Fermé.xls" est le classeur source
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & ThisWorkbook.Path & "\Classeur1_Fermé.xls;" & _
    "Extended Properties=""Excel 8.0;HDR=NO;"""
 
'les donnees sources sont dans la Feuil1 du classeur "Classeur1_Fermé.xls"
oProdRS.Open "SELECT * FROM [Feuil1$]", Cn, adOpenStatic
 
 
'------------------------------------------------------------------
' "Classeur2_Fermé.xls" est le classeur destination
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & ThisWorkbook.Path & "\Classeur2_Fermé.xls;" & _
    "Extended Properties=""Excel 8.0;HDR=NO;"""
 
'les donnees sont à placer dans la Feuil1 du classeur "Classeur2_Fermé.xls"
Set oRS = New ADODB.Recordset
oRS.Open "Select * from [Feuil1$]", oConn, adOpenKeyset, adLockOptimistic
 
'------------------------------------------------------------------
'transfert des données
Do While Not (oProdRS.EOF)
    oRS.AddNew
        For j = 0 To oRS.Fields.Count - 1
        oRS.Fields(j) = oProdRS.Fields(j).Value
        Next j
    oRS.Update
    oProdRS.MoveNext
Loop
 
oProdRS.Close
Cn.Close
oRS.Close
oConn.Close
End Sub
Créé le 19 février 2008  par SilkyRoad

Lien : Lire et écrire dans les classeurs Excel fermés

La procédure écrit des informations dans un fichier texte (.txt) à chaque fois qu'un utilisateur ouvre ou ferme un classeur placé en réseau.

Now renvoie la date et l'heure système en cours.

Environ("UserName") permet de récupérer le nom de la personne qui a ouvert la session Windows.

La procédure utilise l'instruction Append pour écrire dans le fichier texte. Les données viennent s'inscrire à la suite des lignes existantes. Si le fichier txt n'existe pas, il sera créé automatiquement.

Placez ce code dans le module objet ThisWorkbook du classeur :

Vba
Sélectionnez
Option Explicit
 
'Définit l'emplacement et le nom du fichier .txt, ou va être enregistré les
'informations d'ouverture et de fermeture.
Private Const Chemin As String = "J:\dossier\journal.txt"
 
 
'Evenement ouverture du classeur
Private Sub Workbook_Open()
    Dim Cible As Integer
 
    Cible = FreeFile
 
    Open Chemin For Append As #Cible
        Print #Cible, Now & ";Ouverture;" & Environ("UserName")
    Close #Cible
End Sub
 
 
'Evenement déclenché avant la fermeture du classeur
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim Cible As Integer
 
    Cible = FreeFile
 
    Open Chemin For Append As #Cible
        Print #Cible, Now & ";Fermeture;" & Environ("UserName")
    Close #Cible
End Sub

Remarque :
Bien entendu, il ne se passera rien si l'utilisateur n'active pas les macros au moment de l'ouverture du classeur.

Créé le 19 février 2008  par SilkyRoad

Enregistrez ce classeur dans le dossier XLSTART (ou XLOuvrir).
Ce répertoire est généralement situé sous le chemin :
C:\Documents and Settings\nom_utilisateur\Application Data\Microsoft\Excel\XLSTART

Créé le 19 février 2008  par SilkyRoad

Vérifiez que le classeur Personal.xlsb n'est pas désactivé :
Cliquez sur le bouton Office.
Cliquez sur le bouton 'Options excel'.
Sélectionnez le menu 'Compléments'.
Sélectionnez l'option 'Éléments désactivés' dans le champ 'Gérer'.
Cliquez sur le bouton 'Atteindre'.
Sélectionnez 'Personnal.xlsb' s'il apparait dans la liste.
Cliquez sur le bouton 'Activer'.

Créé le 8 janvier 2008  par SilkyRoad

Cliquez sur le bouton Office.
Cliquez sur le bouton "Options Excel".
Sélectionnez le menu "Options avancées".
Dans la partie "Général", vous pouvez indiquer un autre répertoire de démarrage dans le champ "Au démarrage, ouvrir tous les fichiers du dossier".
Cliquez sur le bouton OK pour valider.

Ce dossier ne doit contenir que des fichiers Excel.

Si un classeur portant le même nom se trouve à la fois dans le dossier XLStart et le dossier de démarrage de remplacement, le fichier situé dans le dossier XLStart s'ouvre.

Créé le 18 novembre 2008  par Microsoft, SilkyRoad

En fonction des préférences système (dans l'explorateur de fichiers, menu Outils/Options des fichiers), on peut choisir de masquer ou non les extensions. Lorsque l'on a choisi de masquer les extensions, le fichier "MonClasseur.xls" est affiché comme "MonClasseur" dans l'explorateur de fichier, mais aussi dans la barre de titre de sa fenêtre quand il est ouvert.

Dans ce cas,

Vba
Sélectionnez
Workbooks("MonClasseur").Activate

est accepté.

Si on n'a pas choisi de masquer les extensions, cette syntaxe entraîne une erreur d'exécution 9 ("L'indice n'appartient pas à la sélection ?), et on doit utiliser:

Vba
Sélectionnez
Workbooks("MonClasseur.xls").Activate

Il est important de noter que :

Vba
Sélectionnez
Workbooks.Open "MonClasseur"

est accepté quel que soit l'option choisie.

Pour pallier ce genre de problème, vous pouvez utiliser cette routine dans vos développements :

Vba
Sélectionnez
Sub AppelAutoDocument(ByVal Doc As String, Optional MAJLiaisons, Optional ByVal Chemin, Optional Dep As Boolean)
    On Error Resume Next
    Workbooks(Doc).Activate
        If Err.Number = 0 Then
            ' Deprotection éventuelle
                If Not IsMissing(Dep) Then
                    If Dep Then Deprotege
                End If
            Exit Sub
        End If
    On Error GoTo Ouvre
    Workbooks(Doc & ".xls").Activate
        If Err.Number = 0 Then
            ' Deprotection éventuelle
                If Not IsMissing(Dep) Then
                    If Dep Then Deprotege
                End If
            Exit Sub
        End If
    On Error GoTo 0
    Exit Sub
Ouvre:
    ChDir ThisWorkbook.Path
    ' MAJ Doc si un nom de chemin a été fourni
        If Not IsMissing(Chemin) Then
            Doc = Chemin & Application.PathSeparator & Doc
        End If
    ' Prise en compte liaisons si info fournie
        If Not IsMissing(MAJLiaisons) Then
            Workbooks.Open Doc, MAJLiaisons
        Else
            Workbooks.Open Doc
        End If
    ' Deprotection éventuelle
        If Not IsMissing(Dep) Then
            If Dep Then Deprotege
        End If
    On Error GoTo 0
End Sub

Cette Sub permet d'activer un classeur s'il est déjà ouvert, ou de l'ouvrir sinon. En outre, elle gère le cas échéant (grâce à des arguments optionnels), la mise à jour des liaisons, le chemin d'accès et la dé-protection des feuilles du classeur.

Dans le cadre qui nous intéresse ici, la partie importante est celle-ci :

Vba
Sélectionnez
    On Error Resume Next
    Workbooks(Doc).Activate
        If Err.Number = 0 Then
            ' Deprotection éventuelle
            ' Cf la procédure complète ci-dessus
            Exit Sub
        End If
    On Error GoTo Ouvre
    Workbooks(Doc & ".xls").Activate
        If Err.Number = 0 Then
            ' Deprotection éventuelle
            ' Cf la procédure complète ci-dessus
            Exit Sub
        End If

Un gestionnaire d'erreur permet d'éviter un message intempestif.
Doc étant le nom de fichier fourni comme argument, on tente d'abord d'activer un classeur portant ce nom :

Vba
Sélectionnez
Workbooks(Doc).Activate

Si cela fonctionne, la propriété Number de l'objet Err reste à 0, et après une éventuelle dé-protection des feuilles du classeur, on sort de la procédure avec un Exit Sub.
Si cela ne fonctionne pas, on complète Doc en ajoutant ".xls", et on recommence. Cela permet d'activer le fichier, s'il est ouvert, que son extension ait été indiquée ou non, et qu'on ait opté ou non pour masquer les extensions.
Ce n'est que si les 2 tentatives précédentes ont échoué, qu'on en déduit que le classeur n'est pas encore ouvert, et qu'on l'ouvre.

NB
L'exemple précédent ne prend pas en compte l'extension des fichiers au format Excel 2007, "xlsx" et "xlsm".

Une seconde piste consiste simplement à affecter le classeur à une variable objet :

Vba
Sélectionnez
Dim wb as Workbook
    Workbooks("Document")
    Set wb = ActiveWorkbook
    ' ...

Par la suite, on peut utiliser

Vba
Sélectionnez
wb.Activate

ou

Vba
Sélectionnez
wb.Close

et cela devrait fonctionner indépendamment des infos fournies ou non pour l'extension.

Créé le 19 février 2008  par Michel Gaboly

Les sources externes connectées peuvent être :
     * une base de données Access
     * un fichier xml
     * un fichier txt
     * un autre classeur Excel
     * un fichier de connexion .odc
     * ... etc ...

Vba
Sélectionnez
Dim i As Integer
 
For i = 1 To ThisWorkbook.Connections.Count
    Debug.Print ThisWorkbook.Connections(i).Name
    Debug.Print ThisWorkbook.Connections(i).Description
    Debug.Print ThisWorkbook.Connections(i).ODBCConnection.CommandText
'    ThisWorkbook.Connections(i).Refresh
    Debug.Print "---"
Next i
Créé le 26 mai 2008  par SilkyRoad

Excel 2007 permet d'utiliser 1 048 576 lignes et 16 384 colonnes dans chaque feuille de calcul à condition d'être enregistré dans un des nouveaux formats openXML : xlsx (sans macros) ou xlsm (avec macros). Si vous ouvrez un classeur en mode compatibilité (.xls Excel97-2003) vous serez limité à 65 536 lignes et 256 colonnes.

Pour profiter de ces nouvelles limites (1 048 576 lignes et 16 384 colonnes) dans vos anciens classeurs, enregistrez une copie au format xlsx ou xlsm:
Cliquez sur le bouton Office
Menu "Enregistrer sous"
Sélectionnez le format "Classeur Excel" ou "Classeur Excel prenant en charge les macros" en fonction du contenu de votre fichier.

Attention :
Lorsqu'un classeur est ouvert en mode compatibilité (.xls Excel97-2003), un menu "Convertir" apparait sous le Bouton "Office". Cette option permet de transformer automatiquement vos fichiers .xls en type xlsx ou xlsm. Avant de lancer cette opération, il est important de savoir que le fichier original sera écrasé.

Créé le 20 septembre 2008  par SilkyRoad

Les formules de liaison fonctionnent pour lire le contenu des cellules d'un classeur placé sur le Web.
Ici, la fonction renvoie le contenu de la cellule A1

 
Sélectionnez
='http://monSite/Dossier/[leClasseur.xls]Feuil1'!$A1
Créé le 20 septembre 2008  par SilkyRoad

Cet exemple remplace l'icône Excel (image qui s'affiche dans l'angle supérieur gauche de la fenêtre) par un icône personnalisé, dès l'activation du classeur.
La procédure doit être placée dans le module ThisWorkbook du classeur.

Vba
Sélectionnez
Option Explicit
 
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
      (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 
Private Declare Function SendMessageA Lib "user32" _
      (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, _
      ByVal lParam As Long) As Long
 
Private Declare Function ExtractIconA Lib "shell32.dll" _
      (ByVal hInst As Long, ByVal lpszExeFileName As String, _
      ByVal nIconIndex As Long) As Long
 
Private Declare Function DestroyIcon Lib "user32.dll" (ByVal hIcon As Long) As Long
 
 
Private Sub Workbook_Activate()
    Dim Fichier As String
    Dim x As Long
 
    'Chemin et nom du fichier icône à afficher
    Fichier = "C:\DELL\DELLSUPPORT.ICO"
    'Vérifie si le fichier existe
    If Dir(Fichier) = "" Then Exit Sub
 
    x = ExtractIconA(0, Fichier, 0)
    SendMessageA FindWindow(vbNullString, Application.Caption), _
        &H80, False, x
 
    DestroyIcon SendMessageA(FindWindow(vbNullString, Application.Caption), _
        &H80, False, x)
 
End Sub
 
 
Private Sub Workbook_Deactivate()
    Dim Fichier As String
    Dim x As Long
 
    Fichier = Application.Path & "\excel.exe"
 
    x = ExtractIconA(0, Fichier, 0)
 
    SendMessageA FindWindow(vbNullString, Application.Caption), _
        &H80, False, x
 
    DestroyIcon SendMessageA(FindWindow(vbNullString, Application.Caption), _
        &H80, False, x)
 
End Sub
Créé le 20 septembre 2008  par SilkyRoad, Arkham46

Cet exemple ne supprime pas mais bloque l'utilisation de la croix.
Cela suppose que votre classeur dispose d'un bouton de fermeture en remplacement de la croix de fermeture.
Bien entendu ça ne fonctionne pas si l'utilisateur désactive les macros ...

La fermeture du classeur est bloqué tant que la variable boolFermeture est égale à False.

Dans le module ThisWorkbook du classeur :

Vba
Sélectionnez
Option Explicit
 
Private Sub Workbook_Open()
    boolFermeture = False
End Sub
 
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Empêche la fermeture du classeur tant
    'que la variable ne sera pas à True
    If boolFermeture = False Then Cancel = True
End Sub

Dans un module standard :

Vba
Sélectionnez
Option Explicit
 
Public boolFermeture As Boolean

Dans le module de feuille contenant un bouton nommé CommandButton1, qui autorise la fermeture du classeur :

Vba
Sélectionnez
Option Explicit
 
Private Sub CommandButton1_Click()
    'Fermeture du classeur en sauvegardant
    'les modifications.
    boolFermeture = True
    ThisWorkbook.Close True
End Sub
Créé le 18 novembre 2008  par SilkyRoad

Certaines fonctionnalités de Microsoft Excel ne sont plus disponibles lorsque vous utilisez un classeur partagé. Si toutefois vous en avez besoin, utilisez-les avant de partager le classeur ou retirez celui-ci de l'utilisation partagée.

Dans un classeur partagé, il est impossible de :

Cellules
* Fusionner des cellules, mais vous pouvez afficher des cellules fusionnées avant le partage du classeur.
* Insérer ou supprimer des blocs de cellules mais vous pouvez insérer ou supprimer des lignes et des colonnes entières.

Feuilles de calcul, boîtes de dialogue et menus
* Supprimer des feuilles de calcul.
* Modifier des boîtes de dialogue ou des menus.

Mises en forme conditionnelles et validation de données
* Définir ou appliquer des mises en forme conditionnelles, mais vous pouvez visualiser les effets des formats conditionnels appliqués avant le partage du classeur.
* Définir ou modifier les restrictions de validation de données ainsi que les messages, mais vous pouvez visualiser les conséquences des restrictions et des messages définis avant le partage du classeur.

Objets, graphiques, images et liens hypertexte
* Insérer ou modifier des graphiques, des images, des objets ou des liens hypertexte.
* Utiliser les outils de dessin.

Mots de passe
* Attribuer un mot de passe pour protéger des feuilles de calcul individuelles ou le classeur entier. La protection appliquée avant le partage du classeur reste effective après le partage.
* Modifier ou supprimer des mots de passe. Les mots de passe que vous affectez avant de partager le classeur demeurent en vigueur une fois que celui-ci est partagé.

Scénarios
* Enregistrer, afficher ou modifier des scénarios.

Plans, groupes et sous-totaux
* Grouper les données ou les structurer sous forme de plan.
* Insérer des sous-totaux automatiques.

Tables de données et tableaux croisés dynamiques
* Créer des tables de données.
* Créer des tableaux croisés dynamiques ou modifier leur présentation.

Macros
* Écrire, modifier, afficher, enregistrer ou affecter des macros.
* Toutefois, vous pouvez enregistrer dans une macro des opérations effectuées dans un classeur partagé ; enregistrez la macro dans un autre classeur non partagé.
* Dans un classeur partagé, vous pouvez exécuter des macros créées avant le partage du classeur ; cependant, si vous exécutez une macro incluant une opération non disponible, celle-ci interrompt la macro.

Créé le 18 novembre 2008  par Microsoft

Cette opération est très pratique lorsque vous avez besoin de passer rapidement d'un classeur à un autre ou pour comparer visuellement des données dans plusieurs fichiers.

Avant Excel 2007 :
Cliquez sur le menu "Fenêtre".
Sélectionnez l'option "Réorganiser".
Une boite de dialogue permet de sélectionner le type d'affichage :
* Mosaïque
* Horizontal
* Vertical
* Cascade

Excel 2007 :
Sélectionnez l'onglet "Affichage" dans le ruban.
Cliquez sur le bouton "Réorganiser tout" dans le groupe "Fenêtre".

Créé le 18 novembre 2008  par SilkyRoad

Cet exemple utilise la bibliothèque ADO pour extraire toutes les données d'une feuille spécifique, dans tous les classeurs fermés d'un répertoire. Les fichiers sources sont supposés avoir la même structure et contenir une feuille portant le même nom.
Les données sont importées à la suite dans la feuille active. La macro nécessite d'activer la référence Microsoft ActiveX Data Objects x.x Library.

Vba
Sélectionnez
'Nécessite d'activer la référence
    'Microsoft ActiveX Data Objects x.x Library
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim xConnect As String, Cible As String
Dim Fichier As String, Dossier As String, Feuille As String
Dim i As Long
 
'nom du répertoire contenant les classeurs à regrouper
Dossier = "C:\nom dossier"
'Nom de la feuille dans les classeurs fermés
'Ne pas oublier le symbole $ après le nom de la feuille
Feuille = "Feuil1$"
i = 2
 
Fichier = Dir(Dossier & "\*.xls")
'boucle sur les fichiers du repertoire
Do While Len(Fichier) > 0
    xConnect = "DRIVER={Microsoft Excel Driver (*.xls)};" & _
    "ReadOnly=1;DBQ=" & Dossier & "\" & Fichier
    'connection classeur
    Set Cn = New ADODB.Connection
    Cn.Open xConnect
 
    'Requete
    Cible = "SELECT * FROM [" & Feuille & "];"
 
    Set Rs = New ADODB.Recordset
    Rs.Open Cible, xConnect, adOpenStatic, adLockOptimistic, adCmdText
 
    'Ecriture dans la feuille de calcul
    If Not Rs.EOF Then Cells(i, 1).CopyFromRecordset Rs
    i = Cells(i, 1).End(xlDown).Row + 1
 
    Rs.Close
    Cn.Close
    Set Cn = Nothing
    Set Rs = Nothing
    Fichier = Dir()
Loop
 
MsgBox "Terminé"
Créé le 18 novembre 2008  par SilkyRoad

Lien : Lire et écrire dans les classeurs Excel fermés

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

Le classeur doit être préalablement sauvegardé.

Formule
Sélectionnez
=STXT(CELLULE("nomfichier");TROUVE("[";CELLULE("nomfichier"))+1;TROUVE("]";CELLULE("nomfichier"))-
TROUVE("[";CELLULE("nomfichier"))-1)
Créé le 19 février 2009  par SilkyRoad

Lorsque vous devez interrompre provisoirement un projet, vous pouvez être intéressé par la mémorisation des tailles de fenêtres et des paramètres d'affichage, pour un gain de temps lors de la reprise.

L'application dispose d'une option pour enregistrer, à n'importe quel moment, l'agencement de tous les classeurs ouverts dans la session :
Sélectionnez l'onglet 'Affichage' dans le ruban.
Cliquez sur le bouton 'Enregistrer l'espace de travail' dans le groupe 'Fenêtre'.
La fenêtre d'enregistrement propose le nom 'resume.xlw' par défaut.
Vous pouvez modifier ce nom si vous le souhaitez.
L'extension .xlw représente les fichiers d'environnement.
Cliquez sur le bouton 'Enregistrer' pour valider.

Ensuite, fermez tous vos classeurs Excel.
Pour réouvrir tous vos fichiers dans la même disposition qu'au moment de l'enregistrement de l'espace de travail, double cliquez sur le fichier .xlw depuis l'explorateur Windows ou utilisez le menu Office/Ouvrir.

Remarque :
Le fichier d'environnement ne pourra pas retrouver un classeur qui aura été déplacé ou renommé après avoir été mémorisé dans l'espace de travail.

Créé le 22 mars 2009  par SilkyRoad

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.