infodes
Messages postés49Date d'inscriptionmardi 26 novembre 2013StatutMembreDernière intervention15 avril 2021
-
Modifié par noctambule28 le 27/10/2014 à 19:11
infodes -
18 sept. 2014 à 13:00
Bonjour, j'ai fait une macro qui fonctionne en VBA mais pas dans Visual Basic 2010. Ça bloque sur l'Instruction "instrrev". Je suis débutant en VB donc je ne comprend pas pourquoi ça ne fonctionne pas.
voici mon code:
Public Class Form1
Private Sub LinkLabel1_LinkClicked(sender As System.Object, e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
MsgBox("XXXXXXXXXXXX!", MsgBoxStyle.Exclamation)
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
TousLesDossiers("C:\Users\XXXXX\Documents\test", 0)
End Sub
Sub TousLesDossiers(LeDossier$, Idx As Long)
Dim fso As Object, Dossier As Object
Dim sousRep As Object, Flder As Object
Dim Chemin As String
Dim Fichier As String
Dim Extention As String
Dim f2 As Object
Dim Ret
fso = CreateObject("Scripting.FileSystemObject")
Dossier = fso.GetFolder(LeDossier)
'examen du dossier courant
For Each Flder In Dossier.SubFolders
'compte le nbre de dossier
Idx = Idx + 1
Chemin = Flder.Path & ""
Next
'donne l'extention du fichier
'traitement récursif des sous dossiers
For Each sousRep In Dossier.SubFolders
For Each f2 In sousRep.Files
Extention = Mid(f2, InStrRev(f2, ".") + 1)
If Extention = "pdf" Then
'récupère le onm du fichier seulement
Fichier = f2.Name
Extention = Mid(Fichier, InStrRev(Fichier, ".") + 1)
Ret = Shell("C:\Program Files (x86)\adobe\reader 11.0\reader\acrord32.exe " & Chemin & Fichier, 1)
Else
End If
Next f2
TousLesDossiers(sousRep.Path, Idx)
Next sousRep
fso = Nothing
End Sub
End Class
si quelqu'un peut m'aider et m'expliquer ce qui fait que ça ne fonctionne pas, je serait très content.
Si vous voulez des informations supplémentaire, n'hésitez pas à me les demandés.
Whismeril
Messages postés18619Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention27 septembre 2023629 17 sept. 2014 à 22:49
Ce qui fait que ça ne fonctionne pas est simplement que VB.net est un langage différent de VBA ou VB6.
La démarche globale, la façon de déclarer les fonctions, le langage peu typé(quoi que) sont restés, mais les instructions sont celles de la framework.
Je te conseille de regarder du côté de l'objet string et sa méthode index of
http://msdn.microsoft.com/fr-fr/library/System.String(v=vs.100).aspx
NHenry
Messages postés15083Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention19 septembre 2023159 Modifié par NHenry le 18/09/2014 à 11:19
En .NET, il est largement possible d'éviter FSO !!!
Déjà retires l'import automatique des l'espace de nom "Microsoft.VisualBasic" (propriétés du projet, onglet "Références")
Penses à activer "Option Explicit" et "Option Strict"
Pour les fichier/dossier, l'espace de nom System.IO est là :
System.IO.Directory.* pour les dossiers
System.IO.File.* pour les fichiers
System.IO.Path.* pour le traitement des noms de fichier/dossier.
Extention = Mid(f2, InStrRev(f2, ".") + 1)
Devient
System.IO.Path.GetExtension(f2)
Ou au pire :
Extention = f2.SubString(f2.LastIndexOf(".") + 1)
Shell("C:\Program Files (x86)\adobe\reader 11.0\reader\acrord32.exe " & Chemin & Fichier, 1)
Shell est à remplacer par :
System.Diagnostics.Process.Start
De plus, que se passe-t-il si il n'y a pas Acrobat Reader sur la machine, mais un autre lecteur ?
System.Diagnostics.Process.Start permet d'éviter cet écueil en ne mettant que le nom du PDF.
J'oubliais, pour la concaténation de chemin/nom de fichier : System.IO.Path.Combine est là.
If a Dalek is a being of pure hate...what happens when Cadence uses her love spell on one?
En VB.NET pensez à activer "Option Explicit" et "Option Strict"
Whismeril
Messages postés18619Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention27 septembre 2023629 18 sept. 2014 à 12:04
Et c'est là ou on voit le spéciliste en VB.Net à comparer du rigolo qui ne lit même pas le code et fais une réponse de base à la question de base posée....
Bonjour, merci pour ces informations très rapide d'ailleurs. Je vais regarder cela avec attention. Merci Nhenry pour tes explications. Je comprend bien maintenant pourquoi ça ne fonctionne pas.