Les sujets abordés dans cette page Les commentaires , La gestion des erreurs , L'aide en ligne Excel , Les recherches dans un classeur, Les tableaux , Les pages html et internet , Windows Media Player , Le PC et le systême d'exploitation ,Piloter Flash , les types de boucles . |
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 commentaires
- Compter le nombre de commentaires dans la feuille active
msgBox activeSheet.Comments.Count - Liste des commentaires dans une feuille
Sub listeCommentairesfeuille()Dim Cmnt As CommentDim Liste As StringOn Error goTo FinFor Each Cmnt In activeSheet.CommentsListe = Liste & Cmnt.Parent.Address & " = " & Cmnt.Text & Chr(10) & Chr(10)Next CmntmsgBox ListeExit SubFin:If Err.Number = 91 Then msgBox "Il n'y a pas de commentaires dans la feuille . "End Sub - Ajouter un commentaire dans la cellule A1 , puis le mettre en forme
Sub formatCommentaire()Range("A1").addCommentRange("A1").Comment.Text Text:="Le Forum :" & Chr(10) & "XLD" & Chr(10) & ""With Range("A1").Comment.Shape.Width = 100 ' dimensions commentaire.Height = 120.oLEFormat.Object.Font.Size = 14 ' taille texte.oLEFormat.Object.Interior.colorIndex = 3 ' couleur de fond.textFrame.Characters.Font.colorIndex = 4.textFrame.Characters.Font.Bold = True ' ecriture gras.oLEFormat.Object.Font.Name = "Bangle" ' type de policeEnd WithEnd Sub - Extraire toutes les valeurs numeriques d'un commentaire
Sub sommeDansCommentaire()Dim i As ByteDim Cible As StringDim Nombre As Double, Total As DoubleCible = Range("A1").Comment.Text 'recuperation valeur commentaireCible = Application.Substitute(Cible, ",", ".") 'pour que fonction Val puisse reconnaitre decimalesCible = Application.Substitute(Cible, " ", "x") ' pour gerer deux nombres qui se suiventFor i = 1 To Len(Cible)If isNumeric(Mid(Cible, i, 1)) ThenNombre = Val(Mid(Cible, i, Len(Cible) - i + 1))msgBox NombreTotal = Total + Nombrei = i + Len(Str(Nombre)) - 1End IfNextmsgBox "Le total du commentaire : " & TotalEnd Sub - Controler s'il y a un commentaire dans la cellule A1
Sub controleSiCommentaire()If Range("A1").Comment Is Nothing ThenmsgBox "il n'y a pas un commentaire dans la cellule A1"ElsemsgBox "il y a un commentaire dans la cellule A1"End IfEnd Sub - Copier le commentaire de la cellule A1dans le commentaire de la cellule A2
Sub collageCommentaire()Range("A1").CopyRange("A2").pasteSpecial Paste:=xlPasteCommentsEnd Sub - Boucler sur les commentaires de la feuille et y colorer en rouge les chaines de caracteres égal à "XLD"
Sub modificationCommentaires()Dim Cmnt As CommentDim Cible As StringDim i As Integer, Valeur As IntegerIf activeSheet.Comments.Count = 0 Then Exit SubFor Each Cmnt In activeSheet.CommentsCible = Cmnt.TextFor i = 1 To Len(Cible)Valeur = inStr(i, Cible, "XLD", vbTextCompare)If Valeur = 0 ThenExit ForElseCmnt.Shape.textFrame.Characters(Valeur, 6).Font.colorIndex = 3i = Valeur + 7End IfNext iNext CmntEnd Sub - Adapter la taille d'un commentaire en fonction du texte qu'il contient
Range("A1").Comment.Shape.textFrame.autoSize = True - Des commentaires conditionnels : une démo de Didier , myDearFriend
Lien supprimé - Créer un commentaire dans la cellule A1 et y insérer une image
With Range("A1").addComment.Comment.Shape.Fill.userPicture "C:\Image2.jpg"End With - Insérer une image dans un commentaire et redimensionner le commentaire à la taille de cette image
Sub ajoutImageCommentaire()Dim Nom As Variant, Repertoire As VariantDim C As RangeRepertoire = activeWorkbook.Path & "\Photos\"For Each C In SelectionNom = C.ValueIf Not C = "" ThenWith C.addComment.Comment.Shape.Fill.userPicture Repertoire & Nom & ".jpg".Comment.Visible = False 'Masque le commentaireEnd WithWith C.Comment.Shape.Width = Val(dimensionsImage(Repertoire, Nom & ".jpg", 27)).Height = Val(dimensionsImage(Repertoire, Nom & ".jpg", 28))End WithEnd IfNextEnd SubPublic Function dimensionsImage(Chemin As Variant, nomImage As Variant, Itm As Integer)Dim objShell As Object, strFileName As ObjectDim objFolder As ObjectSet objShell = createObject("Shell.Application")Set objFolder = objShell.nameSpace(Chemin)Set strFileName = objFolder.Items.Item(nomImage)dimensionsImage = objFolder.getDetailsOf(strFileName, Itm)Set objShell = NothingSet strFileName = NothingSet objFolder = NothingEnd Function
- La liste des codes erreur
- On Error goTo
Cette instruction permet d'indiquer l'emplacement de la procédure qui gère les erreurs . Lorsqu'une erreur survient la macro passe à la ligne spécifiée : "errorHandler" dans l'exemple ci dessousSub maMacro()On Error goTo errorHandler 'placé en début de macro : si une erreur survient, on va à la ligne "errorHandler"'…'La procedure'…Exit Sub' permet d'éviter la partie gestion d'erreur , si la macro s'est déroulés sans encombreerrorHandler:msgBox Err.Number & vbLf & Err.Description' indique le numéro et la description de l'erreur survenue'(voir le chapitre suivant pour plus de détails sur les codes d'erreur )End Sub - On Error Resume Next
Cette instruction , placée en début de macro , Permet en cas d'erreur de continuer la procédure en passant directement à la ligne suivanteA utiliser avec précaution car vous ne serez pas informé qu'une erreur est survenue et vous ne pourrez pas localiser l'origine du problème dans le cas où le "bug" serait préjudiciable au résultat final de votre macro - On Error goTo 0
Permet de désactiver la gestion d'erreur dans la procédure en cours - Afficher la description d'un code erreur spécifique
Debug.Print Error(75) - Afficher la description d'une erreur survenue lors du déroulement d'une macro
Sub Test()Dim X As SingleOn Error goTo errorHandlerX = 5 / 0 'exemple : la division par 0 va creer une erreur'....errorHandler:Debug.Print Err.DescriptionEnd Sub - Gérer les erreurs dans une macro , afficher des informations et ouvrir l'aide associée
Sub testErreur()On Error goTo errorHandler'la procedure qui va bugguer , par exemple une division par 0:Dim x As Integerx = 2 / 0errorHandler:msgBox "Code Erreur : " & Err.Number & vbLf & "Description: " & Err.Description & _vbLf & Err.Source & vbLf & "Index de l'aide VBA :" & Err.helpContext & vbLf & Err.helpFilemsgBox "Cliquez sur le bouton AIDE pour afficher l'aide en ligne", vbMsgBoxHelpButton, , Err.helpFile, Err.helpContextEnd Sub - Récupérer le numéro de ligne qui a provoqué une erreur (utilisation de la fonction ERL)
Ce lien n'existe plus
- L'aide en ligne Excel
Lorsque vous etes dans visual Basic Editor , vous pouvez accéder à l'aide intégrée d'Excel : Plaçez le curseur de la souris sur un des termes de votre macro , ensuite appuyez sur la touche "F1" - Afficher l'aide en ligne Excel
Sub afficherAideExcel()Application.Help "XLMAIN10.chm" 'excel2002End Sub - Afficher l'aide en ligne VBA
Sub afficherAideVBAexcel()Application.Help "vbLR6.chm" 'excel2002End Sub - Gestion des erreurs dans les formules Excel2002
Rechercher toutes les erreurs dans la Feuil1Private Sub Worksheet_Calculate()'testé sous XPDim Valeur As RangeDim Resultat As String, Message As StringFor Each Valeur In Sheets("Feuil1").usedRangeIf worksheetFunction.isErr(Valeur) = True ThenValeur.showErrorsSelect Case ValeurCase CVErr(xlErrDiv0)Resultat = "#DIV/0!"Case CVErr(xlErrNA)Resultat = "#N/A"Case CVErr(xlErrName)Resultat = "#NOM?"Case CVErr(xlErrNull)Resultat = "#NULL!"Case CVErr(xlErrNum)Resultat = "#NOMBRE!"Case CVErr(xlErrRef)Resultat = "#REF!"Case CVErr(xlErrValue)Resultat = "#VALEUR!"End SelectmsgBox "Il y a une erreur de type " & Resultat _& " dans la formule de la cellule " & Valeur.AddressEnd IfNextMessage = msgBox("Voulez vous ouvir l'aide en ligne Excel ? ", _vbYesNo, "Informations complementaires sur les types d'erreur")If Message = vbYes Then Application.Help "XLMAIN10.chm", 60309'( source classeur "Fonctions 2000_XP.xls" de Ti )'adapter le nom du fichier et l' helpcontextId selon la version d'excel'If Message = vbYes Then Application.Help "XLMAIN09.chm", 60309'pour Excel2000End Sub'ensuite pour supprimer les fleches d'audit ( macro à placer dans un module )Sub effacerFlechesAudit()Worksheets("Feuil1").clearArrowsEnd Sub - Lister les cellules contenant des erreurs dans la plage de cellule A1:A100
Sub identifierCellulesContenantErreurs()Dim Plage As Range, Cible As RangeSet Plage = Range("A1:A100")On Error Resume NextSet Cible = Plage.specialCells(xlCellTypeFormulas, xlErrors)If Not Cible Is Nothing Then msgBox Cible.Address(0, 0)End Sub - Utiliser le bouton d'aide dans un msgBox (vbMsgBoxHelpButton)
- Utiliser un fichier d'aide(.chm) personnel dans Excel
Lors de la distribution de vos projets , il peut etre interessant d'associer des fichiers d'aide spécifiques qui seront mis à la disposition des utilisateurs.Ce lien n'existe plusDes informations complémentaires sur le site de Microsoft :Ce lien n'existe plusParmi les outils de création disponibles , il existe HTML Help Workshop, téléchargeable sur le site Microsoft.Ce lien n'existe plus
- Chercher un mot ou une valeur dans tous les classeurs ouverts
Option Base 1Sub chercherMots_tousClasseursOuverts()Dim i As Integer, j As Integer, K As Integer, X As IntegerDim Cible As StringDim Cell As RangeDim firstAddress As String, Resultat As StringDim Tableau()Application.screenUpdating = False'Effacer les résultats précédentsthisWorkbook.Sheets(1).usedRange.Cells.clearContents'Mot à chercherCible = inputBox(" Saisir le mot à rechercher : ", "Recherche", "Le mot")If Cible = "" Then Exit Sub'Boucle sur tous les classeurs ouvertsFor K = 1 To Workbooks.CountWorkbooks(K).Activate'boucle sur toutes les feuilles de chaque classeurFor i = 1 To Sheets.CountSheets(i).ActivateWith Sheets(i).usedRange.CellsSet Cell = .Find(Cible, Lookin:=xlValues)If Not Cell Is Nothing ThenfirstAddress = Cell.AddressDoCell.Select'Mise en tableau des résultats trouvésX = X + 1reDim Preserve Tableau(3, X)Tableau(1, X) = Workbooks(K).NameTableau(2, X) = Sheets(i).NameTableau(3, X) = "Cellule " & Cell.AddressSet Cell = .findNext(After:=activeCell)Loop While Not Cell Is Nothing And Cell.Address <> firstAddressEnd IfEnd WithNext iNext KIf X <> 0 ThenthisWorkbook.ActivateFor j = 1 To XWith thisWorkbook.Sheets(1)Range("A65536").End(xlUp).Offset(1, 0) = Tableau(1, j)Range("B65536").End(xlUp).Offset(1, 0) = Tableau(2, j)Range("C65536").End(xlUp).Offset(1, 0) = Tableau(3, j)End WithNext jElsemsgBox "aucune valeur trouvée"End IfApplication.screenUpdating = TrueEnd Sub - Rechercher un mot pouvant contenir des majuscules ou des minuscules
Pour effectuer une recherche par VBA indépendamment de la casse (XLD=xld) , il faut saisir tout en haut du module ( avant la première macro ) : "Option Compare Text"Exemple :Option Compare TextSub maMacro().....End SubPour que la recherche soit sensible à la casse , utilisez : Option Compare BinaryExemple :Option Compare BinarySub maMacro().....End Sub
- Des informations très complétes au sujet des tableaux , sur la Wiki Page de Zon
- Transférer un tableau vers un fichier texte
Lien supprimé - Transférer un tableau dans une Feuille Excel
Sub tableauVersFeuilleExcel()Dim i As Integer, j As Integer, X As IntegerDim Tableau() As String'définir le nombre de lignesX = inputBox("Saisir le nombre de lignes : ", "Transfert tableau dans feuille Excel", 10)If X = 0 Then Exit Sub'insertion des données dans le tableau( X lignes et 2 colonnes )reDim Tableau(X, 2)For i = 0 To X - 1For j = 0 To 1Tableau(i, j) = "Valeur" & i & jNext jNext i'transfert du tableau dans la feuille ExcelRange("A1:B" & UBound(Tableau)) = TableauEnd Sub - Trier les données d'un tableau
Sub tri_Tableau()Dim Valeur As ByteDim i As IntegerDim Cible As VariantDim Tableau()reDim Tableau(0 To 9) 'remplissage tableau avec cellules A1:A10For i = 0 To UBound(Tableau())Tableau(i) = Cells(i + 1, 1)Next iDo 'triValeur = 0For i = 0 To UBound(Tableau) - 1If Tableau(i) < Tableau(i + 1) ThenCible = Tableau(i)Tableau(i) = Tableau(i + 1)Tableau(i + 1) = CibleValeur = 1End IfNext iLoop While Valeur = 1For i = 0 To UBound(Tableau) 'verification trimsgBox Tableau(i)Next iEnd Sub - Trier une des colonnes d'un tableau multicolonnes
Ce lien n'existe plus - Récupérer dans un tableau uniquement les cellules visibles de la colonne A
Dim Plage As RangeDim Cell As RangeDim i As IntegerDim Tableau() As StringSet Plage = Sheets(1).Range("A1:A" & Range("A65536").End(xlUp).Row)Set Plage = Plage.specialCells(xlCellTypeVisible)reDim Tableau(0 To Plage.Count - 1)For Each Cell In PlageTableau(i) = Celli = i + 1Next - Réinitialiser un tableau
et libèrer de l'espace de stockage réservé aux tableaux dynamiques (infos issues de l'aide VBA Excel )Erase monTableau
Après la réinitialisation :
Chaque élément d'un tableau numérique de taille fixe prend la valeur zéro.
Dim numArray(10) As Integer
Chaque élément d'un tableau de chaînes de taille fixe (longueur variable) accueille une chaîne de valeur nulle ("").
Dim strVarArray(10) As String
Chaque élément d'un tableau de chaînes de taille fixe (longueur fixe) prend la valeur zéro.
Dim strFixArray(10) As String * 10
Chaque élément d'un tableau de type Variant de taille fixe prend la valeur Empty.
Dim varArray(10) As Variant
Chaque élément d'un tableau de types définis par l'utilisateur est défini comme s'il s'agissait d'une variable distincte.
Dim dynamicArray() As Integer
reDim dynamicArray(10)
- Vérifier si un tableau est vide
Dim Tableau() As LongDim x As Variant'...La procédureOn Error Resume Nextx = UBound(Tableau)On Error goTo 0If isEmpty(x) Then msgBox "Le tableau est vide"
- Effectuer une requete Web depuis Excel
Menu DonneesDonnees ExterneNouvelle requete sur le Websaisies l'adresse de la page Htmlselectionnes la ou les zones à importercliques sur le bouton "Importer" - Télécharger un fichier ZIP stocké sur un serveur FTP
- Télécharger une image web : utilisation des requètes winHttp
Sub recupererImageWeb_winHttp()'activer la reference Microsoft winHttp Services ,version 5.1Dim b() As ByteDim h As LongDim oWinHttp1 As winHttp.winHttpRequesth = freeFileOpen "C:\monImage.gif" For Binary As #hSet oWinHttp1 = New winHttp.winHttpRequestoWinHttp1.Open "GET", "Lien supprimé", FalseoWinHttp1.SendoWinHttp1.waitForResponse (30)b() = oWinHttp1.responseBodySet oWinHttp1 = NothingPut #h, 1, b()Close #hEnd Sub - Creer une page html depuis Excel
cet exemple nécéssite d'etre connecté au webLien supprimé - Un autre exemple qui affiche un texte d'information dans une fenetre Internet Explorer
Lien supprimé - Enregistrer chaque onglet d'un classeur dans des pages Html dissociées
Un lien est ajouté dans chaque page pour pouvoir naviguer entre les feuilles
Lien supprimé - Ajouter un raccourci internet dans le dossier des Favoris
Sub ajouterLienInternetDansFavoris()Dim Fichier As String, cheminFavoris As String, siteURL As StringDim Num As IntegercheminFavoris = createObject("WScript.Shell").specialFolders("Favorites") 'récupère le chemin du dossier des FavorisFichier = cheminFavoris & "\XLD Mon forum préféré.url" 'adapter le nom du liensiteURL = "http://www.excel-downloads.com" 'l'adresse de la page internetNum = freeFileOpen Fichier For Output As NumPrint #Num, "[internetShortcut]"Print #Num, "URL=" & siteURLClose NumEnd SubUne autre methode pour ajouter un lien dans les favorisSub ajoutLienFavoris()'necessite d'activer la reference Windows Script Host Object ModelDim xShell As IWshRuntimeLibrary.wshShellDim Raccourci As IWshRuntimeLibrary.WshURLShortcutDim dirBureau As StringSet xShell = createObject("WScript.Shell")dirBureau = xShell.specialFolders("Favorites")Set Raccourci = xShell.createShortcut(dirBureau & "\monLienPréféré.url")Raccourci.targetPath = "http://www.excel-downloads.com"Raccourci.SaveEnd Sub - Récupérer des informations sur des pages Html , et les piloter par macro (utilsation d'un Webbrowser )
Changer le texte dans un bouton , puis appliquer le focus sur ce boutonAfficher des informations générales sur une page html : date de la création de la page , date de la dernière modification , la taille de la pageCompter le nombre d'images d'une page html et lister les adresses , sans doublonsPiloter une page html par macro : Exemple sur le moteur de recherche XLD - Afficher le nom d'une page internet
Sub afficherNomPageInternet()'activer la reference Microsoft Internet ControlsDim IE As internetExplorerSet IE = New internetExplorerIE.Navigate "http://www.excel-downloads.com"Do Until IE.readyState = READYSTATE_COMPLETEdoEventsLoopmsgBox IE.locationNameIE.QuitSet IE = NothingEnd Sub - Lister tous les liens existants dans une page Web
Sub listeLiensPageWeb()'nécéssite d'activer la référence Microsoft HTML Objects Library'nécéssite d'activer la référence Microsoft Internet ControlsDim IE As New internetExplorerDim x As IntegerDim maPageHtml As HTMLDocumentIE.Navigate "http://www.excel-downloads.com"Do Until IE.readyState = READYSTATE_COMPLETEdoEventsLoopSet maPageHtml = IE.DocumentFor x = 0 To maPageHtml.links.Length - 1Cells(x + 1, 1) = maPageHtml.links(x)NextEnd Sub - Boucler sur toutes les images d'une page Web
Private Sub commandButton3_Click()'michelxld le 10.01.2005'boucler sur toutes les images d'une page Web'pour recuperer l'adresse et leurs dimensions'testé avec WinXP & Excel2002'nécéssite d'activer la référence Microsoft HTML Objects Library'nécéssite d'activer la référence Microsoft Internet ControlsDim IE As internetExplorerDim maPageHtml As HTMLDocumentDim imgHtml As HTMLImgDim i As IntegerSet IE = createObject("internetExplorer.Application")IE.Visible = TrueIE.navigate "http://www.excel-downloads.com"Do Until IE.readyState = READYSTATE_COMPLETEdoEventsLoop 'attend la fin du chargement pour continuer la procedureSet maPageHtml = IE.document'compte le nombre d'images dans la pagemsgBox "nombre d'images dans la page : " & maPageHtml.images.LengthFor i = 0 To maPageHtml.images.Length - 1 'boucle sur les imagesSet imgHtml = maPageHtml.images.Item(i)Debug.Print imgHtml.src 'adresse imageDebug.Print imgHtml.Width 'largeur imageDebug.Print imgHtml.Height 'hauteur imageNext iEnd Sub - Piloter les objets d'une page Web : Les listes de choix , les zones de texte et les boutons
Sub piloterPageWeb()'nécéssite d'activer la référence Microsoft HTML Objects Library'nécéssite d'activer la référence Microsoft Internet ControlsDim i As IntegerDim IE As internetExplorerDim maPageHtml As HTMLDocumentDim Helem As IHTMLElementCollectionSet IE = createObject("internetExplorer.Application")IE.Visible = TrueDo Until IE.readyState = READYSTATE_COMPLETEdoEventsLoop 'attend la fin du chargementSet maPageHtml = IE.documentSet Helem = maPageHtml.getElementsByTagName("input")'exemple de boucle pour lister les objets type "select"(listes de choix) dans la page'Dim Hsel As IHTMLElementCollection'Set Hsel = maPageHtml.getElementsByTagName("select")'For i = 0 To Hsel.Length - 1'msgBox Hsel(i).getAttribute("name") & " / " & Hsel(i).getAttribute("value")'Next i'(boucle pour lister les objets type "input" de la page)'For i = 0 To Helem.Length - 1'msgBox Helem(i).getAttribute("name") & " / " & Helem(i).getAttribute("value")'une autre possibilité pour déclencher le clic ( non utilisable dans cet exemple)'If Helem(i).getAttribute("value") = "texte du bouton" Then Helem(i).Click'Next iHelem(7).innerText = "piloter page internet VB" 'champ de saisie mots clésHelem(8).Click 'simulation clicEnd Sub - Accéder à un objet input spécifique
Sub piloterPageHTML()'nécessite d'activer les références'Microsoft HTML Objects Library et Microsoft Internet ControlsDim IE As internetExplorerDim maPageHtml As HTMLDocumentDim Helem As IHTMLElementCollectionDim Hx As IHTMLInputElementSet IE = createObject("internetExplorer.Application")IE.Visible = TrueIE.navigate "http://www.leSite.fr"Do Until IE.readyState = READYSTATE_COMPLETEdoEventsLoop 'attend la fin du chargementSet maPageHtml = IE.documentSet Helem = maPageHtml.getElementsByTagName("input")Set Hx = Helem.Item("number") 'Définit le champ Input contenu dans la pageHx.Value = "07;11;25;27;34" 'Insere les donnéesEnd Sub - Exporter le contenu d'une page internet dans un fichier texte
Sub exporterPageInternetDansfichierTexte()'La source : http://www.excelforum.com//showthread.php?t=335124'necessite d'activer la reference Microsoft Internet ControlsDim IE As internetExplorerDim nFile As IntegerSet IE = createObject("internetExplorer.Application")With IE.Visible = False.Silent = True.Navigate "http://www.excel-downloads.com"Do Until .readyState = READYSTATE_COMPLETEdoEventsLoop 'attend la fin du chargementnFile = freeFileOpen "C:\xldtest.txt" For Output Shared As #nFilePrint #nFile, .Document.documentElement.innerText'Print #nFile, .document.documentElement.innerHTMLClose #nFile.QuitEnd WithSet IE = NothingEnd Sub - Enregistrer une page Html dans un document Word
Sub enregistrerPageHtml_dansWord()Dim wordApp As Word.ApplicationDim wordDoc As Word.DocumentSet wordApp = createObject("word.application")wordApp.Visible = TrueSet wordDoc = wordApp.Documents.Open(Filename:="Ce lien n'existe plus")With wordDoc.pageSetup.Orientation = wdOrientLandscape.saveAs "C:\laSauvegardeWord.doc"End WithEnd Sub - Lister les fenetres Internet Explorer ouvertes
Remarque : les fenetres de l'explorater Windows sont prises en compteSub listerFenetres_IE_Ouvertes()'activer la référence "Microsoft Internet Controls"Dim IE As internetExplorerDim winShell As New shellWindowsOn Error Resume NextFor Each IE In winShellIf IE.LocationURL <> "" Then msgBox IE.LocationURL'IE.Quit 'option pour fermer les fenetresNext IEEnd SubUne autre solution sans avoir besoin de déclarer la librairieSub listerFenetres_IE_Ouvertes_V02()Dim IE As Object, Sh As Object, Wn As ObjectSet Sh = createObject("Shell.Application")Set Wn = Sh.WindowsFor Each IE In WnIf IE.LocationURL <> "" Then msgBox IE.LocationURL'IE.Quit 'option pour les fermerNext IESet Wn = NothingSet Sh = NothingEnd Sub - Récupérer les meta informations d'une page Web ( keyWords , description , title )
- Piloter une liste de choix dans une page Web
- Ouvrir une page IE en plein écran
- Imprimer une page Web
Sub imprimerPageWeb()Dim IE As internetExplorerSet IE = createObject("internetExplorer.Application")IE.Visible = TrueIE.navigate "http://www.mappy.fr"Do Until IE.readyState = READYSTATE_COMPLETEdoEventsLoopIE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSEREnd Sub - Importer des tableaux contenus dans des pages Web vers une feuille Excel
Le lien sur Internet - Utiliser un tableau Excel dans une page Web ( Spreadsheet ) et exporter / sauvegarder le résultat dans un classeur
Lien supprimé - Modifier une page Html par macro
Lien supprimé - Vérifier l'état de la connection au réseau
Voir le message du 26/07/2005 10:41 - Rafraichir une page Web
Sub rafraichirPageWeb()Dim IE As internetExplorerSet IE = createObject("internetExplorer.Application")IE.Visible = TrueIE.navigate "http://www.mappy.fr"Do Until IE.readyState = READYSTATE_COMPLETEdoEventsLoopIE.ExecWB OLECMDID_REFRESH, OLECMDEXECOPT_DONTPROMPTUSEREnd Sub - Changer le titre de la page html
Set IE = createObject("internetExplorer.Application")IE.Visible = TrueIE.navigate "http://www.excel-downloads.com"Do Until IE.readyState = READYSTATE_COMPLETEdoEventsLoopIE.document.Title = "mon site préféré" - Déclencher un lien hypertexte dans une page Html
Sub declencherLienPageWeb()'Lien supprimé'nécéssite d'activer la référence Microsoft HTML Objects Library'nécéssite d'activer la référence Microsoft Internet ControlsDim IE As New internetExplorerDim Cible As HTMLAnchorElementDim Doc As HTMLDocumentIE.Navigate "http://www.excel-downloads.com"IE.Visible = TrueDo Until IE.readyState = READYSTATE_COMPLETEdoEventsLoopSet Doc = IE.DocumentSet Cible = Doc.links(27)Cible.ClickEnd Sub - Créer une page HTML en utilisant le résultat d'une requete ADO
Ce lien n'existe plus - Lister les niveaux de sécurité Internet Explorer
Dim objWMIService As Object, colIESettings As Object, strIESetting As ObjectDim strComputer As StringstrComputer = "."Set objWMIService = getObject("winmgmts:{impersonationLevel=impersonate}!\\" _& strComputer & "\root\cimv2\Applications\MicrosoftIE")Set colIESettings = objWMIService.execQuery("Select * from MicrosoftIE_Security")For Each strIESetting In colIESettingsDebug.Print "Zone : " & strIESetting.ZoneDebug.Print "Niveau de sécurité : " & strIESetting.LevelDebug.Print "---"Next - Ramener une fenêtre Internet Explorer au premier plan
Ce lien n'existe plus - Lister les paramètres de connection Internet
Ce lien n'existe plus - Lister le sommaire des paramètres Internet Explorer
Ce lien n'existe plus
- Jouer et arreter une séquence musicale
Option ExplicitDim Wmp As windowsMediaPlayer'necessite d'activer la reference Windows Media Player'michelxld le 11.05.2005'pour le forum http://www.excel-downloads.comSub jouerMediaPlayer()Set Wmp = createObject("WMPlayer.OCX.7")Wmp.URL = "C:\Documents and Settings\michel\dossier\monFichier.mid"Wmp.Controls.PlayEnd SubSub arreterMediaPlayer()If Wmp Is Nothing Then Exit SubWmp.Controls.stopEnd Sub - Afficher la durée de la séquence musicale en cours
Dim valMin As Double, valSec As Double, S As DoubleSet Wmp = createObject("WMPlayer.OCX.7")Wmp.URL = "C:\monFichier.mp3"While Wmp.playState = 9: doEvents: WendS = Wmp.currentMedia.DurationvalMin = Application.worksheetFunction.roundDown((S / 60), 0)valSec = Application.worksheetFunction.roundDown(S, 0) - (valMin * 60)msgBox Format(valMin, "00") & ":" & Format(valSec, "00") - Comment piloter Windows Media Player Depuis Excel (séquences et Playlist ) :
Vous trouverez dans ce lien un ensemble d'exemples qui montre comment lancer et gérer , une séquence musicale , mais aussi une playList ( plusieurs séquences musicales dans une meme session ) - Modifier le titre d'un séquence
Sub modifierTitreSequence()Dim Xwmp As IWMPMediaDim Chemin As StringChemin = "C:\Documents and Settings\michel\dossier musique"Set Wmp = createObject("WMPlayer.OCX.7")Wmp.currentPlaylist.ClearSet Xwmp = Wmp.newMedia(Chemin & "\leFichierMusical.mid")Wmp.currentPlaylist.insertItem 0, XwmpXwmp.setItemInfo "title", "nom_Du_Titre" 'modifie le titredoEventsWmp.Controls.Play'testé OK avec des fichiers .mid , .wma'à revoir pour les type .mp3msgBox Wmp.currentMedia.getItemInfo("title") 'vérifie le titre modifiéEnd Sub - Retrouver l'index d'une séquence dans une playlist
Dim Pl As IWMPPlaylistDim j As Integer, i As IntegerDim Cible As StringCible = windowsMediaPlayer1.Controls.currentItem.NameSet Pl = windowsMediaPlayer1.currentPlaylistj = Pl.CountIf Not j > 0 Then msgBox "il n'y a pas d'éléments dans la playlist"For i = 0 To j - 1If Cible = Pl.Item(i).Name ThenmsgBox "L'index de la séquence " & Cible & " est : " & iExit ForEnd IfNext i - Compter le nombre de séquences dans la playlist
windowsMediaPlayer1.currentPlaylist.Count - Lire la meme séquence en boucle
windowsMediaPlayer1.URL = "C:\maMusique.mid"windowsMediaPlayer1.Controls.PlaywindowsMediaPlayer1.settings.setMode "loop", True - Ouvrir le lecteur de CD ou de DVD
Dans cet exemple , 0 est l'index du 1er lecteurSub ouvrirLecteur()Dim Wmp As Object, Lecteur As ObjectSet Wmp = createObject("WMPlayer.OCX.7")Set Lecteur = Wmp.cdromCollection.Item(0)Lecteur.ejectEnd Sub - Intercepter le changement de statut d'un objet Windows Media Player inséré dans un Userform
en utilisant l'Evenement "playStateChange"Private Sub windowsMediaPlayer1_playStateChange(byVal newState As Long)If windowsMediaPlayer1.Status = "Arrêté" Then msgBox "terminé"'d'autres exemples de statuts :'Connexion en cours...'Lecture en cours'Opération terminée'Ouvrir le média'Prêt'Arrêté'Modification du média en cours...End Sub - Utiliser Windows Media Player pour afficher un message personnalisé
Ce lien n'existe plus - Afficher ou Masquer la barre de controles de l'objet Windows Media Player .
Dans la propriété uiMode , indiquez la valeur "none" pour masquer la barre de controlesPour afficher la barre de controles , indiquez la valeur "full" - Afficher Windows Media player en plein écran
Windows Media player doit etre en mode "Lecture en cours" pour utiliser cette optionPrivate Sub WMP_playStateChange(byVal newState As Long)If WMP.Status = "Lecture en cours" Then WMP.fullScreen = TrueEnd Sub - Positionner la lecture à un emplacement précis dans la séquence
Private Sub commandButton1_Click()'Chargement fichier & lecturewindowsMediaPlayer1.URL = "C:\maMusique.mp3"'Positionnement à la 3eme minutewindowsMediaPlayer1.Controls.currentPosition = 180 'secondesEnd Sub
- Afficher la boite de dialogue Windows "Arreter l'ordinateur"
Public Declare Function SHShutDownDialog Lib "shell32" Alias "#60" _(Byval Yourguess As Long) As Long'testé avec WinXPSub afficherFenetreArreterOrdinateur()SHShutDownDialog 1End Sub - Vérifier s'il y a un CD dans le lecteur
Sub testPresenceCD()On Error goTo FinDir "D:\." 'adapter nom LecteurMsgbox "il y a un CD dans lecteur D ."Exit SubFin:If Err = 52 Then Msgbox "il n'y a Pas de CD dans lecteur D ."End Sub - Afficher le Label d'un CDRom
Sub afficherLabelCDRom()Dim Lecteur As StringDim Fs As Object, D As ObjectLecteur = "D:\" 'adapter la lettre du lecteurSet Fs = createObject("Scripting.fileSystemObject")If Fs.driveExists(Lecteur) = True ThenSet D = Fs.getDrive(Lecteur)If D.driveType = 4 Then '4="CDROM"Set D = Fs.getDrive(Fs.getDriveName(Lecteur))If (D.isReady) Then msgBox D.volumeNameEnd IfEnd IfEnd Sub - Retour sur le bureau , Minimiser toutes les applications
Sub minimizerToutesLesApplications()Dim WSHshell As Object, Shell As ObjectSet WSHshell = createObject("WScript.Shell")Set Shell = createObject("Shell.Application")Shell.minimizeAllEnd Sub - Maximaliser toutes les applications
Sub maximaliserToutesLesApplications()Dim WSHshell As Object, Shell As ObjectSet WSHshell = createObject("WScript.Shell")Set Shell = createObject("Shell.Application")Shell.undoMinimizeAllEnd Sub - Afficher quelques boites de dialogue Windows
Sub afficherFenetresWinows()'necessite d'activer reference Microsoft Shell Controls and AutomationDim objShell As ShellSet objShell = New ShellobjShell.controlPanelItem ("mmsys.cpl") 'Proprietes Sons Et Peripheriques Audio'objShell.controlPanelItem ("desk.cpl")'fenetre Proprietes Affichage Windows'objShell.controlPanelItem ("appwiz.cpl") 'fenetre Proprietes Sons Et Peripheriques Audio'objShell.controlPanelItem ("timedate.cpl") 'fenetre Proprietes de dates et heures'objShell.controlPanelItem ("sysdm.cpl") 'fenetre Proprietes systeme'objShell.controlPanelItem ("main.cpl") 'fenetre Proprietes de la souris'objShell.controlPanelItem ("intl.cpl") 'fenetre options regionales et linguistiques'objShell.fileRun 'boite de dialogue ExecutionEnd Sub - Afficher la boite de dialogue Observateur d'evenements
Sub observateurEvenements()Dim objShell As ObjectDim Machine As StringDim retVal As LongMachine = "."Set objShell = createObject("wscript.shell")retVal = objShell.Run("eventvwr.exe " & Machine & " C:\Windows\system32", 1, True)End Sub - Ouvrir l'explorateur Windows sur un répertoire precis
Sub ouvrirExplorateurWindows()'necessite d'activer reference Microsoft Shell Controls and AutomationDim objShell As ShellSet objShell = New ShellobjShell.Explore ("C:\Documents and Settings\michel\dossier\general\excel")End Sub - positionner le curseur de la souris à un endroit précis sur l'écran
Declare Function SetCursorPos Lib "user32" _(byVal x As Long, byVal y As Long) As LongSub positionCurseur()SetCursorPos 100, 200End Sub - Utiliser l'API getCursorPos pour récupérer la position du curseur de la souris à l'écran
- Afficher le nom du PC
- Récupérer quelques informations sur votre PC
le nom du PCle systeme utiliséles noms et types de lecteurs ( avec le numéro de serie et l'espace libre pour les disques durs )la résolution de l'écranla mémoire physique totale et librela liste des imprimantes installées et l'imprimante activela version d'Excel et de VBEles processeursl'utilisateurl'adresse IP - Afficher des informations sur un excecutable
le nom de l'éditeurla description du programmela version du fichierle nom internele copyrightle nom de l'applicationle nom du produitla version du produitLien supprimé - Afficher la version d'une application
Sub versionApplication()Dim Fso As ObjectSet Fso = createObject("Scripting.fileSystemObject")msgBox Fso.getFileVersion("C:\WINDOWS\system32\calc.exe")End Sub - Changer l'image de fond d'écran du bureau , depuis Excel
Private Declare Function SystemParametersInfo Lib _"user32" Alias "SystemParametersInfoA" _(byVal uAction As Long, byVal uParam As Long, byVal lpvParam As Any, _byVal fuWinIni As Long) As LongPrivate Const SPI_SETDESKWALLPAPER = 20Sub changerFondEcran()'testé avec Excel2002 et WinXPDim retVal As LongDim Fichier As StringFichier = "C:\WINDOWS\Plume.bmp" 'adapter le chemin du fichierretVal = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Fichier, 0)End Sub - Afficher la boite de dialogue pour régler le son du PC
Sub reglageSonPC()Dim retVal As LongretVal = Shell("sndvol32 /t")End Sub - Controler la présence d'une carte son sur le poste de travail
Declare Function waveOutGetNumDevs Lib "winmm" () As LongSub controlePresenceCarteSon()Dim i As Longi = waveOutGetNumDevs()If i > 0 Then msgBox "Il y a une carte son sur votre poste . "End Sub - XLD Music Player , un lecteur de CD audio pour Excel , à partir de la version 2000
Lien supprimé - Afficher la durée des fichiers WMV , AVI , WAV , MP3
- Récupérer le ProcessID d'une fenetre spécifique
- Enregistrer dans un fichier texte les propriétés des périphériques USB
Sub listerProprietes_peripheriqueUsb()'adapté de http://www.vbcode.com/%%% 'enregistre les proprietes des peripheriques USB'dans un fichier Texte ( dans le meme repertoire que ce classeur )'testé avec WinXP et Excel2002Dim objWMIService As Object, objItem As Object, colItems As ObjectDim nomPC As StringDim Fichier As StringnomPC = "."Fichier = thisWorkbook.Path & "\Propriétés_USB.Txt"Open Fichier For Output As #1Set objWMIService = getObject("winmgmts:\\" & nomPC & "\root\cimv2")Set colItems = objWMIService.execQuery("Select * from Win32_USBController", , 48)For Each objItem In colItemsPrint #1, ""Print #1, "Availability: " & objItem.AvailabilityPrint #1, "Caption: " & objItem.CaptionPrint #1, "configManagerErrorCode: " & objItem.configManagerErrorCodePrint #1, "configManagerUserConfig: " & objItem.configManagerUserConfigPrint #1, "creationClassName: " & objItem.creationClassNamePrint #1, "Description: " & objItem.DescriptionPrint #1, "DeviceID: " & objItem.DeviceIDPrint #1, "errorCleared: " & objItem.errorClearedPrint #1, "errorDescription: " & objItem.errorDescriptionPrint #1, "installDate: " & objItem.installDatePrint #1, "lastErrorCode: " & objItem.lastErrorCodePrint #1, "Manufacturer: " & objItem.ManufacturerPrint #1, "maxNumberControlled: " & objItem.maxNumberControlledPrint #1, "Name: " & objItem.NamePrint #1, "PNPDeviceID: " & objItem.PNPDeviceIDPrint #1, "powerManagementCapabilities: " & objItem.powerManagementCapabilitiesPrint #1, "powerManagementSupported: " & objItem.powerManagementSupportedPrint #1, "protocolSupported: " & objItem.protocolSupportedPrint #1, "Status: " & objItem.StatusPrint #1, "statusInfo: " & objItem.statusInfoPrint #1, "systemCreationClassName: " & objItem.systemCreationClassNamePrint #1, "systemName: " & objItem.systemNamePrint #1, "timeOfLastReset: " & objItem.timeOfLastResetPrint #1, ""Print #1, ""NextCloseEnd Sub - Afficher certaines boites de dialogue du systeme d'exploitation, en utilisant le fonction Shell
'Afficher le panneau de configurationCall Shell("rundll32.exe shell32.dll,Control_RunDLL", vbNormalFocus)'Afficher la boite de dialogue des options régionalesCall Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl")'Afficher la boite de dialogue "propriétés de la souris"Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @0", vbNormalFocus)'Afficher la boite de dialogue "propriétés d'affichage" BureauCall Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0", vbNormalFocus)'Afficher la boite de dialogue "propriétés d'affichage" Ecran de veilleCall Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1", vbNormalFocus)'Afficher la boite de dialogue "propriétés d'affichage" ApparenceCall Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2", vbNormalFocus)'Afficher la boite de dialogue "propriétés d'affichage" ParametresCall Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3", vbNormalFocus)'Afficher la boite de dialogue Options d'accessibilitéCall Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl", vbNormalFocus)'Afficher la boite de dialogue Ajout et supression de programmesCall Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl", vbNormalFocus)'Afficher la boite de dialogue Propriétés InternetCall Shell("rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl", vbNormalFocus)'Afficher la boite de dialogue Controleur de jeuxCall Shell("rundll32.exe shell32.dll,Control_RunDLL joy.cpl", vbNormalFocus)'Afficher la boite de dialogue Propriétés du clavierCall Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @1", vbNormalFocus)'Afficher la boite de dialogue Propriétés de sons et peripheriques audioCall Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl", vbNormalFocus)'Afficher la boite de dialogue Options de modes et telephonieCall Shell("rundll32.exe shell32.dll,Control_RunDLL modem.cpl", vbNormalFocus)'Propriétés du systemeCall Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl", vbNormalFocus)'Propriétés de Date et HeureCall Shell("rundll32.exe shell32.dll,Control_RunDLL timedate.cpl", vbNormalFocus) - Récuperer le code couleur à l'emplacement du curseur de la souris
Une des macros du classeur permet aussi de récupérer la couleur de fond du bureauLien supprimé - Fermer Windows et redémarrer le PC
une démo par EMGune démo par Verilanddes infos complémentaires de @+Thierry pour Windows2000 - Creer un raccourci sur le bureau , pour le classeur contenant cette macro
Sub creerRaccourciBureau()'necessite d'activer la reference Windows Script Host Object ModelDim xShell As IWshRuntimeLibrary.wshShellDim Raccourci As IWshRuntimeLibrary.wshShortcutDim dirBureau As StringSet xShell = createObject("WScript.Shell")dirBureau = xShell.specialFolders("Desktop")Set Raccourci = xShell.createShortcut(dirBureau & "\monFichier.lnk")Raccourci.targetPath = thisWorkbook.fullNameRaccourci.windowStyle = 1Raccourci.iconLocation = "C:\dating.ico" 'attribuer un icôneRaccourci.SaveEnd Sub - Vider le répertoire des documents recemment utilisés
Declare Sub SHAddToRecentDocs Lib "shell32.dll" (byVal uFlags As Long, _byVal pv As String)Sub viderMenuDocumentsRecents()'C:\Documents and Settings\michel\RecentSHAddToRecentDocs 2, vbNullStringEnd Sub - Capturer les images perçues par une webCam
Lien suppriméUn autre exemple qui permet de visionner ce que voit la webCam , en temps réelLien supprimé - Lister des informations sur les raccourcis du bureau
- Boucler sur les raccourcis du bureau et le lancer si un nom est retrouvé
(ACDSee.exe dans l'exemple )Sub lancerRaccourciBureau()'michelxld le 15.04.2005'necessite d'activer la reference Microsoft Shell Controls and AutomationConst Cible = &H10 'DesktopDim objShell As Shell32.ShellDim objFolder As Shell32.FolderDim colItems As Shell32.folderItemsDim objItem As Shell32.folderItemDim Longueur As Integer, i As IntegerSet objShell = createObject("Shell.Application")Set objFolder = objShell.nameSpace(Cible)Set colItems = objFolder.ItemsFor Each objItem In colItemsIf objItem.isLink ThenLongueur = Len(objItem.getLink.Path)i = LongueurWhile Mid(objItem.getLink.Path, i, 1) <> "\"i = i - 1WendIf Mid(objItem.getLink.Path, i + 1, Longueur - i) = "ACDSee.exe" _Then objItem.invokeVerbEnd IfNextEnd Sub - Sélectionner des fichiers et les copier dans un autre répertoire
- Créer un fichier Wave à partir d'Excel
Lien supprimé - Lister et afficher quelques informations sur les disques amovibles connectés au poste de travail
Sub listeLecteursAmovible()Dim FSO As Scripting.fileSystemObjectDim Drv As Scripting.DriveSet FSO = createObject("Scripting.fileSystemObject")For Each Drv In FSO.DrivesIf Drv.driveType = 1 Then _msgBox "le support " & Drv.driveLetter & " est pret : " & Drv.isReady & vbLf _& "espace libre : " & Format(Drv.freeSpace, "#,##0") & " octets "NextEnd Sub - Envoyer un fichier dans la corbeille
- Afficher la taille des fichiers contenus dans la Corbeille
Sub tailleElementsCorbeille()Dim objShell As Object, objFolder As Object, colItems As Object, objItem As ObjectDim tailleGDO As StringDim taille As Long, Resultat As LongConst Cible = &HA&Set objShell = createObject("Shell.Application")Set objFolder = objShell.Namespace(Cible)Set colItems = objFolder.ItemsFor Each objItem In colItemstailleGDO = objFolder.getDetailsOf(objItem, 3)Resultat = Resultat + CLng(Val(tailleGDO))NextmsgBox Resultat & " kb"End Sub - Lister les types de lecteurs du PC et verifier s'ils sont disponibles
Sub listeLecteurs()Dim FSO As Object, Drv As ObjectSet FSO = createObject("Scripting.fileSystemObject")For Each Drv In FSO.DrivesmsgBox "le support " & Drv.driveLetter & " (" & _typeLecteur(Drv.drivetype) & ") est pret : " & Drv.isReadyNextEnd SubFunction typeLecteur(Dv As Byte) As StringSelect Case DvCase 0: typeLecteur = "inconnu"Case 1: typeLecteur = "disque amovible"Case 2: typeLecteur = "disque dur"Case 3: typeLecteur = "disque réseau"Case 4: typeLecteur = "CDRom"Case 5: typeLecteur = "disque virtuel"End SelectEnd Function - Récupérer le numéro de série des lecteurs ( clés USB comprises )
Sub numerosSerieLecteurs()Dim FSO As Object, Drv As ObjectOn Error Resume NextSet FSO = createObject("Scripting.fileSystemObject")For Each Drv In FSO.DrivesmsgBox Drv.driveletter & vbLf & "numero de serie :" & _Abs(FSO.getDrive(Drv.driveletter & ":").serialNumber)NextEnd Sub - La fonction Environ our récupérer des informations sur le systeme d'exploitation
Dim i As ByteFor i = 1 To 50Cells(i, 1) = Environ(i)Next i - Récupérer le nom de l'ordinateur
- Récupérer la date d'installation de Windows (testé avec WinXP)
For Each i In _getObject("winmgmts:{impersonationLevel=impersonate}").execQuery("Select installDate, currentTimeZone From Win32_operatingSystem")With createObject("wbemScripting.SWbemDateTime").Value = i.installDatemsgBox dateAdd("n", -i.currentTimeZone, .getVarDate)End WithNext - Lister tout les Patchs (Hotfixs) installés sur le poste
Sub listePatchs()Dim strComputer As StringDim objWMIService As Object, objQuickFix As Object, colQuickFixes As Object'Source : http://microsoft.supinfo.com/scripts/17341/strComputer = "."Set objWMIService = getObject("winmgmts:" _& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")Set colQuickFixes = objWMIService.execQuery("Select * from Win32_quickFixEngineering")For Each objQuickFix In colQuickFixesDebug.Print "Computer: " & objQuickFix.CSNameDebug.Print "Description: " & objQuickFix.DescriptionDebug.Print "Hot Fix ID: " & objQuickFix.hotFixIDDebug.Print "Installation Date: " & objQuickFix.installDateDebug.Print "Installed By: " & objQuickFix.installedByNextEnd Sub - Vérifier si vous etes l'administrateur du poste
Private Declare Function IsNTAdmin Lib "advpack.dll" _(byVal dwReserved As Long, byRef lpdwReserved As Long) As LongSub administrateurPC()msgBox CBool(IsNTAdmin(byVal 0&, byVal 0&))End Sub - Récupérer des informations sur les comptes utilisateurs
Sub Win32_Account_testExcel()Dim Fso As Object, Rapport As ObjectDim wmObj As Object, Test As ObjectDim Valeur As Object, Ws As ObjectOn Error Resume NextSet Fso = createObject("Scripting.fileSystemObject")Set Rapport = Fso.openTextFile("C:\rapport.txt", 2, True)Set wmObj = getObject("winMgmts:{impersonationLevel=impersonate}")Set Test = wmObj.execQuery("Select * from win32_Account")For Each Valeur In TestRapport.writeLine ("Nom : " & Valeur.name)Rapport.writeLine ("Description : " & Valeur.Description)Rapport.writeLine ("Domaines : " & Valeur.Domain)Rapport.writeLine ("SID : " & Valeur.SID)Rapport.writeLine ("------------------------------")NextSet Ws = createObject("WScript.Shell")activeWorkbook.followHyperlink Address:="C:\rapport.txt"End Sub - Récupérer le nom du serveur en fonction de la lettre attribuée
Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" _(byVal lpszLocalName As String, byVal lpszRemoteName As String, byRef cbRemoteName As Long) As LongSub equivalence_Lettre_nomServeur()Dim Lettre As StringDim remName As String * 255remName = String$(255, Chr$(32))Lettre = "J:"WNetGetConnection Lettre, remName, 255msgBox Trim(remName)End Sub - Lister les commandes qui démarrent automatiquement lors de l'ouverture d'une session
Sub listerCommandesDemarrage()Dim strComputer As StringDim objWMIService As Object, colStartupCommands As Object, objStartupCommand As ObjectstrComputer = "."Set objWMIService = getObject("winmgmts:\\" & strComputer & "\root\cimv2")Set colStartupCommands = objWMIService.execQuery("Select * from Win32_startupCommand")For Each objStartupCommand In colStartupCommandsDebug.Print "Command: " & objStartupCommand.CommandDebug.Print "Description: " & objStartupCommand.DescriptionDebug.Print "Location: " & objStartupCommand.LocationDebug.Print "Name: " & objStartupCommand.NameDebug.Print "User: " & objStartupCommand.UserDebug.Print "---------------"NextEnd Sub - Déterminer le statut des ports
Sub listerStatutsPorts()Dim Cmd As StringDim retVal As LongCmd = Environ("COMSPEC") & " /C "retVal = Shell(Cmd & "NETSTAT -na> C:\listePorts.txt")doEventsthisWorkbook.followHyperlink "C:\listePorts.txt"End Sub - Lister les logiciels installés depuis Windows Installer
Sub Test()'source :'Ce lien n'existe plusDim objWMIService As ObjectDim colSoftware As Object, objSoftware As ObjectDim strComputer As StringstrComputer = "."Set objWMIService = getObject("winmgmts:{impersonationLevel=impersonate}!\\" & _strComputer & "\root\cimv2")Set colSoftware = objWMIService.execQuery("Select * from Win32_Product")For Each objSoftware In colSoftwareDebug.Print "Caption : " & objSoftware.CaptionDebug.Print "Description : " & objSoftware.DescriptionDebug.Print "identifyingNumber : " & objSoftware.identifyingNumberDebug.Print "installDate2 : " & objSoftware.installDate2Debug.Print "installLocation : " & objSoftware.installLocationDebug.Print "installState : " & objSoftware.installStateDebug.Print "Name : " & objSoftware.NameDebug.Print "packageCache : " & objSoftware.packageCacheDebug.Print "SKUNumber : " & objSoftware.SKUNumberDebug.Print "Vendor : " & objSoftware.VendorDebug.Print "Version : " & objSoftware.VersionDebug.Print " "Debug.Print "-----"NextEnd Sub - Lister les points de restauration de votre systeme (XP)
Sub listerPointsDeRestauration()Dim objWMIService As Object, colItems As Object, objItem As ObjectDim strComputer As String, strRestoreType As StringstrComputer = "."Set objWMIService = getObject("winmgmts:" _& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default")Set colItems = objWMIService.execQuery("Select * from systemRestore")If colItems.Count = 0 ThenExit SubElseFor Each objItem In colItemsDebug.Print "Name: " & objItem.DescriptionDebug.Print "Number: " & objItem.sequenceNumberSelect Case objItem.restorePointTypeCase 0: strRestoreType = "Application installation"Case 1: strRestoreType = "Application uninstall"Case 6: strRestoreType = "Restore"Case 7: strRestoreType = "checkpoint"Case 10: strRestoreType = "Device drive installation"Case 11: strRestoreType = "First run"Case 12: strRestoreType = "Modify settings"Case 13: strRestoreType = "Cancelled operation"Case 14: strRestoreType = "Backup recovery"Case Else: strRestoreType = "Unknown"End SelectDebug.Print "Restore Point Type: " & strRestoreTypeDebug.Print "Time: " & objItem.creationTimeDebug.Print "---"NextEnd IfEnd Sub
Ce lien n'existe plus
Lien supprimé
Les différents types de boucles- For Each Next
Cette instruction permet de boucler sur tous les éléments d'une collection .Une collection peut etre :l'ensemble des feuilles d'un classeurl'ensemble des cellules d'une plagel'ensemble des graphiques d'une feuille...etc…Dans cet exemple , la procédure boucle sur toutes les cellules de la plage A1:A10 et affiche un message si le mot "XLD" est trouvéSub rechercheDansPlageCellules()Dim Cell As RangeFor Each Cell In Range("A1:A10")If Cell = "XLD" ThenmsgBox "trouvé ! "Exit ForEnd IfNext CellEnd SubRemarque :lorsque les temps de calculs sont longs , il peut etre utile de sortir avant la fin de la boucle , en utilisant l'instruction Exit For(Dans l'exemple ci dessus , on sort de la boucle dès que le mot "XLD" est trouvé ) - For To Step Next
Permet de répéter une action , le nombre de fois défini par la boucleUn exemple pour insérer des données dans la plage de cellules A1:A100Sub Boucle01()Dim i As ByteFor i = 1 To 100Cells(i, 1) = "XLD" & iNext iEnd SubRemarque :il est aussi possible d'utiliser l'instruction Exit For pour sortir de ce type de boucleL'argument Step permet de définir la fréquence de l'action dans la boucle :Par défaut , Step = 1 si l'argument n'est pas précisé .le meme exemple que précédemment , mais en insérant des données dans 1 cellule sur 5 ( Step = 5 )Sub Boucle02()Dim i As ByteFor i = 1 To 100 Step 5Cells(i, 1) = "XLD" & iNext iEnd SubL'argument Step peut aussi etre négatif ( Step = -1 )Un exemple qui boucle sur la plage A1:A100 , en commençant par la dernière cellule , pour supprimer la ligne si la cellule est videSub Boucle03()Dim i As IntegerFor i = 100 To 1 Step -1If Cells(i, 1) = "" Then Rows(i).DeleteNext iEnd Sub - Do Loop
Dans ce premier exemple , la procédure boucle sur toutes les cellules de la plage A1:A10 et affiche un message si le mot "XLD" est trouvéSub Boucle04()Dim i As ByteDo While i < 10i = i + 1If Cells(i, 1) = "XLD" ThenmsgBox "trouvé ! "Exit DoEnd IfLoopEnd SubRemarque :lorsque les temps de calculs sont longs , il peut etre utile de sortir avant la fin de la boucle , en utilisant l'instruction Exit Do(Dans l'exemple ci dessus , on sort de la boucle dès que le mot recherché est trouvé )Un autre exemple de boucle sur les cellules de la colonne A jusqu'à ce que la donnée "XLD" soit trouvéeutilisation de la condition Until ( jusqu'à ce que la cellule soit égale à "XLD" )Sub Boucle05()Dim i As ByteDoi = i + 1If Cells(i, 1) = "XLD" ThenmsgBox "trouvé ! "End IfLoop Until Cells(i, 1) = "XLD"End SubLe meme exemple , mais avec l'utilisation de la condition While ( boucle tant que la cellule est différente de "XLD" )Sub Boucle06()Dim i As ByteDoi = i + 1If Cells(i, 1) = "XLD" ThenmsgBox "trouvé ! "End IfLoop While Cells(i, 1) <> "XLD"End SubAttention , pour ces 2 derniers exemples il faut etre sur d'avoir au moins une cellule qui répond à la condition ="XLD" , sinon vous allez créer une boucle infinie.Remarque :Les macros présentées dans ce chapitre servent simplement à visualiser la logique de fonctionnement , pour les différents types de boucles .Si vous souhaitez obtenir des exemples plus détaillés , ou d'autres méthodes de requète sans utiliser de boucle ( nottament pour effectuer des recherches dans les feuilles ) , consultez le chapitre "Les recherches dans un classeur" .
Toutes vos idees sont les bienvenues .
Michel , Mise à jour le 15 Septembre 2006
Dernière modification par un modérateur: