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 :

Boucle While en VBScript


Sujet :

VBScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 50
    Par défaut Boucle While en VBScript
    Bonjour,

    Voila, je souhaiterais énumérer la liste des sous-répertoires d'un dossier en n'utilisant pas la boucle For Each.

    C'est à dire, en d'autres termes, je souhaiterais avoir les noms de tous les sous-répertoires d'un dossier donné sur mon disque dur, en utilisant le boucle while.

    Est-ce que ce serait possible?

    Voici la syntaxe que j'ai employé, mais ca ne fonctionne pas.

    Cette syntaxe est utilisée dans un autre langage de script qui intègre les objets du VBS mais qui malheureusement, ne comporte pas de boucle For Each.

    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
    var
    object o,
    object oDossier,
    string sPath,
    string sDossier,
    int i,
    int iMax
     
    let o = CreateObject("Scripting.FileSystemObject")
    let sPath = "C:\\Nom du sous-répertoire"
    let oDossier = o.GetFolder(sPath).SubFolders
    let iMax = oDossier.count
     
    While i < iMax
    let sDossier = oDossier(i).name
    SayString (sDossier + ",")
    EndWhile

  2. #2
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Par défaut
    Bonsoir,

    Il me semble que "la fin" du While soit "Wend" et non pas "EndWhile".
    Test et dit moi.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While (i<10)
         'Code
    Wend
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  3. #3
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    On peut avoir avec l'objet Shell.Application(car FSO ne gère pas les indices si mes connaissances ne sont pas désuètes):
    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
    Option Explicit
     
    Dim SH , cnt, I, SS
    Private Function EnumSubFolders()
      dim myPath,sPath
      myPath="C:\Program Files"
      I = 0
      Set SH=CreateObject("Shell.Application")
      set sPath = SH.NameSpace(myPath)
      cnt = SH.NameSpace(myPath).Items.Count
      While I < cnt
        If sPath.Items.Item(I).IsFolder Then
        ss=ss & sPath.Items.Item(I).Name & vbnewline
        End If
        I = I + 1
      Wend
      EnumSubFolders=SS
    End Function
     
    MsgBox EnumSubFolders
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 50
    Par défaut
    Merci à vous deux,

    En fait, dans le langage script que j'utilise, la boucle While ne s'incrémente pas par une instruction Wend, mais par une incrémentation du compteur.

    Il est vrai que je l'ai oublié dans mon code.

    Mais ce n'est pas cela qui pose problème, c'est surtout le fait que les éléments de la collection retournée par la propriété SubFolders du VBScript, lorsqu'on essaie de les lister avec une boucle While, eh bien, je ne sais pas ce qu'il faut mettre devant la propriété Name pour que chaque nom de chaque sous-dossier soit bien lu.

    Avec la boucle For Each, qui n'est pas intégrée dans le programme que j'utilise, on a pas besoin de citer l'index de l'élément, mais dans cette boucle While dont je vous parle, hé bien, l'index est requis pour que le nom soit bien reconnu.

    Comment doit je procéder pour que le nom soit bien cité à chaque bouclage?

    Vous pouvez me citer des exemples avec une autre boucle While que vous connaîssez, j'essaierai de la modifier en fonction du programme que j'utilise.

    Je vous remercie d'avance pour votre aide.

  5. #5
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Par défaut
    Autre boucle While ?
    Tu veux dire une autre syntaxe de boucle ?

    Tu as la For :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 to 100 step 1
         'code 
    next i
    Et la Do while :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Do While i < 10
         'code
    loop
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  6. #6
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Par bouclage tu veux dire itération ?(car pour moi bouclage = fermeture)
    Un autre exemple d'utilisation de la boucle While ......WEnd en espérant répondre correctement à ta question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
     
    dim tb(30),I,Ret
    i=0
    Ret=""
    While i<30
      tb(i)=cstr(30-i)
      Ret=Ret & tb(i) & VbNewLine   ' Juste pour l'affichage
      i=i+1
    Wend
    MsgBox Ret
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 50
    Par défaut
    Bonsoir,


    En fait, la syntaxe de la boucle while que j'utilise est comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    While i < iMax
    'Traitement à réaliser
    let i = i + 1
    EndWhile

  8. #8
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 124
    Par défaut
    Salut
    Citation Envoyé par en googleant
    Syntaxe while .... endwhile <---- en PHP anciennne version, en PHP 3.0, vous obtiendrez une boucle sans fin !
    Guide de l'utilisateur VBScript Visual Basic Scripting Edition
    © 2001 Microsoft Corporation. Tous droits réservés.
    Build: Version du sujet 5.6.9309.1546
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While condition
       ..........
    Wend
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 50
    Par défaut
    Bonjour tout le monde,

    Voilà, je vous remercie tous pour votre aide et m'excuse auprès de la modération pour avoir oublié les tags autour du code dans mon premier post.

    Juste pour vous dire que le problème est désormais résolu, grâce à l'explication de Moncef, qui fonctionne très bien avec la boucle While employé dans le programme que j'utilise.

    En fait, apparemment, comme tu me l'as bien expliqué Moncef, il semblerait que l'objet "FileSystemObject" et la méthode "GetFolder ()" ne gèrent pas les indices, chose qui est indispensable pour le listage des éléments d'une collection avec une boucle While.

    Avec l'objet "Shell.Application" et la méthode "NameSpace ()", le problème ne se pose plus.

    Le langage que j'utilise est un langage de script peu connu, il s'appelle le langage script JAWS.

    Et maintenant, vous voici le code qui fonctionne très bien désormais, en vous renouvelant mes remerciements.

    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
    var
    string myPath,
    string sPath,
    string sDossier,
    object oPath,
    object oSH,
    object oDossier,
    int i,
    int iMax
    let myPath="c:\\Mon dossier"
    let oSH=CreateObject("Shell.Application")
    let oPath = oSH.NameSpace(myPath)
    let iMax = oPath.items.count
    let i = 0
    While i < iMax
    If oPath.items.item(i).IsFolder Then
    let sPath = oPath.items.item(i).name
    let sDossier=sDossier + sPath + ","
    EndIf
    let i = i + 1
    EndWhile
    SayString (sDossier)

  10. #10
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 124
    Par défaut
    Citation Envoyé par abdel792 Voir le message
    Bonjour tout le monde,

    Voilà, je vous remercie tous.......
    Le langage que j'utilise est un langage de script peu connu, il s'appelle le langage script JAWS.
    .....
    Ayant créée la discussion sur le forum VBScript, il y avait de quoi être désorienté, d'où des réponses non adaptées.
    Penser au bouton
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. boucle while trop lente
    Par atouze dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 16h35
  2. Boucle while & read
    Par gibet_b dans le forum Linux
    Réponses: 4
    Dernier message: 29/04/2005, 15h38
  3. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

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