PILOTER D'AUTRES APPLICATIONS DEPUIS EXCEL Piloter Word, Outlook, Power Point Les fichiers texte |
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 autres applications- Trois méthodes pour ouvrir des applications depuis Excel
Sub lancerPPT()Dim CibleCible = Shell("POWERPNT.EXE ""C:\Mes documents\flux prod maint compta.ppt""", 1)End SubSub openWordV02()thisWorkbook.followHyperlink "C:\Documents and Settings\michel\dossier\general\excel\test.doc"End SubSub ouvertureAppli04()Dim Obj As ObjectSet Obj = createObject("WScript.Shell")Obj.Run "calc.exe ", 1, True'exemple calculatriceEnd SubD'autres exemples - Afficher une image avec " l'apercu des images et des telecopies Windows "
- Fermer une application , Exemple notePad
Sub fermerUneApplication()'testé avec Excel2002 et WinXPDim objProcess As Object, colProcessList As Object, objWMIService As ObjectDim strComputer As StringstrComputer = "."Set objWMIService = getObject("winmgmts:" _& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")Set colProcessList = objWMIService.execQuery _("Select * from Win32_Process Where Name = 'Notepad.exe'")For Each objProcess In colProcessListobjProcess.TerminateNextEnd Sub - Lire un texte ( utilisation de la librairie Microsoft Speech)
Il est aussi possible de modifier le ton lors de la diction :en ajoutant à la suite du texte : un espace et 2 points d'exclamations " !!"en ajoutant à la suite du texte : un espace et 2 points d'interrogation " ??" - Lister le nom des fichiers contenus dans un Zip
- Comment activer une librairie / bibliotheque pour piloter une autre application depuis Excel
Dans l'éditeur de macros (ALT+F11) :Menu OutilsReferencesCochez la ligne qui correspond à l'application que vous souhaitez piloterCliquez sur OK pour ValiderQuelques exemples de librairies disponibles ( en fonction des applications installées sur le poste ) :Microsoft Word 10.0 Object LibraryMicrosoft ActiveX Data Object 2.x Library ( ADO)Windows Media PlayerShockwave FlashMicrosoft Outlook 10.0 Object Library…etc…
Un exemple pour déclarer une variable en utilisant la bibliotheque WordDim wordApp As Word.ApplicationRemarque : L'outil de saisie semi automatique permet d'afficher la bibliotheque Word sans avoir besoin de saisir le nom completDe la meme maniére, toutes les méthodes et propriétés de la librairie sont accessibles grace à l'outil de saisie semi automatique
Remarque :Vous n'avez pas besoin de réactiver la référence si vous utilisez le classeur sur un autre poste de travailQuand plusieurs versions d'une librairie sont disponibles (exemple AD0 2.0 , 2.1, 2.5 ...) et que vous devez utiliser le classeur sur plusieurs Postes possédant des configurations différentes , sélectionnez la version la plus ancienne commune pour assurer une compatibilité. - Les problemes de comptabilité entre Office 97 et Windows XP
Les chapitres suivants présentent des exemples pour piloter d'autres applications depuis Excel .Malgré la puissance de ces méthodes , la configuration WindowsXP / Office 97 peut provoquer des erreurs lors de la création d'objets .Le message qui s'affiche est Erreur d'éxecution -2147417851 (80010105)Dans ce cas une solution consiste à remplacer les déclarations de variables de type ,Dim wordApp As Word.ApplicationDim wordDoc As Word.Document
par ,Dim wordApp As ObjectDim wordDoc As Object
- Ouvrir un document Word existant à partir d'Excel
Sub ouvrirDocWordExistant()'necesite d'activer la reference Microsoft Word xx.x Object LibraryDim appWrd As Word.ApplicationDim docWord As Word.DocumentSet appWrd = createObject("Word.Application")appWrd.Visible = TrueSet docWord = appWrd.Documents. _Open("C:\mes documents\XLD.doc", readOnly:=True)End Sub - Créer un nouveau document Word à partir d'Excel
Sub ouvrirNouveauDocWord()'necesite d'activer la reference Microsoft Word xx.x Object LibraryDim appWrd As Word.ApplicationDim docWrd As Word.DocumentSet appWrd = createObject("Word.Application")appWrd.Visible = TrueSet docWrd = appWrd.Documents.AdddocWrd.saveAs "C:\monDocument.doc"End Sub - Transférer plusieurs tableaux Excel Vers Word , en précisant le nombre de tableaux par page
- Transferer plusieurs tableaux Excel vers Word puis les redimensionner
- Exporter un tableau Excel filtré vers Word
- Compter le nombre de pages d'un document Word
Sub compterNombrePagesDocWord()Dim wrdApp As Object, wrdDoc As ObjectDim nbPage As ByteDim Ouvrir As StringOuvrir = Application.getOpenFilename("Fichiers Word (*.doc), *.doc")Set wrdApp = createObject("Word.Application")Set wrdDoc = wrdApp.Documents.Open(Ouvrir)wrdDoc.Bookmarks("\endofdoc").SelectWith wrdDocnbPage = .builtinDocumentProperties("Number of Pages")msgBox "Il y a " & nbPage & " page(s) dans le document Word : " & Chr(10) & Ouvrir.CloseEnd WithwrdApp.QuitSet wrdDoc = NothingSet wrdApp = NothingEnd Sub - Importer la totalité d'un document Word dans une feuille Excel
Un autre exempleSub importerWordVersExcel()'necessite d'activer la reference microsoft word 10.0 Object LibraryDim docWord As Word.DocumentDim appWord As Word.ApplicationDim Wb As WorkbookSet Wb = Workbooks.Add(1)Set appWord = New Word.ApplicationappWord.Visible = FalseSet docWord = _appWord.Documents.Open("C:\monDocument.doc", readOnly:=True)With appWord.Selection.wholeStory.Selection.CopyEnd WithWb.activeSheet.Range("A1").SelectWb.activeSheet.PasteappWord.Application.Quitapplication.cutCopyMode = FalseWb.saveAs "C:\copieDocument.xls"End Sub - Importer un tableau Word dans une feuille Excel
- Exporter une tableau Excel dans Word en appliquant un retrait de mise en page
- Chercher un mot dans tous les documents Word d'un répertoire
- Lister les propriétés d'un document Word
- Insérer , redimensionner et positionner une image dans un document Word existant
- Coller dans Word une selection de cellules , au format image Bitmap
- Modifier les marges dans un document Word
- Remplacer un mot dans un fichier Word
- Controler si l'application Word est ouverte et la fermer si la réponse est oui ,un deuxieme exemple vérifie si un document spécifique Word est ouvert , et le ferme sans action sur l'application
- Modifier l'entete ou le pied de page d'un document Word depuis Excel
Sub enteteEtPiedDePageWord()'necessite d'activer la reference microsoft Word xx.x Object LibraryDim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim Fichier As StringFichier = "C:\Documents and Settings\michel\Doc2.doc" 'adapter le cheminSet wordApp = createObject("Word.Application")wordApp.Visible = TrueSet wordDoc = wordApp.Documents.Open(Fichier)With wordDoc.Sections(1).Headers(wdHeaderFooterPrimary).Range.Text = "Le titre".Headers(wdHeaderFooterPrimary).Range.Paragraphs.Alignment = wdAlignParagraphCenter.Footers(wdHeaderFooterPrimary).pageNumbers.AddEnd WithEnd Sub - Accepter toutes les révisions dans le document Word , sauf les suppressions
For i = 1 To wordDoc.Revisions.CountIf wordDoc.Revisions(i).Type <> wdRevisionDelete Then wordDoc.Revisions(i).AcceptNext - Ajouter une colonne dans le tableau d'un document Word
- Regrouper tous les documents Word d'un répertoire , dans un fichier unique
Un autre exemple qui permet de compiler les documents d'un repertoire de façon sélective - Boucler sur les graphiques d'un classeur et les coller à l'emplacement de signets , dans un document Word
- Insérer une image dans la 3eme cellule de la 2eme colonne , d'un tableau word
Sub insereImageDansCelluleTableauWord()'nécéssite d'activer la référence Microsoft Word xx.x Object LibraryDim wordApp As Word.ApplicationDim wordDoc As Word.DocumentSet wordApp = createObject("word.application") 'ouvrir une session WordSet wordDoc = wordApp.Documents.Open(thisWorkbook.Path & "\leFichier.doc") 'ouvrir un document'insérer une image dans la 3eme Cellule de la 2eme colonne (dans le'1er tableau d'un document Word )wordDoc.Tables(1).Columns(2).Cells(3).Range.inlineShapes.addPicture Filename:= _C:\program files\microsoft office\media\cagcat10\j0149481.wmf, _linkToFile:=False, saveWithDocument:=TrueWith wordDoc.inlineShapes(wordDoc.inlineShapes.Count).Height = 150 'redimensionne hauteur image.Width = 150 'redimensionne largeur imageEnd WithwordApp.Visible = True 'affichier le document WordEnd Sub - Imprimer un document Word
- Fusionner des cellules dans un tableau Word
Sub fusionnerCellsDansTableauWord()'activate Microsoft Word xx.x Object LibraryDim wordApp As Word.ApplicationDim wordDoc As Word.DocumentSet wordApp = createObject("word.application") 'Word SessionSet wordDoc = wordApp.Documents.Open("C:\monDocument.doc") 'ouverture DocwordApp.Visible = True'fusionner les Cells(2,3) à Cells(3,5) dans le premier tableau du document WordwordDoc.Tables(1).Cell(Row:=2, Column:=3).Merge _mergeTo:=wordDoc.Tables(1).Cell(Row:=3, Column:=5)End Sub - Importer les données provenant de plusieurs tableaux Word
Sub importValuesFromWordTables()'Activer reference Microsoft Word xx.x Object LibraryDim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim i As Byte, j As ByteSet wordApp = createObject("word.application")wordApp.Visible = FalseSet wordDoc = wordApp.Documents.Open(thisWorkbook.Path & "\monFichier.doc")'dans 3 tables Word du document , importer 5 valeurs de la premiere colonne'importer les données de chaque table dans une feuille différenteFor i = 1 To 3For j = 1 To 5activeWorkbook.Sheets(i).Cells(j, 1) = wordDoc.Tables(i).Columns(1).Cells(j)Next jNext iwordDoc.ClosewordApp.QuitEnd Sub - Copier une ligne precise d'un tableau word et le coller dans Excel
Sub importValeurs_De_tablesWord()'Activer la reference Microsoft Word xx.x Object LibraryDim wordApp As Word.ApplicationDim wordDoc As Word.DocumentSet wordApp = createObject("word.application")wordApp.Visible = False 'Word reste masqué pendant l'opéraionSet wordDoc = wordApp.Documents.Open("C:\monDocument.doc") 'ouvre le document Word'copies la 3eme ligne de la 1ere table WordwordDoc.Tables(1).Rows(3).Range.Copy'collage dans ExcelRange("A1").pasteSpecial xlPasteValueswordDoc.Close 'fermeture document WordwordApp.Quit 'fermeture session WordEnd Sub - Exporter des donneés excel dans des cellules precises d'un tableau Word
Sub exportValeursExcelVersTableWord()'Necessite d'activer la reference Microsoft Word xx.x Object LibraryDim wordApp As Word.ApplicationDim wordDoc As Word.DocumentSet wordApp = createObject("word.application")wordApp.Visible = True 'mettre False pour garder Word masquéSet wordDoc = wordApp.Documents.Open("C:\monDocument.doc") 'ouvre le document Word'Tables(2) correspond au 2eme tableu du document Word'transfert la donnée de la cellule A1 dans la 3eme cellule de la 1ere colonnewordDoc.Tables(2).Columns(1).Cells(3).Range.Text = Range("A1")'transfert la donnée de la cellule A2 dans la 2eme cellule de la 3eme colonnewordDoc.Tables(2).Columns(3).Cells(2).Range.Text = Range("A2")'wordDoc.Close True 'ferme le document Word en enregistrant les modifications'wordApp.Quit 'ferme l'application WordEnd Sub - Vérifier si la premiere cellule d'un tableau est "vide"
'Chr(13) & Chr(7)sont des caracteres qui apparaissent par defaut dans les cellules lors de la creation du tableauIf wordDoc.Tables(1).Columns(1).Cells(1).Range.Text = Chr(13) & Chr(7) ThenmsgBox "Cellule vide"ElsemsgBox "Cellule non vide"End If - Exporter des données Excel vers plusieurs signets d'un document Word
- Afficher des informations sur la version Word installée
Sub informationsVersionWord()Dim objWord As ObjectDim Resultat As StringSet objWord = createObject("Word.Application")Resultat = "Version: " & objWord.Version & vbLf & _"Build: " & objWord.Build & vbLf & "Product Code: " & objWord.productCode()msgBox ResultatEnd Sub - Boucler sur les paragraphes d'un document Word et les supprimer s'ils débutent par le mot "Test"
Option Compare TextSub supprimerParagraphe()Dim wordApp As Word.ApplicationDim wordDoc As Word.documentDim cible As ParagraphSet wordApp = New Word.ApplicationwordApp.Visible = TrueSet wordDoc = wordApp.Documents.Open(thisWorkbook.Path & "\Doc1.doc")wordDoc.bookmarks("\startOfDoc").SelectFor Each cible In wordDoc.Paragraphscible.Range.SelectIf Trim(cible.Range.Words(1)) = "Test" Then cible.Range.DeleteNext cibleEnd SubUn autre exemple qui supprime les paragraphes de façon conditionnelleSub supprimerParagraphes_Conditionnel()'boucle sur les 3 premiers paragraphes du document Word :'si la cellule A1<>1 alors suppression du paragraphe 1'si la cellule A2<>1 alors suppression du paragraphe 2'si la cellule A3<>1 alors suppression du paragraphe 3Dim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim i As IntegerSet wordApp = createObject("Word.Application")wordApp.Visible = TrueSet wordDoc = wordApp.Documents.Open("C:\monDocument.doc")For i = 3 To 1 Step -1If Cells(i, 1) <> 1 Then _wordDoc.Paragraphs.Item(i).Range.DeleteNext iEnd Sub - Inserer la date du jour dans un signet Word , nommé "signetDate"
Sub miseAjourSignetDocWord()'necessite d'activer la reference Microsoft Word xx.x Object LibraryDim wordApp As Word.ApplicationDim wordDoc As Word.documentSet wordApp = New Word.ApplicationwordApp.Visible = TrueSet wordDoc = wordApp.Documents.Open(thisWorkbook.Path & "\monDocument.doc")wordDoc.Bookmarks("signetDate").Range.Text = Format(Now, "dd/mm/yyyy")End Sub - Remplacer une macro dans tous modèles Word .DOT d'un répertoire ( procédure vba Word )
Sub remplacement_Macro_wordDot()Dim Debut As Integer, Lignes As Integer, X As IntegerDim Fichier As String, Direction As StringDim Doc As DocumentApplication.screenUpdating = False'boucle sur tous les fichiers .dot du repertoireDirection = "C:\Documents and Settings\michel\dossier\general\excel"Fichier = Dir(Direction & "\*.dot")Do While Fichier <> ""Set Doc = Documents.Open(Direction & "\" & Fichier)'suppression macro nommée "essai" dans module1With Doc.VBProject.VBComponents("Module1").codeModuleDebut = .procStartLine("essai", 0)Lignes = .procCountLines("essai", 0).deleteLines Debut, LignesEnd With'ajoute une macro nommée "maNouvelleMacro" dans le Module1With Doc.VBProject.VBComponents("Module1").codeModuleX = .countOfLines.insertLines X + 1, "Sub maNouvelleMacro()".insertLines X + 2, "msgBox ""Coucou"",VBinformation ".insertLines X + 3, "End Sub"End WithdoEventsDoc.Close TrueSet Doc = NothingFichier = DirLoopApplication.screenUpdating = TrueEnd Sub - Récupérer la donnée d'un champ de fusion , dans un document Word ouvert
Sub recupValeurChampFusion_documentWordOuvert()Dim Appli As Word.ApplicationDim wordDoc As Word.DocumentOn Error Resume NextSet Appli = getObject(, "Word.Application")Set wordDoc = Appli.Documents("C:\Documents and Settings\michel\leDocument.doc")If wordDoc Is Nothing ThenmsgBox "Le document est fermé"ElsemsgBox wordDoc.mailMerge.dataSource.dataFields("leChampX").ValueEnd IfEnd Sub - Transferer un tableau Excel vers Word et l'adapter à la largeur de la page
Sub envoyerTableauxExcelVersWord_V02()'necessite d'activer la reference Microsoft Word xx.x Object LibraryDim docWord As Word.DocumentDim appWord As Word.ApplicationSet appWord = New Word.ApplicationappWord.Visible = TrueSet docWord = appWord.Documents.AddRange("A1:H10").CopyappWord.Selection.PastedocWord.Tables(1).autoFitBehavior wdAutoFitWindowApplication.cutCopyMode = FalseEnd Sub - Lancer une macro Word depuis Excel
Sub lancerMacroWord()Dim wordApp As Word.ApplicationSet wordApp = createObject("Word.Application")wordApp.Visible = TruewordApp.Documents.Open ("C:\monDocument.doc")wordApp.Run "laMacro"End SubUn autre exemple si le document Word est deja ouvertPrivate Sub commandButton1_Click()Dim wordApp As ObjectSet wordApp = getObject(, "Word.Application")wordApp.Run "maProcedure"End Sub - Passer une information d'Excel dans une Variable Word
'------------------------'procedure dans Excel'necessite d'activer la reference Microsoft Word xx.x Object LibraryPrivate Sub commandButton1_Click()Dim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim monParametreVB As StringSet wordApp = createObject("Word.Application")wordApp.Visible = TrueSet wordDoc = wordApp.Documents.Open("C:\monDocument.doc") 'ouverture doc WordmonParametreVB = "1234567"'déclenchement de la macro Word'Remarque : la macro Word doit etre placée au niveau de thisDocumentwordDoc.laMacro monParametreVBEnd Sub'------------------------'------------------------'La procédure dans Word à placer au niveau de thisDocumentOption ExplicitSub laMacro(maVariableWord As String)thisDocument.Range.Text = maVariableWordEnd Sub'------------------------ - Pour piloter un document Word déjà ouvert , utilisez la fonction getObject :
Sub piloterUnDocumentWordOuvert()'Activer reference Microsoft Word xx.x Object LibraryDim wordDoc As Word.DocumentSet wordDoc = getObject("C:\monFichier.doc")msgBox wordDoc.paragraphs.CountEnd Sub - Importer un tableau Word vers Excel en intégrant les retours à la ligne
Les retours à la ligne dans les cellules d'un tableau Word génèrent autant de cellules supplémentaires lors du collage dans ExcelPour y remédier , cet exemple importe vers Excel le premier tableau du document Word "C:\monFichier.doc" ( qui est déja ouvert) , en conservant le format des cellulesSub importerValeursTableWord_versExcel()Dim wordDoc As ObjectDim i As Integer , j As IntegerDim Cible As VariantSet wordDoc = getObject("C:\monFichier.doc")For i = 1 To wordDoc.Tables(1).Rows.CountFor j = 1 To wordDoc.Tables(1).Columns.CountCible = wordDoc.Tables(1).Columns(j).Cells(i)Sheets(1).Cells(i, j) = _Application.worksheetFunction.Substitute(Cible, vbCr, vbLf)Sheets(1).Cells(i, j) = _Left(Sheets(1).Cells(i, j), Len(Sheets(1).Cells(i, j)) - 1)Next jNext iEnd Sub - Insérer des données dans un champ Word
'Fields(1) : premier champ du document WordwordDoc.Fields(1).Result.Text = "essai d'ecriture dans champ Word" - Lire les données d'un champ Word
'Fields(1) : premier champ du document WordmsgBox wordDoc.Fields(1).Result.Text - Extraire les phrases / lignes de plusieurs documents Word
Chaque ligne est importée dans une colonne différente du classeurLien supprimé - Ouvrir un classeur Excel depuis une macro Word
- Récupérer l'arborescence des paragraphes d'un document Word
Chaque paragraphe est supposé débuter par une numérotationSub boucleParagraphesWord()'necesite d'activer la reference Microsoft Word xx.x Object LibraryDim appWrd As Word.ApplicationDim docWord As Word.DocumentDim Paragraphe As ParagraphDim i As IntegerSet appWrd = createObject("Word.Application")appWrd.Visible = TrueSet docWord = appWrd.Documents.Open("C:\monDocument.doc")For Each Paragraphe In docWord.ParagraphsIf Paragraphe.Range.listFormat.listValue <> 0 Theni = i + 1Cells(i, Paragraphe.Range.listFormat.listLevelNumber) = _Paragraphe.Range.listFormat.listStringCells(i, Paragraphe.Range.listFormat.listLevelNumber + 1) = _Paragraphe.Range.Sentences(1).TextEnd IfNextEnd Sub - Ajouter une checkbox dans la 2eme colonne de toutes les tables d'un document
'adapté de bbil - developpez.comDim Tb As TableFor Each Tb In docWord.TablesFor i = 1 To Tb.Rows.CountTb.Cell(i, 2).Range.inlineShapes.addOLEControl classType:="Forms.checkBox.1"With docWord.inlineShapes(docWord.inlineShapes.Count).OLEFormat.Object.Caption = "".Width = 15.Height = 15End WithNext iNext Tb - Coller un graphique dans un document Word et insérer du texte en dessous
Sub collageGraphique_puisAjoutTexte()'nécéssite d'activer la référence Microsoft Word xx.x Object LibraryDim wordApp As Word.ApplicationDim wordDoc As Word.DocumentSet wordApp = createObject("word.application")wordApp.Visible = TrueSet wordDoc = wordApp.Documents.AddSheets("Feuil1").chartObjects(1).Copy 'copie le graphique'collage graphiquewordDoc.Range.pasteSpecial Link:=False, dataType:=wdPasteEnhancedMetafile, _Placement:=wdInLine, displayAsIcon:=False'ajout du texte à la suite du graphiqueWith wordDoc.Content.Collapse Direction:=wdCollapseEnd 'derniere ligne du document.insertBreak Type:=wdLineBreak 'insert saut de ligne.Text = "Le texte à ajouter"End WithEnd Sub - Coller une plage de cellules en pied de page d'un document Word
With appword.Selection.Sections(1).Footers(wdHeaderFooterPrimary).Range.Paste.Range.Paragraphs.Alignment = wdAlignParagraphCenterEnd With - Récupérer la valeur d'un checkbox dans un document Word
S'il s'agit d'un objet de la boite à outils Controles :msgBox wdDoc.Checkbox2.ValueS'il s'agit d'un objet Formulaire :wdDoc.formFields("case a cocher1").Result - Créer un lien hypertexte dans un document Word .
wordDoc.Range.Hyperlinks.Add Anchor:=wordDoc.Range, Address:="http://www.leSite.com" - Récupérer le texte contenu entre 2 signets .
Sub recuperationTexteEntreDeuxSignets()Dim wordApp As Word.ApplicationDim wordDoc As Word.documentDim X As Long, Y As LongDim Plage As Word.RangeSet wordApp = New Word.ApplicationwordApp.Visible = TrueSet wordDoc = wordApp.Documents.Open("C:\monDocument.doc")X = wordDoc.Bookmarks("Debut").StartY = wordDoc.Bookmarks("Fin").EndSet Plage = wordDoc.Range(Start:=X, End:=Y)Range("A1") = Plage.TextSet wordDoc = NothingSet wordApp = NothingEnd Sub - Lister les raccourcis clavier disponibles dans Word
Dim appWrd As ObjectSet appWrd = createObject("Word.Application")appWrd.Visible = TrueappWrd.listCommands FalseLa meme opération , sans macro dans Word :Menu OutilsMacroMacrosSélectionnez "Commandes Word" dans le menu déroulant "Macros disponibles dans :"Sélectionnez "listerCommandes" dans la liste qui s'afficheCliquez sur le bouton "Exécuter"Une nouvelle boite de dialogue s'afficheSelectionnez l'option "Configuration actuelle de menu et clavier"Cliquez sur OK pour valider .
- Insérer un champ (exemple: numéro de page) dans la cellule d'un tableau placé en pied de page
Dim appWord As Word.ApplicationDim docWord As Word.DocumentDim Cible As Word.RangeDim x As IntegerSet appWord = createObject("word.application")appWord.Visible = TrueSet docWord = appWord.Documents.Add 'creation doc Word'copie plage de cellule ExcelRange("B34").Copy'collage dans le pied de page WordWith appWord.Selection.Sections(1).Footers(wdHeaderFooterPrimary).Range.Paste.Range.Paragraphs.Alignment = wdAlignParagraphCenterEnd Withx = docWord.Sections(1).Footers(wdHeaderFooterPrimary).Range.Tables.Count'le champ va etre inséré dans la 2eme ligne de la 1ere colonneSet Cible = docWord.Sections(1).Footers(wdHeaderFooterPrimary). _Range.Tables(x).Cell(2, 1).RangeCible.Text = ""Cible.Collapse wdCollapseStart'insertion du champ "Numero de page"docWord.Fields.Add Range:=Cible, Type:=wdFieldPage, preserveFormatting:=True - Compter le nombre de fois qu'un mot apparait dans un document
Set Plage = wordDoc.Content.WordsFor Each W In PlageIf inStr(1, W.Text, "motCible") > 0 Then x = x + 1Next WmsgBox x - Sélectionner les x derniers paragraphes d'un document Word
Dim rngParagraphs As RangeDim x As Integer, Y As Integer' x = Nombre total de paragraphes dans le documentx = activeDocument.Paragraphs.Count' y = nombre de paragraphes a sélectionner à partir de la finY = 5Set rngParagraphs = activeDocument.Range( _Start:=activeDocument.Paragraphs(x - Y).Range.Start, End:=activeDocument.Paragraphs(x).Range.End)rngParagraphs.Select
Ce lien n'existe plus
Utiliser la messagerie Outlook et Outlook Express depuis Excel
- La différence entre Outlook et Outlook Express.
Ce lien n'existe plus - Ouvrir le carnet d'adresses Outlook Express
Private Sub commandButton1_Click()Dim Valeur As DoubleOn Error Resume NextappActivate ("Carnet d'adresse")If Err.Number <> 0 ThenValeur = Shell("C:\Program Files\Outlook Express\wab.exe", 1)End IfEnd Sub - Envoyer la feuille active par mail ( seulement pour Outlook )
Sub envoiMailEtFeuilleActive()activeSheet.Copy ' créée une copie de la feuille activeactiveWorkbook.sendMail Recipients:="forumXLD@test.net" 'envoi MailApplication.displayAlerts = FalseactiveWorkbook.Close ' supprime le classeur créé après l'envoiApplication.displayAlerts = TrueEnd Sub - Envoyer le classeur actif par mail ( seulement pour Outlook )
Sub envoiMailclasseurActif()Application.dialogs(xlDialogSendMail).Show "forum@xld.fr", "Test d'envoi "End Sub - Envoyer le classeur actif par mail , 2eme méthode
Sub envoiMailClasseurActifV02()activeWorkbook.sendMail Recipients:="xld@forum.fr"End Sub - N'envoyer que quelques pages d'un classeur par mail
- Creer et gerer des groupes de diffusion dans Excel
Lien supprimé - Envoyer un mail avec corps du message multiligne , Outlook Express
Sub envoiMailOE()Dim Adresse As StringDim Sujet As String, Texte As StringAdresse = "forum@XLD.fr"Sujet = "Test d'envoi "Texte = "Bonjour ," & vbCrLf & vbCrLf _& "Ceci est un essai de mail multilignes " & vbCrLf & vbCrLf _& "Signé " & Application.userNameShell "C:\Program Files\Outlook Express\msimn.exe " & "/mailurl:mailto:" _& Adresse & "?subject=" & Sujet & "&Body=" & TexteEnd Sub - Envoyer un mail avec un lien hypertexte dans le corps du message , Outlook
une autre méthode - Envoyer un mail avec le chemin d'un répertoire réseau , en lien hypertexte dans le corps du message
- Envoyer un mail , avec un site http et une adresse mail en lien hypertexte dans le corps du message
Sub creationMailEtLienHypertexte()Dim olApp As New Outlook.ApplicationDim olItem As Outlook.mailItem' necessite d'activer la reference microsoft outlook 10.0 object librarySet olItem = olApp.createItem(olMailItem)With olItem.To = "forum@xld.fr".Subject = "Le titre du message".Body = "http://www.excel-downloads.com" & vbLf & "monMail@xld.fr".Display.Save.sendEnd WithSet olItem = NothingSet olApp = NothingEnd Sub - Fermer l'application Outlook Express
Public Declare Function sendMessage Lib "user32" Alias "sendMessageA" _(byVal HWnd As Long, byVal wMsg As Long, byVal wParam As Long, lParam As Any) As LongPublic Declare Function findWindow Lib "user32" Alias "findWindowA" _(byVal lpClassName As String, byVal lpWindowName As String) As LongSub fermerOutlookExpress()'d'après Chip Pearson, mpepDim HWnd As LongHWnd = findWindow(vbNullString, "Boîte de réception - Outlook Express")If HWnd > 0 Then sendMessage HWnd, &H10, 0, 0End Sub - Exporter les mails de la boite de réception Outlook , vers des fichiers textes
Sub transfertMailsDansFichiersTextes()'necessite d'activer la reference Microsoft Outlook xx Object libraryDim OLapp As Outlook.ApplicationDim OLspace As Outlook.nameSpaceDim OLinbox As Outlook.MAPIFolderDim OLmail As Outlook.mailItemDim OLbody As StringDim Cible As IntegerDim i As ByteSet OLapp = createObject("Outlook.application")Set OLspace = OLapp.getNamespace("MAPI")Set OLinbox = OLspace.getDefaultFolder(olFolderInbox) 'boite de receptionFor Each OLmail In OLinbox.ItemsOLbody = OLmail.Bodyi = i + 1Cible = freeFile'adapter chemin fichier de suivi sur le reseauOpen "C:\Documents and Settings\ " & i & " nomExpediteur Prenom.txt" For Append As #CiblePrint #1, OlbodyClose #CibleNextSet OLapp = NothingSet OLspace = NothingSet OLinbox = NothingEnd Sub - Envoyer un mail sans message de confirmation , méthode CDO
- Envoyer un mail avec texte multiligne et sans message de confirmation , méthode CDO
Lien supprimé - Envoyer un mail en automatique en utilisant le contenu d'un fichier texte comme corps du message
- Envoyer un mail avec une demande de confirmation de réception et de lecture
Sub mail_confirmationReception_Lecture()'necessite d'activer la reference Microsoft Outlook xx.x Object LibraryDim Ol As New Outlook.ApplicationDim olMail As mailItemSet Ol = New Outlook.ApplicationSet olMail = Ol.createItem(olMailItem)With olMail.To = "michelxld@yahoo.fr".Subject = "Le sujet traité ".Body = "Bonjour , " & vbLf & "Vous trouverez ci joint...".Attachments.Add "C:\Documents and Settings\michel\dossier\general\excel\monFichier.txt"'.deferredDeliveryTime = Date + 2 + #5:00:00 AM# 'option pour envoi différé du message.originatorDeliveryReportRequested = True 'confirmation de réception.readReceiptRequested = True 'confirmation de lecture.SendEnd WithEnd Sub - Vérifier si Outlook est ouvert
Si Outlook est ouvert l'application devient la fenêtre activeSi Outlook est fermé la macro va ouvrir l'application - Compter le nombre de messages , total et non lus , dans la boite de réception
Sub compterMessagesBoiteReception()'necessite d'activer la reference Microsoft Outlook xx.x Object LibraryDim OLapp As Outlook.ApplicationDim OLspace As Outlook.NamespaceDim OLinbox As Outlook.MAPIFolderSet OLapp = Createobject("Outlook.application")Set OLspace = OLapp.Getnamespace("MAPI")Set OLinbox = OLspace.getDefaultFolder(olFolderInbox)Msgbox "Nombre de messages total dans la boite de reception : " & OLinbox.Items.CountMsgbox "Nombre de messages non lus : " & OLinbox.unReadItemCountEnd SubUn autre exemple pour boucler sur tous les dossiers de la boite de reception et compter le nombre de mailsSub boucleDossiersBoiteDeReception()Dim Ol As New Outlook.ApplicationDim Ns As Outlook.nameSpaceDim Dossier As Outlook.MAPIFolderSet Ns = Ol.getNamespace("MAPI")Set Dossier = Ns.getDefaultFolder(olFolderInbox)Debug.Print Dossier.Name & " --> " & Dossier.Items.CountboucleDossiers Dossier, ""End SubPrivate Sub boucleDossiers(byVal Fld As Outlook.MAPIFolder, nomDossier As String)Dim i As IntegerDim Dossier1 As Outlook.MAPIFolderDim OLmail As Outlook.mailItemIf Fld.Folders.Count > 0 ThenDo Until i = Fld.Folders.Counti = i + 1Set Dossier1 = Fld.Folders(i)Debug.Print Dossier1.Name & " --> " & Dossier1.Items.CountIf Dossier1.Folders.Count > 0 Then boucleDossiers Dossier1, nomDossierLoopEnd IfEnd Sub - Gérer le calendrier Outlook : Lister, Creer, Modifier et Supprimer des rendez vous
Lien suppriméLien supprimé - Créer des rendez vous en masse , à partir d'un tableau Excel
Lien supprimé - Créer un nouveau dossier dans la boite de réception Outlook
Sub creationDossierDansBoiteReception()Dim olApp As New Outlook.ApplicationDim olSpace As Outlook.nameSpaceDim olFolder As Outlook.MAPIFolderDim olInbox As Outlook.MAPIFolderSet olSpace = olApp.getNamespace("MAPI")Set olInbox = olSpace.getDefaultFolder(olFolderInbox)Set olFolder = olInbox.Folders.Add("nouveau dossier" & Format(Date, "yymmdd"))End Sub - Insérer une plage de cellules au format tableau , dans le corps d'un message Outlook
- Une autres solution pour insérer une plage de cellules dans le corps d'un message ,Excel2002
(utilisation de la fonction intégrée dans Excel2002 )Sub envoiPlageCellules_Excel2002()Activesheet.Range("A1:B5").Select ' la plage de cellules à envoyerActiveworkbook.Envelopevisible = TrueWith Activesheet.Mailenvelope.Introduction = "bonjour , ci joint les données ...".Item.To = "leForum@xld.fr".Item.Subject = "le sujet".Item.SendEnd WithEnd Sub - Trier les messages dans la boite de réception Outlook
'La macro créée un nouveau dossier dans la boite de reception et y transfert les messages reçus ,si l'émetteur n'existe pas dans la liste de vos "Contacts"Sub triMessages_dansBoiteReception()'nécéssite d'activer la référence Microsoft Outlook 10.0 Object LibraryDim olApp As New Outlook.ApplicationDim olSpace As Outlook.nameSpaceDim olFolder As Outlook.MAPIFolder, olInbox As Outlook.MAPIFolderDim Adresse As Outlook.addressListDim i As Integer, j As IntegerDim leContact As BooleanOn Error goTo FinSet olSpace = olApp.getNamespace("MAPI")Set olInbox = olSpace.getDefaultFolder(olFolderInbox)Set olFolder = olInbox.Folders.Add("Nouveau Répertoire " & Format(Date, "yyyymmdd"))Set Adresse = olSpace.addressLists("Contacts")On Error goTo 0'################################################################''! normalement le nouveau dossier doit etre créé sans volet de prévisualisationolApp.activeExplorer.currentView = "Messages"'################################################################For j = olInbox.Items.Count To 1 Step -1leContact = FalseFor i = 1 To Adresse.addressEntries.CountIf olInbox.Items.Item(j).senderName = Adresse.addressEntries.Item(i) Then _leContact = True: Exit ForNext iIf leContact = False Then olInbox.Items.Item(j).Move olFolderNext j'msgBox olFolder.Items.Count & " messages non identifiés ont été tranférés dans " & _"le dossier Outlook : Nouveau Répertoire " & Format(Date, "yyyymmdd"), , "Message"Exit SubFin:msgBox "Opération annulée : le nouveau répertoire spécifié existe déja .", , "Message"End Sub - Trier les messages automatiquement dès leur reception
( macro outlook : voir le message du 28/04/2005 18:36 ) - Les evenements dans Outlook : Lancer une macro Excel depuis Outlook , lors de l'envoi d'un message .
Lien suppriméAccédez à l'éditeur de macros Outlook (Alt+F11)Cliquez sur thisOutlookSession dans l'explorateur de projetEn haut de l'éditeur , remplacez "General" par "Application" (menu deroulant)Dans le menu déroulant de droite , s'affiche la liste des evenements associés :Private Sub Application_advancedSearchComplete(byVal searchObject As Search)Private Sub Application_advancedSearchStopped(byVal searchObject As Search)Private Sub Application_itemSend(byVal Item As Object, Cancel As Boolean)Private Sub Application_MAPILogonComplete()Private Sub Application_newMail()Private Sub Application_optionsPagesAdd(byVal Pages As propertyPages)Private Sub Application_Quit()Private Sub Application_Reminder(byVal Item As Object)Private Sub Application_Startup()
La procédure evenementielle Outlook ci dessous , déclenche la macro Excel "maProcedure" au moment de l'envoi d'un Mail , si le sujet du message est "Test"Dans cet exemple il existe préalablement un classeur Excel ouvert contenant une macro nommée "maProcedure"Private Sub Application_itemSend(byVal Item As Object, Cancel As Boolean)Dim excelApp As ObjectSet excelApp = getObject(, "Excel.Application")If Item = "Test" Then excelApp.Run "maProcedure"End Sub - Ajouter un contact dans Outlook
Sub ajouterContactOutlook()'necessite d'activer la reference Microsoft Outlook xx.x Object LibraryDim objOutlook As New Outlook.ApplicationDim objContact As contactItemSet objContact = objOutlook.createItem(olContactItem)With objContact.email1Address = "michelxld@yahoo.com".firstName = "michel".lastName = "xld".homeTelephoneNumber = "00 00 00 00 00".homeAddressCity = "XLDcity".SaveEnd WithEnd Sub - Vérifier si un nom (xld) existe dans la liste des contacts Outlook
Sub controleLastName_contactsOutlook()Dim olApp As New Outlook.ApplicationDim Cible As Outlook.contactItemDim dossierContacts As Outlook.MAPIFolderSet olApp = New Outlook.ApplicationSet dossierContacts = olApp.getNamespace("MAPI").getDefaultFolder(olFolderContacts)Set Cible = dossierContacts.Items.Find("?[lastName] = ""xld""")If Not Cible Is Nothing ThenmsgBox "Le contact existe"ElsemsgBox "Le contact n'existe pas"End IfEnd SubUn autre exemple qui utilise une variable pour définir la donnée à rechercher :Dans ce cas la variable doit etre encadrée par des apostrophes "'"Cet exemple vérifie si une adresse mail existe dans la liste des contacts :Dim leMail As StringleMail = "nom.Prenom@mail.fr"Set Cible = dossierContacts.Items.Find("?[email1Address] = '" & leMail & "'") - Extraire les numéros de téléphone dans la liste des contacts Outlook
Sub numeroTelephone_contactsOutlook()Dim olApp As New Outlook.ApplicationDim Cible As Outlook.contactItemDim dossierContacts As Outlook.MAPIFolderDim Resultat As StringSet olApp = New Outlook.ApplicationSet dossierContacts = olApp.getNamespace("MAPI").getDefaultFolder(olFolderContacts)For Each Cible In dossierContacts.ItemsResultat = Resultat & Cible.homeTelephoneNumber & vbTab & Cible.lastNameAndFirstName & vbLfNextmsgBox Resultat, , "Liste des numeros de telephone Outlook-Contacts"End Sub - Boucler sur tous les dossiers personnels Outlook pour extraire les messages reçus d'un expediteur précis
La boite de réception , la boite des éléments supprimés et tous leurs sous dossiers sont pris en compte - Afficher le calendrier outlook
Sub afficherCalendrierOutlook()Dim outApp As Outlook.ApplicationDim outObj As nameSpaceSet outApp = createObject("Outlook.Application")Set outObj = outApp.getNamespace("MAPI")Set outApp.activeExplorer.currentFolder = _outObj.getDefaultFolder(olFolderCalendar)outApp.activeExplorer.DisplayEnd Sub - Ajouter une tache à un destinataire en réseau
- Lister les taches Outlook .
Dim olApp As Outlook.ApplicationDim olNs As nameSpaceDim Fldr As MAPIFolderDim olTsk As taskItemSet olApp = New Outlook.ApplicationSet olNs = olApp.getNamespace("MAPI")Set Fldr = olNs.getDefaultFolder(olFolderTasks)For Each olTsk In Fldr.ItemsDebug.Print olTsk.Subject & " - " & olTsk.startDate & " - " & olTsk.StatusNext olTskSet olTsk = NothingSet Fldr = NothingSet olNs = NothingSet olApp = Nothing - Insérer une image dans le corps d'un message Outlook
Ce lien n'existe plus - Envoyer une page HTML dans le corps d'un message Outlook
Sub envoiPageHTML_corpsMessageOutlook()'Necessite d'Activer la reference Microsoft Outlook xx.x Object LibraryDim olApp As New Outlook.ApplicationDim olItem As Outlook.mailItemDim S As String'necessite d'Activer la reference Microsoft Internet ControlsDim IE As internetExplorerSet IE = createObject("internetExplorer.Application")With IE.Visible = False.Navigate "http://www.developpez.com"Do Until .readyState = READYSTATE_COMPLETEdoEventsLoop 'attend la fin du chargementEnd WithS = IE.document.documentElement.innerHTMLdoEventsIE.QuitSet IE = NothingSet olItem = olApp.createItem(olMailItem)With olItem.To = "destinataire@mail.fr".Subject = "le titre".HTMLBody = S.Display.Save.SendEnd WithEnd Sub - Envoyer un mail automatique , avec notification de réception du destinataire
Sub envoiMail_avecNotification()'testé avec WinXP & Excel2002Dim iMsg As Object, iConf As ObjectSet iMsg = createObject("CDO.Message")Set iConf = createObject("CDO.Configuration")With iMsgSet .Configuration = iConf.To = "leForum@xld.fr" 'renvoie une erreur si l'adresse est non valide'.From = "youralias@yourdomain.com".Subject = "Le titre du message".HTMLBody = "Ceci est un essai ...".Fields("urn:schemas:mailheader:disposition-notification-to") = "expediteur@monMail.fr".Fields("urn:schemas:mailheader:return-receipt-to") = "expediteur@monMail.fr".Fields.Update.SendEnd WithRemarque : consultez ce lien si vous avez un probleme avec la méthode .SendLien supprimé - Supprimer les contacts qui appartiennent à une catégorie spécifique ( exemple catégorie "Amis" )
Sub supprimerContacts_Filtre_Categorie()Dim olApp As New Outlook.ApplicationDim Cible As Outlook.contactItemDim dossierContacts As Outlook.MAPIFolderSet olApp = New Outlook.ApplicationSet dossierContacts = olApp.getNamespace("MAPI").getDefaultFolder(olFolderContacts)For Each Cible In dossierContacts.ItemsIf Cible.Categories = "Amis" Then Cible.DeleteNextEnd Sub
Sub mail_envoiDiffere()
'necessite d'activer la reference Microsoft Outlook xx.x Object Library
Dim Ol As Outlook.Application
Dim olMail As mailItem
Set Ol = New Outlook.Application
Set olMail = Ol.createItem(olMailItem)
With olMail
.To = "leForum@xld.fr"
.Subject = "Le sujet traité "
.Body = "Bonjour , " & vbLf & "Vous trouverez ci joint..."
'------------------------
'option pour envoi différé d'une heure
.deferredDeliveryTime = Date + Time + (1 / 24)
'------------------------
.Send
End With
End Sub
- Controler si un champ personnalisé nommé "myCustomField" Existe dans les contacts Outlook
Si le champ n'existe pas , la procédure va le créer et y insérer des données "My data"Sub Control_Add_userProperty_contactsOutlook()'Necessite d'activer la reference Microsoft Outlook xx.x Object LibraryDim olApp As New Outlook.ApplicationDim Cible As Outlook.contactItemDim dossierContacts As Outlook.MAPIFolderDim myProp As Outlook.userPropertySet olApp = New Outlook.ApplicationSet dossierContacts = olApp.getNamespace("MAPI").getDefaultFolder(olFolderContacts)For Each Cible In dossierContacts.ItemsSet myProp = Cible.userProperties("myCustomField")If myProp Is Nothing ThenSet myProp = Cible.userProperties.Add("myCustomField", olText)myProp.Value = "My data"Cible.SaveEnd IfNextEnd Sub - Envoyer un message Outlook pour multi destinataires
Sub envoiMesssage_multiDestinataires()Dim outApp As New Outlook.ApplicationDim Dest As Outlook.RecipientDim Msg As Outlook.mailItemSet Msg = outApp.createItem(0)Msg.Subject = "le sujet"Msg.Body = "bonjour, " & vbLf & "vous trouverez ci joint ... "Msg.DisplaySet Dest = Msg.Recipients.Add("destinataire1@mail.com")Set Dest = Msg.Recipients.Add("destinataire2@provider.com")Set Dest = Msg.Recipients.Add("Prenom1 Nom1") 'fonctionne seulement si present dans la liste des contactsMsg.SendEnd Sub - Créer une liste de distribution et y insérer quelques adresses mail
Sub creationListeDistribution()Dim outApp As Outlook.ApplicationDim DL As distListItemDim oItem As mailItemDim oRecipients As RecipientsSet outApp = createObject("Outlook.Application")Set DL = outApp.createItem(olDistributionListItem)DL.DLName = "Ma nouvelle liste"Set oItem = outApp.createItem(olMailItem)Set oRecipients = oItem.RecipientsoRecipients.Add "contact1@mail.fr"oRecipients.Add "contact2@mail.fr"oRecipients.resolveAllDL.addMembers oRecipientsDL.SaveEnd Sub - Exporter les pieces jointes contenues dans les messages de la boite de réception
Sub exportPiecesJointes_boiteReception()Dim outlookApp As New Outlook.ApplicationDim olSpace As Outlook.nameSpaceDim olInbox As Outlook.MAPIFolderDim pceJointe As Outlook.AttachmentDim j As Integer, i As Integer, x As IntegerSet outlookApp = createObject("Outlook.Application")Set olSpace = outlookApp.getNamespace("MAPI")Set olInbox = olSpace.getDefaultFolder(olFolderInbox)For j = 1 To olInbox.Items.Count 'boucle sur tous les messages de la boite de réceptionIf Not olInbox.Items.Item(j).Attachments.Count = 0 ThenFor i = 1 To olInbox.Items.Item(j).Attachments.CountSet pceJointe = olInbox.Items.Item(j).Attachments(i)If pceJointe.Filename = "CG Card V2.zip" Then 'recuperer uniquement les fichiers nommés CG Card V2.zipx = x + 1pceJointe.saveAsFile "C:\Documents and Settings\" & x & "_" & pceJointeEnd IfSet pceJointe = NothingNext iEnd IfNext jEnd Sub - Activer la référence Outlook sous Office97 (Une astuce donnée par Charly) .
Si vous ne trouvez pas "Microsoft Outlook 8.0 Object library" dans la liste des références VBAProject , activez "Modèle d'objet Microsoft Outlook 8.0"
Dim OLapp As Outlook.Application
Dim OLspace As Outlook.nameSpace
Dim OLinbox As Outlook.MAPIFolder
Dim oMt As Outlook.mailItem
Dim oItem As Outlook.Items
Set OLapp = createObject("Outlook.application")
Set OLspace = OLapp.getNamespace("MAPI")
Set OLinbox = OLspace.getDefaultFolder(olFolderInbox)
Set oItem = OLinbox.Items
oItem.Sort "?[receivedTime]", True 'tri décroissant
'oItem.Sort "?[Reçu]", True 'tri décroissant
For Each oMt In oItem
Debug.Print oMt.senderName & " - " & oMt.receivedTime
Next oMt
OLapp.Quit
Les fichiers textes
- Ecrire la valeur de la cellule A1 dans une fichier texte , par l'instruction Append
Remarques : Les données viennent s'inscrire à la suite des lignes existantes .Si le fichier .Txt n'existe pas , il sera créé automatiquement .Sub excelVersFichierTexte()Dim Cible As IntegerCible = freeFileOpen "C:\Mes documents\michel excel\essai.txt" For Append As #CiblePrint #Cible, Range("A1") 'renvoie valeur cellule A1 dans fichier txtClose #CibleEnd Sub - Ecrire la valeur de la cellule A1 dans une fichier texte , par l'instruction Output
Remarques : Si le fichier existe , les anciennes données seront écrasées .Si le fichier .Txt n'existe pas , il sera créé automatiquement .Sub excelVersFichierTexte_V02()Dim Fichier As StringFichier = "C:\Documents and Settings\michel\dossier\general\excel\Fichier.Txt"Open Fichier For Output As #1Print #1, Range("A1") 'renvoie la valeur cellule A1 dans le fichier txtCloseEnd Sub - Importer les données d'un fichier texte dans un classeur
dans cet exemple le séparateur du fichier texte est le point virgule ";"Sub lireFichierTexte()Dim infosLigne As StringDim i As Integer, x As IntegerDim Tableau() As StringOpen "C:\Documents and Settings\michel\excel\monFichier.txt" For Input As #1Do While Not EOF(1)Line Input #1, infosLignei = i + 1Tableau = Split(infosLigne, ";") 'le separateur est le point virguleFor x = 0 To UBound(Tableau)Cells(i, x + 1) = Tableau(x)NextLoopClose #1End Sub - Lire un fichier Texte : boucler sur toutes les lignes du fichier
Dans l'exemple , un message s'affiche si le début de la ligne commence par "XLD"Sub lireFichierTexte()Dim infosLigne As StringOpen "C:\Mes documents\xl\fichierTexte.txt" For Input As #1Do While Not EOF(1)Line Input #1, infosLigneIf Left(infosLigne, 3) = "XLD" Then Msgbox infosLigneLoopClose #1End Sub - Substituer des donnees dans un fichier texte , 1ere solution
La premiere consiste à creer une copie contenant les modifications .Dans l'exemple la valeur de remplacement est récupérée dans la cellule A1Sub modifierFichierTexteV01()Dim valeur As LongDim Cible As StringOpen "D:\dossier\general\excel\test.txt" For Input As #1 'recup données fichier textevaleur = fileLen("D:\dossier\general\excel\test.txt")Cible = Input(valeur, 1)Close 1Cible = Application.Substitute(Cible, "ancienMot", Range("A1")) 'remplacement mot cibleOpen "D:\dossier\general\excel\testCopie.txt" For Append As #1 'creation nouveau fichierPrint #1, CibleClose 1End Sub - Substituer des donnees dans un fichier texte , 2eme solution
la deuxieme proposition est plus radicale , mais aussi plus risquée .qui consiste à recuperer les infos du fichier d'origine dans unevariable , effectuer la modification des données , supprimer le ficherd'origine puis creer une nouveau fichier portant le meme nom ,pour y inserer les données modifiéesSub modifierFichierTexteV02()Dim valeur As LongDim Cible As StringOpen "D:\dossier\general\excel\test.txt" For Input As #1 'recup données fichier textevaleur = fileLen("D:\dossier\general\excel\test.txt")Cible = Input(valeur, 1)Close 1Cible = Application.Substitute(Cible, "ancienMot",Range("A1")) 'remplace mot cibleKill "D:\dossier\general\excel\test.txt" 'suppression fichier d'origineOpen "D:\dossier\general\excel\test.txt" For Append As #1 'nouveau fichierPrint #1, CibleClose 1End Sub - Afficher un fichier texte dans une msgBox
Sub fichierTexteVersExcel()Dim Valeur As LongDim Cible As StringOpen "D:\dossier\general\excel\test.txt" For Input As #1Valeur = fileLen("D:\dossier\general\excel\test.txt")Cible = Input(Valeur, 1)Close 1msgBox CibleEnd Sub - Compter le nombre de lignes d'un fichier texte
Const forReading = 1Sub nombreLignesFichierTexte()'Activer la reference Microsoft Scripting Run TimeDim fso As Scripting.fileSystemObjectDim Fichier As Scripting.textStreamSet fso = createObject("Scripting.fileSystemObject")Set Fichier = fso.openTextFile _("C:\Documents and Settings\michel\monFichier.txt", forReading)Fichier.readAllmsgBox "nombre de lignes : " & Fichier.LineFichier.CloseEnd Sub - Ouvrir un fichier texte dans Excel
Sub ouvrirFichierTxt()Workbooks.openText Filename:= _"C:\Documents and Settings\michel\dossier\fichierTexte.txt", Origin:=xlWindows, startRow:=1, dataType:=xlFixedWidthEnd Sub - Importer un fichier texte dont le séparateur est une virgule
L'argument Comma:=TrueWorkbooks.openText Filename:=leFichier, Origin:=xlWindows, _startRow:=1, dataType:=xlDelimited, textQualifier:=xlDoubleQuote, _consecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True, Space:=False - Importer un fichier texte dont le séparateur est un point d'exclamation
L'argument "Other" doit etre à True , et l'argument suivant "otherChar" doit etre précisé : otherChar:="!"Workbooks.openText Filename:=leFichier, Origin:=xlWindows, _startRow:=1, dataType:=xlDelimited, textQualifier:=xlDoubleQuote, _consecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, _Space:=False, Other:=True, otherChar:="!", fieldInfo:=Array(1, 1) - Transfert d'un tableau vers un fichier texte
Sub exportFeuille_versFichierTexte()Dim Plage As RangeDim i As LongDim j As ByteDim Resultat As StringDim Tableau As VariantSet Plage = Feuil1.usedRange.CellsTableau = PlageOpen "c:\exportFeuille.txt" For Output As #1For i = 1 To UBound(Tableau, 1)For j = 1 To UBound(Tableau, 2)Resultat = Resultat & Tableau(i, j) & ";" 'adaptez le separateurNextResultat = Left(Resultat, Len(Resultat) - 1)Print #1, ResultatResultat = ""NextClose #1End Sub - Supprimer les lignes en double dans un fichier texte
Option ExplicitConst forReading = 1Const forWriting = 2Sub supprimetTexteEndouble()'source : http://microsoft.supinfo.com/scripts/14082/'necessite d'activer la reference Microsoft Scripting Run TimeDim objDictionary As Scripting.DictionaryDim objFSO As Scripting.fileSystemObjectDim objFile As Scripting.textStreamDim strKey 'As ?Dim strName As StringSet objDictionary = createObject("Scripting.Dictionary")Set objFSO = createObject("Scripting.fileSystemObject")Set objFile = objFSpenTextFile _("C:\Documents and Settings\michel\dossier\general\excel\monFichier.txt", forReading)Do Until objFile.atEndOfStreamstrName = objFile.readLineIf Not objDictionary.Exists(strName) Then objDictionary.Add strName, strNameLoopobjFile.CloseSet objFile = objFSpenTextFile _("C:\Documents and Settings\michel\dossier\general\excel\monFichier.txt", forWriting)For Each strKey In objDictionary.KeysobjFile.writeLine strKeyNextobjFile.CloseEnd Sub - Supprimer une ou plusieurs lignes dans un fichier texte
'Source : Willi 26/03/2006'http://www.codyx.org/snippet_supprimer-ou-plusieurs-lignes-dans-fichier_76.aspxDim colLignes As New CollectionDim Ff As Integer, i As IntegerDim sLigne As StringFf = freeFile'Lecture du fichier, envois chaque ligne dans la collectionOpen "C:\Documents and Settings\michel\dossier\monFichier.txt" For Input As #FfWhile Not EOF(Ff)Line Input #Ff, sLignecolLignes.Add sLigneWendClose #Ff'Suppression des lignes 1 , 3 et 10colLignes.Remove 10colLignes.Remove 3colLignes.Remove 1'Réecriture du fichierOpen "C:\Documents and Settings\michel\dossiermonFichier.txt" For Output As #FfFor i = 1 To colLignes.CountPrint #Ff, colLignes(i)NextClose #Ff - Regrouper deux fichiers texte : Ajouter le contenu du Fichier2 dans le Fichier1
Remarque : cette méthode fonctionne aussi pour les fichiers htmlSub jointureDeuxFichiersTexte()'Le contenu du Fichier2 va etre ajouté dans le Fichier1Const forReading = 1, forWriting = 2, forAppending = 8Const tristateUseDefault = -2, tristateTrue = -1, tristateFalse = 0Dim Fs As ObjectDim Fichier1 As Object, Fichier2 As ObjectDim Contenu2 As String 'variable pour récupérer le contenu du Fichier2Set Fs = createObject("Scripting.fileSystemObject")Set Fichier2 = Fs.openTextFile("C:\fichierSource.txt", forReading, tristateFalse)Set Fichier1 = Fs.openTextFile("C:\fichierDestination.txt", forAppending, tristateFalse)Contenu2 = Fichier2.readAllFichier1.Write (Contenu2)Fichier1.CloseFichier2.CloseEnd Sub
Toutes vos idees sont les bienvenues .
Michel , Mise à jour le 25 Novembre 2006
Dernière modification par un modérateur: