Instrrev fonctionne pas

Résolu
infodes Messages postés 50 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 21 décembre 2023 - 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.

merci pour votre aide.

4 réponses

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
17 sept. 2014 à 22:41
Bonjour, message modifié par l'ajout des balises de code.
Voir ici comment bien utiliser la coloration syntaxique.
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
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"
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
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....
0
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.

Bon journée à tous.
0
Rejoignez-nous