IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Fonction rechercher et déplacer Erreur :(


Sujet :

VBScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut Fonction rechercher et déplacer Erreur :(
    Voili Voili
    Je suis en train d'écrire un script vbs pour trouver des fichiers ayant une extension précise dans une arborescence donnée par un fichier liste.txt
    Je pensais mon Code fini mais j'ai une erreur et je ne sais pas comment la corriger, ni quel est mon erreur
    elle se trouverait dans la fonction Déplacement de fichier à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MyPath = ObjFSO.GetFolder(CheminFichier)
    le programme me dit que le chemin est introuvable...

    si quelqu'un peut m'aider à coriger mon erreur...

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    ' VB Script Document
    'option explicit
     
    ' Appel code maître
    MainCode
     
     
    ' -----------------------------------------------------------------------------
    ' Code Maître
    ' -----------------------------------------------------------------------------'
    Sub MainCode() 
      Set ObjFSO = CreateObject("Scripting.FileSystemObject")
     
      Parm1 = Wscript.Arguments.item(0) 'liste.txt'
      Parm2 = Wscript.Arguments.item(1) 'y:\arbo'
     
      if right(Parm2,1) = "\" then Parm2 = mid(Parm2,1,len(Parm2)-1)
     
      If ObjFSO.FileExists(Parm1) Then
        wscript.echo "la liste de base de données existe"
      else 
        Set MonFic = ObjFSO.CreateTextFile("Y:\toto.txt") 
        MonFic.writeline "ça marche pas !!"""
        WScript.quit
      End If
     
      Set objFile = ObjFSO.OpenTextFile(Parm1)
     
      Do until objFile.AtEndOfStream
        CheminFichier = objFile.ReadLine
        result = Find(CheminFichier, "doc")
     
        if len(result) = 0 then wscript.quit
     
        Tbl = split(result,chr(10))
     
        for i = 0 to Ubound(Tbl) 
          DeplaceFichier Tbl(i), Parm2
        next
      Loop
    End Sub
     
     
     
    ' -----------------------------------------------------------------------------
    ' Fonction Deplacement de fichier
    ' -----------------------------------------------------------------------------
    Function DeplaceFichier (CheminFichier, Source)
      Dim MyPath
      NbrDocFile = 0
      Arbo = Source
      Set ObjFSO = CreateObject("Scripting.FileSystemObject")
     
      Set MyPath = ObjFSO.GetFolder(CheminFichier)
     
      For each File in MyPath.Files 
        if ObjFSO.GetExtensionName(File) = "doc" then NbrDocFile = NbrDocFile + 1
      next
     
      If (NbrDocFile > 0) Then 
        If right(CheminFichier,1) = "\" Then Chemin = CheminFichier & "*.doc"  else Chemin = CheminFichier & "\*.doc" 
     
          Tbl = split(Chemin,"\")
     
          For i = 1 to Ubound(Tbl) - 1 
            Arbo = Arbo & "\" & Tbl(i) 
            msgbox (arbo)
            If Not ObjFSO.FolderExists(Arbo) Then ObjFSO.CreateFolder Arbo
          next
        ObjFSO.CopyFile Chemin, Arbo
     
        If not err.number = 0 then msgbox err.number & ":" & err.description else msgbox "super méga trop bien !"
     
        If (Path.SubFolders.Count > 0) Then
            For Each Folder In Path.SubFolders
                Call DeplaceFichier(Folder)
            Next
        End If        
      End If
    End Function
     
    ' -----------------------------------------------------------------------------
    ' Fonction Find
    ' -----------------------------------------------------------------------------
    Function Find (strPath, strFileName)
      Dim MyDir, MyFile, MySubDir
      Dim strResult
     
      If strFileName = Empty Then Exit Function
      Set ObjFSO = CreateObject("Scripting.FileSystemObject")
     
      Set MyDir = ObjFSO.GetFolder(strPath)
     
      For Each MyFile In MyDir.Files
        if ObjFSO.GetExtensionName(MyFile) = strFileName then strResult = strResult & strPath & vbCrLf
       Next
     
      For Each MySubDir In MyDir.SubFolders
        strResult = strResult & Find(strPath & "\" & MySubDir.Name, strFileName)
     
      Next
     
      Find = strResult
    End Function

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par julien0709 Voir le message
    ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MyPath = ObjFSO.GetFolder(CheminFichier)
    le programme me dit que le chemin est introuvable...
    ...
    essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    msgbox CheminFichier
    Set MyPath = ObjFSO.GetFolder(CheminFichier)
    ...
    et dit nous quoi

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    lors de l'affichage de "cheminfichier" a l'aide de msgbox, il m'affiche bien la bonne arborescence mais seulement dans le premier dossier de la liste.txt
    lorsqu'il passe au deuxième dossier de la liste.txt, la fenêtre msgbox est vide et je ne vois pas pourquoi

  4. #4
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    montre nous quelques lignes de ton fichier texte.

    A++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    voici les lignes demandées

    y:\doc
    y:\stage
    y:\VBS

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Revoir les terminaisons de lignes dans ton fichier texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Tbl = split(result,chr(10))
    essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Tbl = split(result,vbCrlf)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    J'ai essayé et ça ne marche pas. la copie ne s'effectue même pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Tbl = split(result,chr(10))
    j'ai repris le code pas à pas en essayant de le modifier mais je ne vois pas comment je peux faire autrement que la démarche que j'ai établi

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Dans find, à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ObjFSO.GetExtensionName(MyFile) = strFileName then strResult = strResult & strPath & vbCrLf
    remplace vbCrLf par un ;

    Puis tu spliteras sur le ;

    J'ai l'impression que ton erreur est du au fait que le split ne se passe pas correctement, et que dans ton tableau résultat tu as des chaines vide ou incorrecte.

    tu peux aussi afficher strfilename dans une msgbox à chaque fois que tu ajoutes une valeur à la variable pour voir.

    et aussi dans ta boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 0 to Ubound(Tbl) 
          DeplaceFichier Tbl(i), Parm2
        next
    Affiche Tbl(i) voir si c correcte pour chaque ligne.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    le split se passe correctement pour la première ligne du fichier texte, mais après, la msgbox me montre "du vide" donc effectivement, le split doit mal se passer pour les lignes qui se trouvent après.
    la je pense à remettre à 0 une variable, mais je ne vois pas comment je pourrais faire...
    pour le ";", le script ne ve rien savoir. il faut donc que je gère avec mon chr(10)

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    une ligne d'un fichier texte :
    toto;part;en;vacance

    un code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    dim tableau
    dim result
    result = ""
    ... 'ouverture du fichier et obtention de l'objet fso. On passe direct à la boucle :
    Do until objFile.AtEndOfStream
        tableau = Split(objFile.ReadLine, ";")
        for each elt in tableau
            result = result & " " & elt
        next
        msgbox result 'normalement tu devrias avoir "toto part en vacance" qui s'affiche.
    Loop
    pour le ";", le script ne ve rien savoir
    Peux tu donner plus de détails ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    ce code marche pour l'exemple à faire. j'arrive bien à "toto part en vacances"

    mais pour mon code,en fait, j'ai mis le ";" à la fin de chaque ligne vu que c'est une liste de dossier, et soi j'ai mal saisi, soi il ne comprend pas.
    j'ai l'impression que le code ne veut pas s'arrêter, vu qu'il déplace bien les fichiers mais que après il ve continuer, et donc il n'y a rien dans la msgbox.
    peut être dois-je changer la condition d'arrêt ??

    que'est ce que le "elt" ??? moi jle comprends comme "case du tableau"

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    J'ai trouvé le problème !!!

    lors de la création de la liste de fichiers trouvé, il y a un rajout de ligne avec "rien" dedans
    exemple il trouve 4 documents word dans les divers dossier, cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    y:\doc
    y:\doc
    y:\doc
    y:\doc
            <---- 'ligne parasite qui se rajoute à la fin
    ' et qui fait planter le script car bien sur il ne peut pas trouver ce dossier
    Je cherche donc à enlever cette ligne, qui n'est donc constituée que d'un retour chariot... et je n'ai pas trouvé comment

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if result = chr(10) then wscript
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if result = "" then wscript.quit
    par exemple mais il ne le prend pas en compte

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    résolu

    un petit test de la longueur de Tbl(i) pour sortir ou non de la boucle était nécessaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for i = 0 to Ubound(Tbl) 
        msgbox  Tbl(i)
          if len(Tbl(i)) = 0 then exit for
          DeplaceFichier Tbl(i), Parm2
         next
    Merci à tous pour votre aide

  14. #14
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Ou tu peux tester que la ligne lu est vide

    Et puis ne sort pas de la boucle, ne fait rien à la place, comme cela si la ligne vide est en plein milieu du fichier, et hop cela continue de fonctionner.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    J'avais pensé à cela, mais je n'ai pas réussi à tester si la ligne était vide donc je m'étais résigné à faire de cette manière

    comment puis-je tester la ligne ??

  16. #16
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CheminFichier = objFile.ReadLine
    If Not Trim(CheminFichier) = "" Then
         'le traitement ici
    End If
    Un truc dans le genre devrait être bon.

Discussions similaires

  1. Erreur '2046' sur fonction rechercher
    Par nmanuel dans le forum IHM
    Réponses: 1
    Dernier message: 18/01/2013, 18h50
  2. Réponses: 3
    Dernier message: 15/11/2005, 18h50
  3. [fonction] recherche de methode inutilisée
    Par frouge dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 12/03/2005, 13h37
  4. fonction Recherche
    Par pingoui dans le forum Débuter avec Java
    Réponses: 16
    Dernier message: 31/08/2004, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo