Les sujets abordés dans cette page Les mises en forme conditionnelles , Les Tableaux et graphiques Croisés Dynamiques , Gérer les fichiers XML depuis Excel , Piloter Open Office depuis Excel. |
Généralités Excel - page 1
Ce qui touche aux userforms - page 2
Piloter d'autres applications depuis Excel - page 3
Fonctions, événements, dates et calendriers - page 4
Formules, audits, répertoires et fichiers - page 5
Doublons, tris et filtres, variables, fichiers fermés, Access - page 6
Commentaires, gestion des erreurs, aide en ligne, recherches, tableaux, pages html, PC et système d'exploitation - page 7
Les objets dans le feuille, liens hypertextes, formats, Visual basic editor, chaines de caractères, modules de classe- page 8
Les Tableaux et graphiques Croisés Dynamiques, fichiers XML - page 9
Le Publipostage Word / Excel - page 10
Librairie Windows Image Acquisition Automation Library v2.0 - page 11
Ce qui touche aux userforms - page 2
Piloter d'autres applications depuis Excel - page 3
Fonctions, événements, dates et calendriers - page 4
Formules, audits, répertoires et fichiers - page 5
Doublons, tris et filtres, variables, fichiers fermés, Access - page 6
Commentaires, gestion des erreurs, aide en ligne, recherches, tableaux, pages html, PC et système d'exploitation - page 7
Les objets dans le feuille, liens hypertextes, formats, Visual basic editor, chaines de caractères, modules de classe- page 8
Les Tableaux et graphiques Croisés Dynamiques, fichiers XML - page 9
Le Publipostage Word / Excel - page 10
Librairie Windows Image Acquisition Automation Library v2.0 - page 11
Les mises en forme conditionnelles
La mise en forme conditionnelle (MEFC) permet d'appliquer une mise en forme ( ombrage de cellule , couleur de police...) automatiquement si une condition particulière est remplie.
Il est possible de définir le format de la cellule en fonction de la valeur de celle ci. La MEFC permet ainsi de mettre en évidence certaines données mais aussi de les masquer (en appliquant par exemple la meme couleur au texte et au fond de la cellule)
Vous pouvez accéder à cette fonction dans le Menu Format , Mise en forme conditionnelle .
- Un mémo sur la MEFC ( par Brigitte )
- Quelques informations générales
La mise en forme conditionnelle ne peut se référer à un autre classeur .La mise en forme conditionnelle peut se référer à une autre feuille (du meme classeur) en nommant les cellules qui seront utilisées dans la formule :Menu InsertionNomDéfinirIl n'est pas posssible d'appliquer une mise en forme conditionnelle en fonction d'un format de cellule .Il n'est pas possible de compter les cellules coloriées à l'aide d'une MFC. Une solution de substitution consiste à recréer une formule qui utilise les mêmes critères que la mise en forme conditionnelle .3 conditions maximum peuvent etre appliquées dans une mise en forme conditionnelle .Il est possible d'appliquer une mise en forme conditionnelle à une plage de cellules :Sélectionnez la plage sur laquelle vous souhaitez créer la mise en forme conditionnelle.Appliquez la MEFC pour la cellule supérieure gauche. Excel va automatiquement adapter la mise en forme pour les autres cellules de la plage .En fonction de votre projet, il est possible d'utiliser des références absolues , relatives ou mixtes dans les formules de MEFC : consultez la MichelXldPageCinq pour plus d'informations. - Rechercher les cellules dotées de mises en forme conditionnelles .
Pour rechercher toutes les cellules contenant des mises en forme conditionnelles , clique sur n'importe quelle cellule.Ensuite ,Menu EditionAtteindreClique sur le bouton CellulesSelectionne l'option Formats conditionnelsSelectionne l'option "Toutes" pour rechercher l'ensemble des cellules contenant des mises en forme conditionnellesRemarque : Selectionne l'option "Identiques" pour rechercher uniquement les cellules contenant des mises en forme conditionnelles identiques à ceux de la cellule selectionnéeClique sur OK - Colorier la valeur maximale d'une plage
=A1=MAX($A$1:$C$10) - Quelle MFC utiliser pour que #N/A n'apparaisse pas dans la cellule A1
=ESTNA(A1)et applique le format couleur de police identique au fond de la cellule . - Appliquer une mise en forme conditionnelle sur les cellules qui contiennent une erreur
=ESTERREUR(A1) - Appliquer une mise en forme conditionnelle si la cellule A1 est non vide
=NON(ESTVIDE(A1)) - Colorier une ligne complete si la cellule A1 = 10
Sélectionnes la ligne à colorierDans la mise en forme conditionnelle , inseres "la formule est " =$A$1=10Ensuite sélectionnes le motif à appliquer - Colorier les cellules en fonction d'une Date
Lien supprimé - Une MEFC qui indique la date du plus proche (une démo de Monique)
Lien supprimé - Appliquer une MEFC en fonction d'une date de début et une date de fin ( une démo de Gérard )
Lien supprimé - Identifier les doublons dans la colonne A
=NB.SI(A:A;A1)>1 - Appliquer une mise en forme conditionnelle par macro
Exemple pour colorier la cellule A1 si elle n'est non videWith Range("A1").formatConditions.Delete.formatConditions.Add Type:=xlExpression, Operator:=xlGreater, Formula1:="=NON(ESTVIDE(A1))".formatConditions(1).Interior.colorIndex = 3End WithL'argument xlExpression permet d'insérer une formule dans la MFC . Utilisez l'argument xlCellValue pour que la mise en forme conditionnelle soit basée sur la valeur d'une cellule .
Un Tableau Croisé Dynamique (TCD) est la présentation d'une source de données sous forme de tableau. Il est dynamique car toute modification de la source entraine la mise à jour du tableau ( l'actualisation des données) .Il permet de combiner et comparer rapidement un grand nombre de données .
Dans un rapport de tableau croisé dynamique, chaque colonne ou champ de données sources devient un champ de tableau croisé dynamique qui synthétise plusieurs lignes d'informations .La présentation du tableau peut être paramétrée en personnalisant la position des champs de données , en fonction des résultats à visualiser.
Cet outil permet d'effectuer des calculs (somme, nombre ,produit , max ,ecart type ... ) et d'analyser de facon Dynamique la source de données. Il est possible de faire pivoter les lignes et colonnes pour afficher différentes synthèses des données sources.
Le TCD est un outil statistique qui repose avant tout sur une base de données bien structurée .
- Généralités
Evitez de placer le TCD dans la feuille contenant la base de donnéesIl ne faut pas laisser de lignes ou colonnes vides entre les données de la base - Visualiser ou modifier la disposition des champs dans un TCD existant
Clic droit dans le TCDAssistantbouton Disposition - Renommer un champ ou un élément d'un tableau croisé dynamique
( Informations issues de l'aide en ligne Excel)Cliquez sur le champ ou l'élément que vous voulez renommer.Tapez un nouveau nom.Appuyez sur ENTRÉE.Remarques :Si vous masquez, puis réaffichez des niveaux dans des rapports de tableau croisé dynamique basés sur des données sources OLAP, tous les champs ou éléments renommés reprennent leur nom d'origine.Renommer un élément numérique le transforme en texte, qui est alors trié séparément des valeurs numériques et ne peut pas être groupé avec des éléments numériques - Réaliser un TCD à partir de données dans plusieurs feuilles ( une démo de Celeda)
Dans la première étape de l'assistant , cochez l'option "Plage de feuilles de calcul avec étiquettes."Lien supprimé - Consolidation de données issues de plusieurs feuilles (ou des plages distinctes sur une même feuille)
Objectif : visualiser le montant total d'un Chiffre d'affaire de trois années , par clientLes 3 feuilles Feuil1 (An1) ,Feuil2 (An2) , Feuil3 (An3) , doivent comporter les mêmes champs :Par exemple "Clients" et "CA"Dans le menu de création du TCD , Choisir "Plages de feuilles de calcul avec étiquettes"A l'étape 2, choisir le nombre de champ ou laisser en automatique .A l'étape 3, ajouter les plages dans leur totalitéLa boite de dialogue affiche quatre noms de champs :Le champ page1 regroupe toutes les pages des donnéesil apparaît Item 1, Item 2,.. ( possibilité de renommer les items et filtrer sur un des éléments )Le champ Ligne reporte toutes les valeurs du champ de sa propre ligneLe champ Colonne reporte toutes les valeurs du champ dans sa propre colonneLe champ Données reporte par défaut la somme de toutes les valeurs du champ que l'on veut afficher et pour du texte, compte le nombre de valeurs.Ligne correspond à ClientColonne correspond au CAPage1 correspond à AN1,AN2,An3Données correspond au total des trois feuilles - Regrouper des dates dans un TCD
Menu "Grouper et afficher détail"GrouperDéterminez la période et le type de regroupement dans la boite de dialogue (jour , mois , trimestre , année ...)Il est possible d'afficher le résultat par nombre de jours - Ne conserver que mois-année dans un TCD
Lien supprimé - Regrouper des dates et des montants triés par mois ( une démo de Celeda)
Lien supprimé - Grouper des dates malgré les vides
La principale source d'erreur dans le groupement de dates se trouve dans la colonne des dates comportant des vides.Une parade pour faire quand même ce regroupement consiste à insérer dans chaque cellule, une date bidon et unique qui permettra de décocher cette date pour obtenir l'affichage d'un résultat cohérent . - Les champs Calculés
Il s'agit d'un champ créé par l'utilisateur pour l'utilisation d'une formule à partir d'un autre champ .Sélectionne le TCDChoisis "Formules" dans la barre de menu TCDSélectionne "Champ calculé"Dans le champ "nom", saisie le nom que tu souhaites attribuer à ce nouveau champDans la rubrique "Formules", tu paramètres ta formule en sélectionnant les données disponibles dans la rubrique "Champs" et en utilisant le bouton "Insérer un champ"(Par exemple =colonne_x/colonne_total)Clique sur OK pour validerLe TCD va s'adapter automatiquement avec cette nouvelle donnée.Une démo de CeledaLien suppriméRemarque :Parfois il est plus simple d'ajouter une colonne supplémentaire dans la base de données et d'y déposer la formule adéquate. En effet, les champs calculés acceptent les opérateurs et des constantes mais n'acceptent pas de noms de cellules, de plages de cellules, de formules qui font appel à des matrices ou des fonctions. - Conserver une mise en forme personnalisée dans un graphique croisé dynamique, après la mise à jour des données
Excel ne permet pas de conserver les mises en forme personnalisées lors des réactualisations de donnéesIl est cependant , possible d'utiliser l'evenement "Private Sub Chart_Calculate()" pour forcer une mise en formeUn exemple pour que la 1ere série du graphique soit toujours de couleur rouge :Private Sub Chart_Calculate()activeChart.seriesCollection(1).Interior.colorIndex = 3End Sub - Masquer les sous totaux du champ "Noms" dans un TCD nommé "MonTCD"
Sub cacheSousTotal()activeSheet.pivotTables("monTCD").pivotFields("Noms").Subtotals(1) = FalseEnd Sub - Créer un TCD par macro
Les données sont dans la feuille "BD" et les étiquettes de colonne en A1.Le TCD est construit dans la cellule A1 de la Feuil1Sub CreerTCD()activeWorkbook.pivotTableWizard xlDatabase, ?[BD!A1].currentRegion _.Address(, , xlR1C1, True), "Feuil1!r1c1", "Mon tableau"End Sub - Détruire les anciennes étiquettes dans un TCD
Suite à des modifications des étiquettes dans la base de données, le TCD ne s'actualise pas et les étiquettes de colonne persistent dans les filtres des champs.Pour les supprimer , utilisez cette macro de Debra Dalgleish ,à placer dans un module de la feuilleSub deleteOldItemsWB()'gets rid of unused items in pivotTable'Debra Dalgleish - based on MSKB (202232)Dim ws As WorksheetDim pt As pivotTableDim pf As pivotFieldDim pi As pivotItemDim i As IntegerOn Error Resume NextFor Each ws In activeWorkbook.WorksheetsFor Each pt In ws.pivotTablespt.refreshTableFor Each pf In pt.pivotFieldsFor Each pi In pf.pivotItemsIf pi.recordCount = 0 And _Not pi.isCalculated Thenpi.DeleteEnd IfNextNextNextNextEnd SubEt un autre solution , à partir d'excel 2002 uniquement :Sub deleteMissingItems2002()'prevents unused items in XL 2002 pivotTableDim pt As pivotTableSet pt = activeSheet.pivotTables.Item(1)pt.pivotCache.missingItemsLimit = xlMissingItemsNoneEnd Sub - Les Filtres dans le TCD
Peut-on supprimer des lignes ou des colonnes dans un TCD ?Non, mais en se servant des filtres on décoche dans la liste déroulante les éléménts à ne pas afficher - Actualiser par macro tous les TCDs du classeur
Sub ActualiserTCD()Dim Tcd As pivotTableDim Feuille As WorksheetApplication.screenUpdating = FalseFor Each Feuille In WorksheetsFor Each Tcd In Feuille.pivotTablesTcd.refreshTableNextNextApplication.screenUpdating = TrueEnd Sub - Nommer une base de données ( Plage de cellules) dynamiquement
Menu InsertionNomDéfinirDans le champ "Noms dans le classeur" , nommez la plage de cellulesDans le champ "Fait référence à:" , indiquez la formule :Clic sur OK pour valider=DECALER($A$1;;;NBVAL($A$1:$A$2000);NBVAL($A$1:$X$1))IMPORTANT : Il doit impérativement y avoir des étiquettes dans toutes les colonnesCet exemple limite les colonnes jusqu'à X et les lignes jusqu'à 2000 .Pour utiliser la meme formule sans limite de lignes et de colonnes :=DECALER($A$1;;;NBVAL(Feuil2!$A:$A);NBVAL(Feuil2!$1:$1)) - Créer un TCD par macro, à partir d'une plage de cellules variable
- Ne pas afficher les zéro tout en conservant l'affichage de l'élement dans le TCD
Sélectionnez la plage des cellules à l'intérieur du TCD (dans colonne TOTAL)Clic droit sur le bouton du tableau croisé dynamiqueFormat de cellulePersonnaliséSaisissez le format 0,0;-0,0;"" - Afficher à la fois le total et le pourcentage dans un TCD
Lors de la création du TCD , à l'étape 3, il est possible d'ajouter une deuxième fois un champ dans la zone de données , et de le demander en pourcentageGlissez une 2eme fois le champ dans la zone "données" (CA dans l'exemple ci-dessous)Ensuite double cliquez sur le champ "Somme de CA2"Cliquez sur le bouton "Options" dans la boite de dialogue "Champ pivotTable"Dans le champ "Afficher les données:" , selectionnez "% du total"Il est aussi possible de changer le nom de ce champ à cette étapeCliquez sur OK pour valider - Extraire la totalité des informations concernant les éléments du TCD
En double cliquant sur le total d'un élément du TCD, on obtient dans un nouvel onglet la totalité des informations concernant cet élément - Les Tris dans un TCD
Pour définir un ordre d'affichage , il suffit de double cliquer sur l'entête d'un champDans la boîte de dialogue "Champ dynamique", cliquez sur le bouton "Avancé"Dans nouvelle boite de dialogue qui s'affiche ("Options avancées de champ dynamique") sélectionnez une des options de tri :Manuel , Croissant ou DécroissantEnsuite précisez si le tri du champ doit etre effectué par rapport à lui-même ou par rapport à un autre champ ( dans la liste déroulante "Sur le champ") - Afficher le Top 10 d'une colonne
Double cliquez sur l'entête d'un champDans la boîte de dialogue "Champ dynamique", cliquez sur le bouton "Avancé"Sélectionnez l'option de Top 10 dans la boite de dialogue "Options avancées de champ dynamique"(Voir la partie droite de l'image précédente) - Regrouper des éléments du TCD
Sélectionnez les lignes à grouper dans le tableau croisé dynamiqueClic droitChoisissez l'option "Grouper et afficher le détail"GrouperUne nouvelle colonne de regroupement est alors créée dans le TCD - Compter le nombre de lignes dans le TCD
Sub compterNombreLignesTCD()Dim Pvt As pivotTableSet Pvt = Worksheets("Feuil1").pivotTables("Tableau croisé dynamique1")'tableRange1: plage contenant l'intégralité du rapport de tableau croisé dynamique, à l'exclusion des champs de pagemsgBox Pvt.tableRange1.Rows.Count'tableRange2 : plage contenant l'intégralité du rapport de tableau croisé dynamique,y compris les champs de pagemsgBox Pvt.tableRange2.Rows.CountEnd Sub - Afficher la boite de dialogue de mise à jour du TCD et créer une copie du résultat dans une nouvelle feuille
Sub updatePivot()' John LacherApplication.screenUpdating = FalseWith Worksheets("TCD").pivotTables(1).tableRange2.SelectApplication.Dialogs(xlDialogPivotTableWizard).Show.pivotTables(1).tableRange2.SelectEnd WithWith Worksheets("Feuil1")Selection.Copy.Activate.Range("A4").pasteSpecial Paste:=xlValues.usedRange.autoFormat xlColor2End WithEnd Sub - Actualiser 2 TCD en meme temps ( des solutions proposées par Dan )
Vous pouvez créer le deuxième TCD à partir du premier - L'assistant propose cette option au début. Quand vous actualisez le premier, le deuxième s'actualisera également.Vous pouvez aussi utiliser cette macro ( dans cet exemple , les 2 TCD sont dans la meme feuille )with Activesheet.pivotTables("Tableau croisé dynamique1").refreshTable.pivotTables("Tableau croisé dynamique2").refreshTableEnd with - Boucler sur tous les TCD de la feuille active et afficher leur nom
Dim Pvt As pivotTableFor Each Pvt In activeSheet.pivotTablesmsgBox Pvt.NameNext - Mettre à jour un TCD dans une feuille protégée (un exemple proposé par Dan)
- Comment modifier des champs dans un TCD , sans refaire le TCD : une démo de Myta
Lien supprimé - Vérifier si un Graphique est issu d'un TCD ( renvoie Vrai ou Faux )
msgBox Sheets("Graph1").hasPivotFields - Vérifier si une cellule fait partie d'un TCD
Dim Pvt As pivotTableOn Error Resume NextSet Pvt = Range("E5").pivotTableIf Err.Number = 0 Then msgBox "La cellule fait partie du TCD : " & Pvt.Name - Réafficher tous les éléments du champ "Pays"
Dim x As IntegerWith Worksheets("Feuil4").pivotTables("Tableau croisé dynamique1")For x = 1 To .pivotFields("Pays").pivotItems.Count.pivotFields("Pays").pivotItems.Item(x).Visible = TrueNextEnd With - Appliquer la fonction Somme au champ "Clients" du premier TCD de la feuille active.
activeSheet.pivotTables(1).pivotFields("Nombre de Clients").Function = xlSumLes autres constantes disponibles pour la propriété Function :xlAverage - MoyennexlCountNums - NbxlMin - MinxlStDev - EcartypexlSum - SommexlVar - VarxlCount - NombrexlMax - MaxxlProduct - ProduitxlStDevP - EcartypepxlUnknown -xlVarP - Varp - Modifier la mise en forme des cellules contenant les résultats, dans le premier TCD de la feuille active.
With activeSheet.pivotTables(1).dataBodyRange.pivotField.numberFormat = "# ##0.00".Interior.colorIndex = 4End With - Déclencher les liens hypertextes contenus dans les champs d'un TCD .
Private Sub Worksheet_selectionChange(byVal Target As Range)Dim Pvt As pivotTableOn Error Resume NextSet Pvt = Target.pivotTableIf Err.Number = 0 And Target.Hyperlinks.Count = 1 Then Target.Hyperlinks(1).FollowEnd Sub - Masquer tous les champs dans le 1er TCD de la feuille active.
Dim Pvt As pivotTableDim Pvf As pivotFieldSet Pvt = activeSheet.pivotTables(1)For Each Pvf In Pvt.pivotFieldsPvf.Orientation = xlHiddenNext Pvf - Afficher le détail de tous les éléments d'un champ .
Dim Pvt As pivotItemFor Each Pvt In activeSheet.pivotTables(1).pivotFields("Cible").pivotItemsPvt.showDetail = TrueNext - Récupérer les éléments d'un champ
Dim Pvt As pivotItemFor Each Pvt In activeSheet.pivotTables(1).pivotFields("Client").pivotItemsDebug.Print Pvt.CaptionNext - Récupérer une valeur dans un TCD
Exemple : Afficher le total des revenus provenant des ventes de pommes en janvier (Champ de données = Revenu, Produit = Pommes, Mois = Janvier)msgbox activeSheet.pivotTables(1).getData("'Somme de Revenus' Pommes Janvier") - Afficher le résultat d'un TCD dans une listbox
Private Sub userForm_Initialize()Dim Cell As RangeDim Pvt As pivotTableDim Pvf As pivotFieldlistBox1.columnCount = 2listBox1.columnWidths = "70;40"Set Pvt = Sheets("Feuil4").pivotTables(1)Set Pvf = Pvt.pivotFields(1)For Each Cell In Pvf.dataRangelistBox1.addItem CelllistBox1.List(listBox1.listCount - 1, 1) = _Sheets("Feuil4").pivotTables(1).getData("'" & Pvt.dataFields(1).Name & "' " & Pvf.Name & " " & Cell)Next CellEnd Sub - Utiliser la fonction LIREDONNEESTABCROISDYNAMIQUE :Une démo de Dan
Lien supprimé - TCD_EXTRACTOR : Extraire les résultats d'un TCD
Cet exemple permet d'extraire le résultat d'un champ spécifique dans un tableau croisé dynamique .Un userForm liste les TCD contenus dans tous les classeurs ouvertsTous les paramètres du TCD sélectionné sont listés dans la boite de dialogue . L'utilisateur paramètre ses données puis lance la requète Afin de visualiser le résultat .Option pour les utilisateurs de macros :La procédure "Fabrique" un exemple de macro correspondant à la requete effectuée .Il ne reste plus qu'a faire un copier/coller du Textbox vers un module du classeur contenant le TCD cible .Une option permet de créer un module dans le classeur contenant le TCD , puis d'y ajouter la macro "Fabriquée"Option pour les utilisateurs de formules :La procédure "Fabrique" un exemple de fonction LIREDONNEESTABCROISDYNAMIQUE(tableau_croisé_dyn;nom) correspondant à la requete effectuée .Il ne reste plus qu'a faire un copier/coller du Textbox vers la feuille contenant le TCD .Lien suppriméLien supprimé - Trier les données d'un champ par ordre croissant
Clic droit sur le champOption "Paramètres de Champ"Bouton "Avancé"Sélectionne l'option "Croissant" dans la zone "Tri automatique"Clique sur OK pour valider (pour les 2 boites de dialogue) - Modifier la source d'un TCD
Dim objCellule As RangeDim Pvt As pivotTableSet objCellule = thisWorkbook.Sheets("Feuil1").Range("A1:B20")Set Pvt = Sheets("Feuil4").pivotTables("Tableau croisé dynamique1")Pvt.pivotTableWizard sourceType:=xlDatabase, _sourceData:=objCellule.Address(, , xlR1C1, True)
Les fichiers XML (Extensible Markup Language) servent à stocker des données .Celles si sont écrites entre balises ou sous forme d'attributs. L'ensemble est rédigé sous forme d'arborescence.
XML permet de stocker tous types d'informations et surtout de séparer les données et leur présentation .
XML permet un échange entre des systèmes informatiques ,et un transfert des données ( le fond ) et de leurs structures( la forme)
Ainsi, une balise destinée à accueillir une date sera définie comme telle dans le schéma et par la suite sera en mesure de délivrer sa valeur à un programme sans soucis de conversion d'une chaîne de caractères en date.
XML est un dérivé du HTML. Le HTML est le langage de balisage des pages Web. Il décrit seulement l’apparence du contenu :Le HTML ne peut pas identifier que ces données désignent par exemple un titre ou une date..., contrairement au XML dont les balises se rapportent à la signification et à la structure.
- Comment utiliser un fichier XML au sein d'Excel 2003
- Créer un fichier XML
Remarque : si un fichier XML portant le meme nom existe dans le répertoire , celui-ci sera écraséSub creerFichierXML()'Source : http://www.c2i.fr/code.asp?IDCode=21Dim objDOM As DOMDocumentDim XNodeRoot As IXMLDOMElement, Xnode As IXMLDOMElementDim oPi As IXMLDOMProcessingInstructionSet objDOM = New DOMDocumentobjDOM.resolveExternals = TrueSet oPi = objDOM.createProcessingInstruction("xml", "version='1.0' encoding='ISO-8859-1'")Set oPi = objDOM.insertBefore(oPi, objDOM.childNodes.Item(0))Set XNodeRoot = objDOM.createElement("noeudRacine")objDOM.appendChild XNodeRootSet Xnode = objDOM.createElement("Balise1")Xnode.setAttribute "At1", "Attribut1"Xnode.Text = "la Texte 1"XNodeRoot.appendChild XnodeSet Xnode = objDOM.createElement("Balise1")Xnode.setAttribute "At2", "Attribut2"Xnode.Text = "Le texte 2"XNodeRoot.appendChild XnodeSet Xnode = objDOM.createElement("Balise1")Xnode.setAttribute "At3", "Attribut3"Xnode.Text = "Le texte 3"XNodeRoot.appendChild XnodeobjDOM.Save thisWorkbook.Path & "\leFichier.xml"Set XNodeRoot = NothingSet Xnode = NothingSet objDOM = NothingEnd Sub - Insérer un commentaire dans un fichier XML
Dim Cmt As IXMLDOMCommentSet Cmt = objDOM.createComment("mon commentaire")Set Cmt = objDOM.insertBefore(Cmt, objDOM.childNodes.Item(0)) - Ajouter un élément dans le fichier XML
Sub ajouterElementFichierXML()Dim objElem As IXMLDOMElementDim xmlDoc As DOMDocumentSet xmlDoc = New DOMDocumentxmlDoc.async = FalsexmlDoc.Load (thisWorkbook.Path & "\leDocument.xml")Set objElem = xmlDoc.createElement("Balise1")objElem.setAttribute "At4", "Attribut4"objElem.Text = "le Texte 4"xmlDoc.documentElement.appendChild objElemxmlDoc.Save thisWorkbook.Path & "\leDocument.xml"End Sub - Attendre que le document soit totalement chargé en mémoire avant de travailler dessus
xmlDoc.async = False - Lire le contenu d'un fichier XML
Option ExplicitDim j As LongSub Test()Dim xmlDoc As DOMDocumentDim root As IXMLDOMElementSet xmlDoc = New DOMDocumentxmlDoc.async = FalsexmlDoc.Load thisWorkbook.Path & "\leFichier.xml"Set root = xmlDoc.documentElementCells(1, 1) = root.baseNamej = 1browseChildNodes rootj = 0End SubPrivate Sub browseChildNodes(root_node As IXMLDOMNode)'Source : http://vb.developpez.com/faq/?page=RoutinesDim i As LongFor i = 0 To root_node.childNodes.Length - 1If root_node.childNodes.Item(i).nodeType <> 3 Thenj = j + 1Cells(j, 1) = root_node.childNodes.Item(i).baseName & "/" & root_node.childNodes.Item(i).TextEnd IfbrowseChildNodes root_node.childNodes(i)NextEnd Sub - Modifier un fichier XML par macro
Sub modifierFichierXML()Dim xmlDoc As DOMDocumentDim Rt As IXMLDOMElementSet xmlDoc = New DOMDocumentxmlDoc.async = FalsexmlDoc.Load thisWorkbook.Path & "\leDocument.xml"Set Rt = xmlDoc.documentElementparseNodes RtxmlDoc.Save thisWorkbook.Path & "\leDocument.xml"End SubPrivate Sub parseNodes(Rt_node As IXMLDOMNode)Dim i As LongFor i = 0 To Rt_node.childNodes.Length - 1If Rt_node.childNodes.Item(i).Text = "Le texte 2" Then _Rt_node.childNodes.Item(i).Text = "la nouvelle donnée"parseNodes Rt_node.childNodes(i)NextEnd Sub - Remplacer un nœud dans un fichier XML .
Sub remplacerNoeud()Dim xmlDoc As New DOMDocumentDim nodeRoot As IXMLDOMNode, Ancien As IXMLDOMNode, Nouveau As IXMLDOMNodeDim nodeTemp As IXMLDOMNode, Anciens As IXMLDOMNodeListDim i As IntegerxmlDoc.async = FalseWith xmlDoc.Load "C:\monFichier.xml"Set nodeRoot = .documentElementSet Anciens = nodeRoot.selectNodes("//noeud_Actuel") 'remplacement du noeud nommé "noeud_Actuel"For Each Ancien In AnciensSet Nouveau = .createElement("mise_A_Jour") 'le noeud de remplacement sera nommé "mise_A_Jour"For Each nodeTemp In Ancien.Attributes 'Copie des attributsNouveau.Attributes.setNamedItem (nodeTemp.cloneNode(True))NextFor Each nodeTemp In Ancien.childNodes 'Copie des attributs et mise à jour donnéesi = i + 1nodeTemp.Text = "nouvelle donnée " & iNouveau.appendChild nodeTempNextAncien.parentNode.replaceChild Nouveau, AncienNext.Save "C:\monFichier.xml"End WithEnd Sub - Suivre les statuts de chargement et d'analyse d'un fichier XML : une démo de Gizmo
Lien supprimé - Exporter une table Access au format XML
Sub exportTableAccess_XML()Dim Cn As ADODB.ConnectionDim Rs As ADODB.RecordsetDim Fichier As StringFichier = "C:\Documents and Settings\michel\dossier\general\excel\dataBase.mdb"Set Cn = New ADODB.ConnectionCn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _Fichier & ";"Set Rs = New ADODB.RecordsetWith Rs.activeConnection = Cn.Open "SELECT * FROM Table1", , adOpenStatic, adLockOptimistic, adCmdTextEnd WithRs.Save "C:\exportTableTemporaire.xml", adPersistXML'autre possibilité'Rs.Save "C:\tableTemporaire.xls", adPersistXMLCn.CloseEnd Sub - Réimporter le fichier XML dans la table Access
Sub reimportXML_versBaseAccess()Dim Rst As ADODB.RecordsetDim Cn As ADODB.ConnectionDim Fichier As StringFichier = "C:\Documents and Settings\michel\dossier\general\excel\dataBase.mdb"Set Rst = New ADODB.RecordsetRst.Open "C:\tableTemporaire.xml", , adOpenStatic, adLockBatchOptimistic, adCmdFile'Rst.Open "C:\tableTemporaire.xls", , adOpenStatic, adLockBatchOptimistic, adCmdFileSet Cn = New ADODB.ConnectionWith Cn.Provider = "Microsoft.JET.OLEDB.4.0".Open FichierEnd WithSet Rst.activeConnection = CnRst.updateBatchRst.CloseEnd Sub - Les recommandations pour l'utilisation du langage XML
- Gérer les erreurs liées à la manipulation des fichiers XML
Cet exemple affiche un message lorsque le fichier XML ne peut pas etre chargéSub gestionnaireErreurs_MSXML()Dim xmlDoc As MSXML2.DOMDocumentDim parseErr As MSXML2.IXMLDOMParseErrorDim messageErreur As StringSet xmlDoc = New DOMDocumentxmlDoc.async = FalsexmlDoc.Load thisWorkbook.Path & "\test.xml"Set parseErr = xmlDoc.parseErrorWith parseErrmessageErreur = "Le fichier " & .URL & " ne peut pas etre chargé " & _vbCrLf & .reason & "Code erreur : " & Hex(.errorCode)End WithmsgBox messageErreurEnd Sub - Boucler sur les différents attributs(nom, type, date, taille) d'un fichier XML
Le format du fichier XML à parcourir :
<FICHIERS><FICHIER nom="fichier.bmp" type="bmp" date="05/12/05 11:12" taille="12457" /><FICHIER nom="test124.txt" type="txt" date="15/02/06 19:42" taille="454" /><FICHIER nom="nouveau.ico" type="ico" date="14/01/06 00:54" taille="74714" /><FICHIER nom="presentation.swf" type="swf" date="27/09/05 17:18" taille="5467207" /></FICHIERS>Sub bouclerSurAttributs_V01()Dim xmlDoc As DOMDocumentDim xmlElem As IXMLDOMElementSet xmlDoc = New DOMDocumentxmlDoc.async = FalsexmlDoc.Load "C:\Documents and Settings\michel\dossier\general\excel\leFichier.xml"For Each xmlElem In xmlDoc.getElementsByTagName("FICHIER")msgBox xmlElem.getAttribute("nom")msgBox xmlElem.getAttribute("type")'msgBox xmlElem.getAttribute("date")'msgBox xmlElem.getAttribute("taille")NextEnd SubUne autre possibilitéSub bouclerSurAttributs_V02()Dim xmlDoc As DOMDocumentDim i As IntegerSet xmlDoc = New DOMDocumentxmlDoc.async = FalsexmlDoc.Load "C:\Documents and Settings\michel\dossier\general\excel\leFichier.xml"For i = 0 To xmlDoc.getElementsByTagName("FICHIER").Length - 1msgBox xmlDoc.getElementsByTagName("FICHIER").Item(i).Attributes.getNamedItem("nom").Text & " / " & _xmlDoc.getElementsByTagName("FICHIER").Item(i).Attributes.getNamedItem("taille").TextNext iEnd Sub - Extraire les données d'un fichier XML en appliquant un tri croissant sur un des attributs
Voir le message du 15/02/2006 14:25:36 - Créer un fichier XML à partir d'un tableau Excel (La plage de cellules A1:F20)
Option ExplicitOption Base 1Sub tableauExcel_XML_V01()Dim xmlDoc As MSXML2.DOMDocumentDim xmLstring As String, Fichier As String, strQuote As StringDim Lig As Integer, Col As IntegerDim Attribut As VariantstrQuote = """"Set xmlDoc = createObject("Microsoft.XMLDOM")xmLstring = "<?xml version=""1.0"" encoding=""ISO-8859-1"" ?> "xmLstring = xmLstring & "<FORM Name=" & strQuote _& "Test Tableau Excel vers xml" & strQuote & "> "Attribut = Array("Id", "Nom", "Date", "Type", "Url", "Adresse")For Lig = 1 To 20 ' le tableau Excel contient 20 lignes (1 à 20)xmLstring = xmLstring & "<CATEGORIE "For Col = 1 To 6 'le Tableau Excel contient 6 colonnes (A à F)xmLstring = xmLstring & Attribut(Col) & "=" & strQuote & Cells(Lig, Col) & strQuote & " "NextxmLstring = xmLstring & "></CATEGORIE>"Next LigxmLstring = xmLstring & "</FORM>"xmlDoc.loadXML xmLstring 'charger le fichier pour pouvoir l'enregistrerFichier = "C:\testExcel_XML.xml"xmlDoc.Save (Fichier) 'Sauvegarder le fichier xmlEnd Sub - Afficher le contenu d'un fichier XML dans la fenêtre d'éxécution VBE :
Sub contenuFichierXML_dansFenetreExecution()Dim xmlDoc As MSXML2.DOMDocumentDim XMLRoot As ObjectSet xmlDoc = New DOMDocumentxmlDoc.async = FalsexmlDoc.Load thisWorkbook.Path & "\base xml\monFichier.xml"Set XMLRoot = xmlDoc.documentElementDebug.Print XMLRoot.XMLSet XMLRoot = NothingEnd Sub - Afficher le contenu d'un fichier XML dans un Treeview
Option ExplicitDim oDoc As MSXML2.DOMDocumentPrivate Sub commandButton1_Click()'La source :'http://www.vbcode.com/Asp/showzip.asp?ZipFile=http://www.vbcode.com%2Fcode%2FDOMTree.zip&theID=2683'Auteur : Bnaya EshetSet oDoc = New DOMDocumentoDoc.async = FalseoDoc.Load "C:\Documents and Settings\michel\dossier\general\excel\gerer fichiers XML\base xml\leDocument.xml"treeView1.Nodes.ClearaddNode oDoc.documentElementEnd SubPrivate Function addNode(byRef oElem As MSXML2.IXMLDOMNode, _Optional byRef oTreeNode As MSComctlLib.Node)Dim oNewNode As MSComctlLib.NodeDim oNodeList As MSXML2.IXMLDOMNodeListDim i As LongIf oTreeNode Is Nothing ThenSet oNewNode = treeView1.Nodes.Add 'Creation du noeud racineoNewNode.Expanded = TrueElseSet oNewNode = treeView1.Nodes.Add(oTreeNode, tvwChild) 'Ajout d'un noeud enfantoNewNode.Expanded = TrueEnd IfSelect Case oElem.nodeTypeCase MSXML2.NODE_ELEMENT 'type ElementoNewNode.Text = oElem.nodeName & " (" & getAttributes(oElem) & ")"Set oNewNode.Tag = oElemCase MSXML2.NODE_TEXToNewNode.Text = "Text: " & oElem.nodeValueSet oNewNode.Tag = oElemCase MSXML2.NODE_CDATA_SECTIONoNewNode.Text = "CDATA: " & oElem.nodeValueSet oNewNode.Tag = oElemCase ElseoNewNode.Text = oElem.nodeType & ": " & oElem.nodeNameSet oNewNode.Tag = oElemEnd SelectSet oNodeList = oElem.childNodes 'boucle récursive pour ajouter tous les noeuds enfantsFor i = 0 To oNodeList.Length - 1addNode oNodeList.Item(i), oNewNodeNext iEnd FunctionPrivate Function getAttributes(byRef oElm As MSXML2.IXMLDOMNode) As StringDim sAttr As StringDim i As LongsAttr = ""For i = 0 To oElm.Attributes.Length - 1 'boucle sur tous les attributssAttr = sAttr & oElm.Attributes.Item(i).nodeName & "='" & oElm.Attributes.Item(i).nodeValue & "' "Next igetAttributes = sAttrEnd Function - Supprimer le noeud nommé "status" dans un fichier xml
Sub supprimerNoeudConditionnel()Dim xmlDoc As DOMDocumentDim Nd As IXMLDOMNodeSet xmlDoc = New DOMDocumentxmlDoc.async = FalsexmlDoc.Load thisWorkbook.Path & "\base xml\monFichier.xml"For Each Nd In xmlDoc.documentElement.childNodes'Debug.Print Nd.baseNameIf Nd.baseName = "status" Then xmlDoc.documentElement.removeChild NdNext NdxmlDoc.Save thisWorkbook.Path & "\base xml\monFichier.xml"End Sub - Sauvegarder une feuille Excel au format XML
Feuil1.saveAs Filename:="C:\maSauvegarde.xml", fileFormat:=xlXMLSpreadsheet - Utiliser un fichier XML pour sauvegarder (et recharger) les paramètres d'objets créés dynamiquement dans un Userform
Cet exemple permet :D'ajouter et manipuler plusieurs Labels dynamiquement dans un FrameSauvegarder les parametres des labels dans un fichier XML , afin de pouvoir y revenir plus tard sans perdre la mise en forme (Nom , Position , Dimension , Texte, Couleur de texte, Taille des caracteres) .Le fichier xml est enregistré dans le meme répertoire que ce classeur .Charger dans l'USF les parametres contenus dans le fichier xml .Lien supprimé
Ce lien n'existe plus
- Piloter un publipostage Writer depuis Excel
Ce lien n'existe plus - Récupérer les macros dans un classeur corrompu
Toutes vos idees sont les bienvenues .

Dernière modification par un modérateur: