FAQ VBScriptConsultez toutes les FAQ
Nombre d'auteurs : 16, nombre de questions : 108, dernière mise à jour : 2 mars 2019 Ajouter une question
Cette FAQ VB Script est le fruit de la collaboration de l'équipe de rédaction et des membres du forum VB.
Aidez-nous à faire vivre cette FAQ en participant au forum Vos contributions VBScript.
Pour toutes questions ou tous problèmes concernant cette FAQ, vous pouvez contacter par MP ThierryAIM ou bbil.
L'équipe de rédaction de Developpez.com vous remercie pour votre participation passée et à venir.
- Comment piloter Excel pour créer un classeur.xls ?
- Comment piloter Internet Explorer pour envoyer des informations à un site internet ?
- Comment verrouiller la session Windows courante ?
- Comment lister les actions possibles sur un fichier ?
- Comment imprimer tous les fichiers .pdf d'un dossier ?
- Comment inscrire / désinscrire une ou plusieurs DLL ( et/ou OCX) dans la BDR ?
- Comment associer une icône permanente à un fichier HTA
- Comment lancer un fichier Excel xlsm, toutes les X heures ?
- Comment passer d'un code VBA Excel vers un code VBS ?
Il faut utiliser un objet Excel.Application
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | Dim xlapp, classeur, feuille Set xlapp = CreateObject("Excel.Application") xlapp.Visible = True Set classeur = xlapp.Workbooks.add Set feuille = xlapp.ActiveSheet feuille.Range("A1") = "Rajout du texte en cellule A1" Classeur.Saveas "c:\tmp\MonClasseur" classeur.Close True 'quitte en sauvant xlApp.quit Set classeur = Nothing Set xlapp = Nothing |
Avec l'objet InternetExplorer.Application
Exemple pour la connexion au forum développez.com
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | Dim IE Set IE = Wscript.CreateObject("InternetExplorer.Application") IE.Visible = 1 IE.navigate "http://www.developpez.net/forums/login.php" Do While (IE.Busy) WScript.Sleep 10 Loop Set Helem = IE.document.getElementById("vb_login_username") Helem.Value = "NomUtilisateur" Set Helem = IE.document.getElementById("vb_login_password") Helem.Value = "MotDePasse" Set Helem = IE.document.Forms(0) Helem.Submit |
Pour retourner à l'écran d'accueil de Windows XP (où Vista) de la même façon que lors de l'action simultanée sur
les touches Windows et L, on peut faire un appel à la fonction LockWorkStation de User32.dll grâce à "l'utilitaire" rundll32.exe, ce qui donne:
Code vb : | Sélectionner tout |
1 2 | Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "rundll32.exe user32.dll,LockWorkStation" |
En utilisant la propriété Name de la classe FolderItemVerbs découlant de Shell.Application
' Il est utile de connaître ces actions si on veut manipuler un fichier par exemple : "Ouvrir" (Open par défaut),"Copier, coller, Imprimer, supprimer ... et ce en utilisant la méthode InvokVerb ou InvokVerbEx
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 | Set oShell = CreateObject("Shell.Application") Set oFolder = oShell.NameSpace("c:\tmp") Set oFolderItem = oFolder.ParseName("microsoft.jpg") For Each oVerb In oFolderItem.Verbs If oVerb<>"" Then WScript.Echo oVerb Next |
En utilisant un appel à Shell.Application :
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 | Set objShell = CreateObject("Shell.Application") 'Référence à Shell32.dll Set objFolder = objShell.Namespace("c:\temp\") Set colItems = objFolder.Items For Each objItem in colItems If Ucase(Right(ObjItem.Name,4))=".PDF" then objItem.InvokeVerbEx("Print") End If Next |
Bien entendu cela impose la présence d'une application (Acrobat Reader...) gérant les .pdf.
En utilisant la propriété Arguments de WScript et Regsvr32.exe.
Il est à noter qu'il faut enregistrer le code suivant dans un fichier (RegOcxDll.vbs par exemple), fermer le fichier puis faire un glisser/déposer du(des) fichier(s)(DLL ou OCX) à inscrire dans la base du registre Windows sur l'icône du fichier vbs qu'on vient de créer.
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Option Explicit Dim fso, WS, CM, Fich, Ind Set fso = CreateObject("Scripting.FileSystemObject") Set WS = CreateObject("Wscript.Shell") For Ind = 0 To Wscript.Arguments.Count - 1 Fich = fso.GetFile(Wscript.Arguments(Ind)).ShortPath If Ucase(Right(Fich,4)) = ".OCX" Or Ucase(Right(Fich,4)) = ".DLL" Then cm = "Regsvr32.exe " & Fich WS.Run CM,0,False Else MsgBox "Ce type de fichier [" & UCase(fso.GetFile(Wscript.Arguments(Ind)).Name) _ & "] n'est pas pris en charge !", VbInformation End If Next |
Pour désinscrire un ou plusieurs fichiers la ligne CM = "Regsvr32.exe " & Fich devient CM = "Regsvr32.exe /u " & Fich.
D'habitude, l'icône du fichier hta est déclarée dans l'en-tête(entre les balises <HEAD> </HEAD>; et là on doit renseigner l'entrée ICON="Chemin_du_fichier.ico" par exemple. Mais il suffit de changer le nom ou l'emplacement du fichier et on n'a plus d'icône.
L'astuce pour une icône permanente est :
1 - Créer le fichier HTA le plus simple tel que
Code HTML : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <HTML> <HEAD> <SCRIPT> document.write( '<HTA:APPLICATION ID="objHTAwithIco" APPLICATIONNAME="MyFirstApp" ICON="#">'); </SCRIPT> </HEAD> <BODY SCROLL="no"> <font style="color:red;font-size:26;"> <b><i> AVEZ-VOUS REMARQUÉ L'ICÔNE DE LA BARRE DE TITRES ?</i></b> </font> </BODY> </HTML> |
3 - Placer un fichier icône par exemple hta.ico dans le même dossier que le fichier hta créé.
4 - Créer un fichier texte contenant
Code : | Sélectionner tout |
Copy /B hta.ico /B +Exemple.hta Resultat.hta /B
5 - Lancer ensuite le fichier produit(Resultat.hta) et là on voit l'icône dans la barre de titres.
On peut utiliser directement cdm.exe en se plaçant dans le dossier contenant les fichiers sources.
Remarque importante : L'ordre de copie est très important => L'icône d'abord le fichier hta ensuite.
Une boucle infinie(tant que le PC tourne ou la session n'est pas fermée) ferait l'affaire
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Option Explicit Dim Fich, tm, OK, XL, wb, Interval Fich = "C:\MonFichier.xlsm" Interval = "n" ' n pour minute, h pour heure, s pour seconde, d pour jour .... Duree = 1 ' Mettre ici la valeur voulue tm = Minute(Now) ' remplacer Minute(Now) dans tout le code par Hour(Now) pour les heures Do OK = Abs(DateDiff(Interval, tm, Minute(Now))) >= Duree If OK Then Set XL = CreateObject("Excel.Application") XL.DisplayAlerts = False XL.Visible = True Set wb = XL.Workbooks.Open(Fich) tm = tm + 1 End If Loop |
Le lien du bouton Accepter n'étant pas correctement redirigé, je répond alors à la demande comme s'il s'agissait d'une autre entrée dans la FAQ VBScript :
Code vb : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | ' Il faut initialiser Excel, définir les objets à utiliser et ouvrir ' le fichier à traiter. ' Certains éléments ne sont disponibles que par affectation. ' Les objets créés seront disponibles dans chaque Sub. Set oXL = CreateObject("Excel.Application") oXL.Visible = True Set wBook = oXl.Workbooks.Open("C:\Src.xls") Set Sheets = wBook.Sheets Set Worksheets = wBook.Worksheets Set Sel = oXL.Selection ' ou bien utiliser directement "oXL.Selection" comme dans ' la Sub "Combine" '============================ Sub Multiplie() Dim I, J, Tablo, DerLigne Sheets("feuil2").Cells.ClearContents With Sheets("Feuil1") .Range("A1:IV1").Copy Sheets("Feuil2").Range("A1") DerLigne = 2 For I = 2 To .Range("C65536").End(xlUp).Row Tablo = Split(.Range("C" & I).Value, ";") For J = LBound(Tablo) To UBound(Tablo) .Range("A" & I & ":IV" & I).Copy Sheets("Feuil2").Range("A" & DerLigne) Sheets("Feuil2").Range("C" & DerLigne).Value = Tablo(J) DerLigne = DerLigne + 1 Next 'J Next 'I End With End Sub '============================ Sub supAlias() Worksheets("Feuil1").Range("C2:C65536").ClearContents End Sub '============================ Sub Combine() Dim J 'As Integer On Error Resume Next Sheets(1).Select Worksheets.Add Sheets(1).Name = "Feuil1" Sheets(2).Activate Sheets(2).Range("A1").EntireRow.Select ' Ajout de "Sheets(2)." oXL.Selection.Copy Sheets(1).Range("A1") For J = 2 To Sheets.Count Sheets(J).Activate Sheets(J).Range("A1").Select ' Ajout de "Sheets(J)." oXL.Selection.CurrentRegion.Select oXL.Selection.Offset(1, 0).Resize(oXL.Selection.Rows.Count - 1).Select oXL.Selection.Copy Sheets(1).Range("A65536").End(xlUp)(2) Next End Sub '=============================== Sub ExtractionLiensHypertextes() Dim Rng 'As Range On Error Resume Next For Each Rng In Worksheets("Feuil3").Range("I1:I" & Range("I65536").End(xlUp).Row) Rng.Offset(0, 1) = Rng.Hyperlinks(1).Address Next 'Rng End Sub '================================ Sub supprimecolonne() Worksheets("Feuil1").Columns("D:F").Delete Worksheets("Feuil1").Columns("J:J").Delete End Sub |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.