| auteur : Bidou |
Il y a deux méthodes. On peut restreindre le nombre de feuilles de calcul créées dans un nouveau classeur
Vba |
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 |
Application. Workbooks . Add xlWBATWorksheet
|
contient une feuille de calcul
Vba |
Application. Workbooks . Add xlWBATChart
|
Contient une feuille graphique
|
| auteur : 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 |
Application. Workbooks . Open " d:\tuto.xls "
|
On peut aussi passer par la méthode GetOpenFilename pour laisser l'utilisateur sélectionner le fichier
Vba |
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
|
| auteur : Bidou |
Dans ce cas on utilises des variables:
Vba |
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
|
| auteur : 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 |
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.
|
| auteur : Bidou |
On utilise la méthode FillAcrossSheet de l'objet WorkBook
Vba |
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.
|
| auteur : Bidou |
Dans le module ThisWorkbook on met
Vba |
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 |
Application. EnableEvents = False
ThisWorkbook. Close True
|
|
| auteur : SilkyRoad |
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.
|
| auteurs : Bidou, Etienne Bar, 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.
Après l'appel de OpenLinks plus de possibilité de savoir aisément quel classeur est désigné par ActiveWorkbook.
|
| auteur : 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.
|
| auteur : 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.
Nota:
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.
|
| auteur : SilkyRoad |
Vous pouvez utiliser les formules de liaison afin de lire dans un classeur fermé:
='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 Excel2007 (xlsx et xlsm), en utilisant le modèle ADO, appliquez la
chaîne de connexion suivante:
Vba |
Dim Cn As ADODB. Connection
Dim Fichier As String
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
|
|
| auteur : SilkyRoad |
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.
|
| auteur : SilkyRoad | Vba |
Sub OuvertureClasseur ()
Dim Fichier As String
Dim Wb As Workbook
Fichier = " C:\monClasseurBase.xls "
Application. EnableEvents = False
Set Wb = Workbooks. Open (Filename:= Fichier)
Application. EnableEvents = True
End Sub
|
|
| auteur : SilkyRoad | Vba |
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 |
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
|
|
| auteur : 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 65536ième ligne et de la 256ieme 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é.
Comment ouvrir et enregistrer des Excel 2007 dans des versions antérieures d'Office.
|
| auteur : 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 Excel2007, 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.
|
| auteur : 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:
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... ) .
|
| auteur : 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 |
Option Explicit
Public WithEvents XL As Excel. Application
Private Sub Workbook_Open ()
Set XL = Excel. Application
End Sub
Private Sub XL_WorkbookOpen (ByVal Wb As Workbook)
If Wb. Name < > ThisWorkbook. Name Then MsgBox Wb. Name
End Sub
|
|
| auteur : 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 Excel2007, cette fonction est accessible depuis l'onglet "Révision", groupe "Modifications".
|
| auteur : SilkyRoad | Vba |
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
|
|
| auteur : 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 |
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
Cn. Open " Provider=Microsoft.Jet.OLEDB.4.0; " & _
" Data Source= " & ThisWorkbook. Path & " \Classeur1_Fermé.xls; " & _
" Extended Properties= " " Excel 8.0;HDR=NO; " " "
oProdRS. Open " SELECT * FROM [Feuil1$] " , Cn, adOpenStatic
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; " " "
Set oRS = New ADODB. Recordset
oRS. Open " Select * from [Feuil1$] " , oConn, adOpenKeyset , adLockOptimistic
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
|
|
lien : Lire et écrire dans les classeurs Excel fermés
|
| auteur : SilkyRoad |
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 |
Option Explicit
Private Const Chemin As String = " J:\dossier\journal.txt "
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
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.
|
| auteur : 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
|
| auteur : Michel Gaboly |
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 |
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 |
Workbooks (" MonClasseur.xls " ). Activate
|
Il est important de noter que:
Vba |
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 |
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
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
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
If Not IsMissing (Chemin) Then
Doc = Chemin & Application. PathSeparator & Doc
End If
If Not IsMissing (MAJLiaisons) Then
Workbooks. Open Doc, MAJLiaisons
Else
Workbooks. Open Doc
End If
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 |
On Error Resume Next
Workbooks (Doc). Activate
If Err . Number = 0 Then
Exit Sub
End If
On Error GoTo Ouvre
Workbooks (Doc & " .xls " ). Activate
If Err . Number = 0 Then
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 :
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 Excel2007, "xlsx" et "xlsm".
Une seconde piste consiste simplement à affecter le classeur à une variable objet :
Vba |
Dim wb as Workbook
Workbooks (" Document " )
Set wb = ActiveWorkbook
|
Par la suite, on peut utiliser
ou
et cela devrait fonctionner indépendamment des infos fournies ou non pour l'extension.
|
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.
|