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 :

Récupérer nbr total de lignes d'une "Sub" & nbr total de lignes d'un Script.


Sujet :

VBScript

  1. #1
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut Récupérer nbr total de lignes d'une "Sub" & nbr total de lignes d'un Script.
    Bonjour,

    Suite à mon poste précédemment, ou j'ai réussi à résoudre mon problème tout seul, je suis en train de bosser actuellement sur une optimisation de celui ci.
    >>Sujet Précédent<<.

    Il me faut pour ça absolument relever le numéro de la ligne à chaque fois que j’appelle ma fonction (StartIE) pour pouvoir calculer en fonction du numéro de la ligne relevé, le pourcentage automatique de ma barre de progression (je devrais pouvoir me débrouiller pour cette étape).


    Donc un exemple tout con.

    Un script d'ouverture de session fait 1800 lignes.
    Je veux donc qu'a la première ligne, mon % démarre à 0%, logique.
    A la 1800 ème ligne, il sera donc à 100%.

    Pour ça il faut donc que je relève régulièrement la valeur de la ligne pour en déduire un pourcentage d'avancement !
    Et c'est sur cette étape que je bloque.

    Tout ce que j'ai réussi à faire de moi même est ce début de 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
    Dim objFSO, strTextFile, strRead, arrline, intFulllines, intSublines
    CONST ForReading = 1
     
    strTextFile = "???.vbs"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    strRead = objFSO.OpenTextFile(strTextFile,ForReading).ReadAll
     
    arrline = Split(strRead,vbCrLf)
     
    intFulllines = UBound(arrline) +1
    intSublines = ..........
     
    Set objFSO = Nothing
    Merci pour ceux qui prendrons du temps sur mon problème

    Je posterai des MAJ si je trouve quelque chose..
    Bonne journée

  2. #2
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Bonjour,

    Bon j'ai trouvé comment j'allais faire, mais il vas me falloir de l'aide cette fois !
    Je compte reprendre le script ci-dessus pour compter les lignes ENTRE des procédures "Sub" avec un compteur


    Le but étant d'avoir à la fin un pourcentage du déroulement du script DANS cette fonction.
    La déclaration se fera par les "Sub" et les "End Sub" = Nombre total de lignes entre la procédure.


    Il y aura un compteur qui totalisera LE NOMBRE TOTAL DE LIGNES.
    intFulllines
    Et il y a aura un compteur avec un ré-incrémentation à 0 à chaque fois qu'il voit un "Sub" passer dans le Script.
    intSublines

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim objFSO, strTextFile, strRead, arrline, intFulllines, intSublines
    CONST ForReading = 1
     
    strTextFile = "???.vbs"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    strRead = objFSO.OpenTextFile(strTextFile,ForReading).ReadAll
     
    arrline = Split(strRead,vbCrLf)
     
    intFulllines = UBound(arrline) +1
    intSublines ..........
     
    Set objFSO = Nothing
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub
    ' ***
    ' ***
    End Sub
    Ici intSublines aura la valeur 3 (ou 2 je sais pas...)


    Il faut donc que je travaille les "options" de la fonction split !!

    Lui dire que arrline=(intSubline) si il contient ou lis ("End Sub")
    Et de la même manière, intSubline = 0 si il contient ou lis ("Sub") (ré-incrémentation)

    Une fois que j'ai ces deux valeurs la, je peux faire le calcul suivant:

    3 (lignes de la Sub) / 1000 (lignes total du script) x 100 = ? % du script

    Et avec ca je pourrais résoudre donc mon problème
    J'ai bien réfléchis comme vous pouvez le voir, mais j'ai besoin de personnes pour m'aider un peu, c'est peu être pas dur, mais comme je m'auto-forme depuis 1 mois, j'ai un peu du mal.

    Merci pour ceux qui prendrons du temps à lire mon paté, et bonne journée à tous !

    Q.

  3. #3
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    MAJ du script sur lequel je bosse en ce moment:

    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
    Dim objFSO, strTextFile, strRead, arrline, intFulllines, intSublines
    Const ForReading = 1
    Const ScriptName = "???.vbs"
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    strRead = objFSO.OpenTextFile(ScriptName,ForReading).ReadAll
    arrline = Split(strRead,vbCrLf)
     
    intFulllines = UBound(arrline) +1
    intSublines = 3
     
    intPercent = intSublines / intFulllines * 100
     
    MsgBox "Nb Lignes de la Sub: " & intSublines & vbCrLf & "Nb Lignes du Script: "_
     & intFulllines &  vbCrLf & "Pourcentage: " & intPercent & "%", vbInformation,"Fonction"
     
    Set objFSO = Nothing
    ' =====================
     
    Sub Fonction
    ' ***
    ' ***
    ' ***
    End Sub
    Voila ce que le Script aura à remplir comme rôle. C'est exemple pour vous montrer le fonctionnement de mon bout de code, il reste la partie surement la plus dur du script: obtenir le nombre de lignes de la "Sub fonction" automatiquement.

    En gros il faudrait lui spécifier que lorsqu'il voit une ligne avec "Sub", il retourne son compteur à 0, et que lorsque qu'il voit "End Sub", qu'il ressortent la valeur pour faire le petit calcul

    Et à chaque fois qu'il ne vois rien il se crédite d'un compteur +1
    (intSublines = intSublines + 1)

    J'essaye d'avancer de mon côté ..

  4. #4
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Bonjour,

    Bon bah je me retape un monologue

    Version du code qui pourrais fonctionner (commence bien à lire à partir de "Sub", mais ne s’arrête pas à "End Sub".. => pour tester augmentez le nombre d'espace de lignes après le End Sub)


    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
    Dim objFSO, strReadAll, strReadSub, arrline, intFulllines, intSublines, intPercent
    Const ForReading = 1
    Const ScriptName = "???.vbs"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    strReadAll = objFSO.OpenTextFile(ScriptName,ForReading).ReadAll
    arrline = Split(strReadAll,vbCrLf)
     
    intFulllines = UBound(arrline) +1
     
    Set strReadSub = objFSO.OpenTextFile(ScriptName,ForReading)
    Do Until strReadSub.AtEndOfStream
    strNextLine = strReadSub.Readline
     
    If strNextLine > "Sub" Then
    	intSublines = 0
    	If strNextLine > "End Sub" Then
    		intSublines = intSublines
    		Else intSublines = 0
    	End If
    	Else
    	intSublines = intSublines + 1	
    End If
    Loop
     
    intPercent = intSublines / intFulllines * 100
     
    MsgBox "Nb Lignes de la Sub: " & intSublines & vbCrLf & "Nb Lignes du Script: " & intFulllines & vbCrLf & "Pourcentage: " & intPercent & "%", vbInformation,"Fonction"
     
    ' ********************
    Sub A
    ' ***
    ' ***
    ' ***
    ' ***
    End Sub
     
    Set objFSO = Nothing
    Ou se trouve mon erreur pour que compteur ne s'arrête pas à "End Sub" ?

  5. #5
    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 : 70
    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
    Essaie avec ce
    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
     Option Explicit
     
     Const  ForReading = 1
     Dim Fich, intSublines, intPercent, strNextLine
     Dim objFSO, strReadAll, strReadSub, arrline
     
     Const ScriptName = "FindSub.vbs" ' Mettre ici le nom du fichier à traiter
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set Fich = objFSO.OpenTextFile(ScriptName,ForReading)
    strReadAll = Fich.ReadAll
    ' nombre total de ligne du fichier y compris les sauts de lignes
    arrline = Fich.Line ' au lieu de : {Split(strReadAll,vbCrLf)}
    intSublines = 0
    Set strReadSub = objFSO.OpenTextFile(ScriptName,ForReading)
    Do While Not strReadSub.AtEndOfStream
        strNextLine = strReadSub.Readline
        If InStr(1, strNextLine, "Sub") > 0 And InStr(1, strNextLine, "End Sub") = 0 Then
    	  intSublines = intSublines + 1 ' incrémente le nbr de ligne
        End If
    	If InStr(1, strNextLine, "End Sub") > 0 Then 
    	   intSublines = intSublines  ' Nombre total de ligne y compris (Sub) et (End Sub)
    	   Exit Do
    	End If   
    Loop
     
    intPercent = FormatNumber((intSublines / arrline) * 100,2) ' 2 chiffres après la virgule
     
    MsgBox "Nb Lignes de la Sub: " & intSublines & vbCrLf & "Nb Lignes du Script: " & arrline & vbCrLf & "Pourcentage: " & intPercent & "%", vbInformation,"Fonction"
     
    ' ********************
    Sub A
    ' 1***
    ' 2***
    ' 3***
    ' 4***
    ' 5***
    End Sub
     
    Set objFSO = Nothing
    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

  6. #6
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Merci pour ta réponse et le temps que tu y a consacré.

    J'ai mis exactement la même ligne que toi pour ne prendre que deux chiffres après la virgule J'ai fait ça ce matin mais je n'ai pas avancé dessus beaucoup depuis hier car j'ai eu à faire à coté.

    Ton interprétation de mon code est vraiment bien, le Fich.Line est carrément mieux niveau optimisation, mais par contre je ne comprends pas comment tu obtiens la valeur 7 "lignes"...
    J'ai essayé de changer l'écart de lignes entre le "Sub" et le "End Sub" et ca reste à 7... Pourtant il ne dois manquer grand chose...

    Merci encore !

  7. #7
    Membre chevronné Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Par défaut
    Bonjour,

    Quelque chose dans ce style pour compter les lignes de ton entre "Sub" et "EndSub" ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    intSublines = 0
    boolStartCounter = False
    Do While Not strReadSub.AtEndOfStream
    	strLine = strReadSub.Readline
    	If InStr(1, strLine, "Sub") > 0 Then boolStartCounter = True
    	If boolStartCounter = True Then intSublines = intSublines + 1 ' incrémente le nbr de lignes
    	If InStr(1, strLine, "End Sub") > 0 Then boolStartCounter = False
    Loop
    Bonne continuation

  8. #8
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Bonjour !

    Merci beaucoup pour ta réponse, mais non ça ne marche pas mieux..
    J'ai quand même une bonne nouvelle: J'ai réussi à faire la fonction que j'attendais:

    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
    Option Explicit
     
    Const  ForReading = 1
    Dim Fich, intSublines, intPercent, strNextLine
    Dim objFSO, strReadAll, strReadSub, arrline
     
    Const ScriptName = "???.vbs" ' Mettre ici le nom du fichier à traiter
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set Fich = objFSO.OpenTextFile(ScriptName,ForReading)
     
    strReadAll = Fich.ReadAll
    arrline = Fich.Line
     
    Set strReadSub = objFSO.OpenTextFile(ScriptName,ForReading)
    Do While Not strReadSub.AtEndOfStream
        strNextLine = strReadSub.Readline
        If strNextLine > "Sub" Then
    		intSublines = 0 
    		Else 
    		intSublines = intSublines + 1 ' incrémente le nbr de ligne
        End If
    	If strNextLine = "End Sub" Then 
    		strReadSub.Close
    		Exit Do
    	End If   
    Loop
     
    intPercent = FormatNumber((intSublines / arrline) * 100,2)  'Calcul automatique du %
    MsgBox "Nb Lignes de la Sub: " & intSublines & vbCrLf & "Nb Lignes du Script: " & arrline & vbCrLf & "Pourcentage: " & intPercent & "%", vbInformation,"Fonction"
     
    ' ********************
    Sub A
    ' 1***
    ' 2***
    ' 3***
    ' 4***
    ' 5***
    ' 6***
    End Sub
     
    Set objFSO = Nothing
    Donc ça fonctionne bien.
    On vois bien que lorsque qu'on ajoute des retours à la ligne dans la Sub, le nb de lignes augmente, et lorsque l'on ajoute des retour à la ligne après la procédure Sub, le nb de lignes ne change pas, mais le pourcentage baisse

    Le problème que je vais avoir maintenant c'est que si il y a deux procédures Sub dans un .vbs, il vas me relever que la valeur du nb de lignes de la derniere procédure.
    Hors dans mes scripts j'ai plusieurs procédures ...

    Encore merci pour vos réponses qui m'ont bien fait réfléchir, et qui m'ont été d'une grande aide pour arriver à ce résultat déjà. Merci !

    Je vous redonne des nouvelles cet après midi de l'avancement.


  9. #9
    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 : 70
    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
    Bonsoir;

    Effectivement, le code que j'ai proposé retournait uniquement et toujours le nombre 7(c'était d'ailleurs et par hasard conforme à l'exemple de fichier que j'ai pris).
    Mais ce qui m'a induit en erreur, c'est la présence du mot Sub dans les variables déclarées(telles que strReadSub et intSublines) et qui se répètent plusieurs fois. D'où leur interception par le code sans pour autant arriver à la procédure Sub elle-même.

    Pour y palier, j'ai dû ajouter une fonction de filtrage appelée MotEntier :
    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
     Option Explicit
     
     Const ForReading = 1, ForWriting = 2, ForAppending = 8
     Dim Fich, intSublines, intPercent, strNextLine
     Dim objFSO, strReadAll, strReadSub, arrlines, Ret
     Const ScriptName = "FindSub.vbs" ' Mettre ici le nom du fichier à traiter
     
     Set objFSO = CreateObject("Scripting.FileSystemObject")
     Set Fich = objFSO.OpenTextFile(ScriptName,ForReading)
     strReadAll = Fich.ReadAll
    ' nombre total de lignes du fichier y compris les sauts de lignes(lignes vides)
     arrlines = Fich.Line ' au lieu de : {Split(strReadAll,vbCrLf)}
     intSublines = 0
     fich.Close
     ' =================
     Set strReadSub = objFSO.OpenTextFile(ScriptName,ForReading)
     Do 
    	strNextLine = strReadSub.Readline
    	If MotEntier(strNextLine, "sub") Then
    		intSublines = intSublines + 1 
    		Ret = Ret & CStr(intSublines) + "  :  " + strNextLine & VbNewLine
    		do
    			strNextLine = strReadSub.Readline
    			intSublines = intSublines + 1 ' incrémente le nbr de lignes
    			Ret = Ret & CStr(intSublines) + "  :  " + strNextLine & VbNewLine
    		 loop until MotEntier(strNextLine, "end sub")
    	End If
     Loop Until MotEntier(strNextLine, "end sub") Or strReadSub.AtEndOfStream
     msgbox Ret
     ' ==================
     Function MotEntier(strIn, strSearch)
       If Len(strIn) = 0 Then 
          MotEntier = False
    	  Exit Function
       Else
         strIn = LCase(LTrim(Replace(strIn,VbTab,"")))
         strSearch = LCase(strSearch)
         MotEntier = (Mid(strIn,1 , Len(strSearch)+1) <= strSearch + " ")  And _
    	             (Mid(strIn,1 , Len(strSearch)) = strSearch)
       End If
     End Function
     ' ===================
      intPercent = FormatNumber((intSublines/arrlines) * 100, 2) ' 2 chiffres après la virgule
      MsgBox "Nb Lignes de la Sub: " & intSublines & vbCrLf & "Nb Lignes du Script: " & _
      arrlines & vbCrLf & "Pourcentage: " & intPercent & "%", vbInformation,"Fonction"
     ' ********************
    Sub A
    ' 1***
    ' 2***
    ' 3***
    ' 4***
    ' 5***
    ' 6***
    ' 7***
    ' 8***
    ' 9***
    ' 10**
    ' 11**
    End Sub
    Set objFSO = Nothing
    L'instruction MsgBox Ret affichera tout le texte de la procédure Sub.
    J'ai pris comme exemple ce même code que j'ai enregistré sous le nom FindSub.vbs (disons que c'est l’auto-analyse).
    Ce code recherche uniquement la première Sub rencontrée et ne va pas au-delà. Essaie de t'en inspirer pour le reste du travail
    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

  10. #10
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Waouw, merci pour ton code ! Il est vraiment incroyable (pour moi).

    J'ai travaillé dessus un peu ce weekend, et je vais mixer tout ca, pour vous redonner une version plus tard, lorsque j'aurais à peu près terminé ce que je voudrais faire.

    Merci encore !
    Si j'ai des questions ou autres, je vous fait signe

  11. #11
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Bonjour à tous

    Bien j'ai bien avancé, mon Script ouvre une MsgBox avec les valeurs qui m'interessent comme ceci:
    1> NomdelaSub/Function; NbdelignesdelaSub/Function; %avancementduscript

    Ce qui me donne un résultat comme ceci:

    1>Sub A(a,b); X Lignes; XX,X%
    2>Sub B(b,a); X Lignes; XX,X%


    Voici le 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
    106
    107
    108
    109
    110
    111
    112
    113
    114
    Option Explicit
     
    Const ForReading = 1
    Dim Fich, ReadAll, objFSO, Ret
    Dim intNumberLines, intSubNumber, intProgressLines, intSubLines, intPercent
    Dim strSubName, strEndSub, strNextLine, strReadAll
     
    Const ScriptName = "findsub.vbs" ' Mettre ici le nom du fichier à traiter
     
     
    ' *****************************************************************************
    Private Sub ClcLines()
     
     
    strSubName = ""
    strEndSub = ""
    intSubLines = 0 
    intProgressLines = 0 
    intSubNumber = 0 
    intNumberLines = 0 
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    Set ReadAll = objFSO.OpenTextFile(ScriptName,ForReading)
    strReadAll = ReadAll.ReadAll
    intNumberLines = ReadAll.Line  ' au lieu de : {Split(strReadAll,vbCrLf)}
     
    Set Fich = objFSO.OpenTextFile(ScriptName,ForReading)
    Do 
     
    strNextLine = Fich.ReadLine
    	If MotEntier (strNextLine, "Sub") Then
    		intSubLines = intSubLines + 1 
    		intProgressLines = intProgressLines + 1
    		intSubNumber = intSubNumber + 1 
    		strEndSub = "End Sub" 
    		strSubName = strNextLine 
    		Ret = Ret & Cstr(intSubNumber) & "> " & strSubName 
    		Do
    			strNextLine = Fich.ReadLine
    			intSubLines = intSubLines + 1 
    			intProgressLines = intProgressLines + 1
     
    		 Loop Until MotEntier (strNextLine, strEndSub)
    		 Ret = Ret & "; " & intSubLines & " Lines; " & FormatNumber((intProgressLines/intNumberLines) * 100, 2) & "%" & vbCrLf
    		 intSubLines = 0 	 
    	ElseIf MotEntier (strNextLine, "Function") Then 
    		intSubLines = intSubLines + 1 
    		intProgressLines = intProgressLines + 1
    		intSubNumber = intSubNumber + 1 
    		strEndSub = "End Function" 
    		strSubName = strNextLine  
    		Ret = Ret & Cstr(intSubNumber) & "> " & strSubName 
    		Do
    			strNextLine = Fich.ReadLine
    			intSubLines = intSubLines + 1 
    			intProgressLines = intProgressLines + 1
    		 Loop Until MotEntier (strNextLine, strEndSub)
    		 Ret = Ret & "; " & intSubLines & " Lines; " & FormatNumber((intProgressLines/intNumberLines) * 100, 2) & "%" & vbCrLf
    		 intSubLines = 0 
    	End If
     
    Loop Until Cstr(intSubLines) = Cstr(intNumberLines) Or Fich.AtEndOfStream 
     
    Set Fich = Nothing
    Set objFSO = Nothing
     
    End Sub
     
    ' *****************************************************************************
    Private Function MotEntier (strNextLine, strSearch) 
       If Len(strNextLine) = 0 Then 
          MotEntier  = False  
    	  Exit Function 
       Else
         strNextLine = LCase(LTrim(Replace(strNextLine,VbTab,"")))
         strSearch = LCase(strSearch) 
         MotEntier  = (Mid(strNextLine,1 , Len(strSearch)+1) <= strSearch & " ")  And (Mid(strNextLine, 1, Len(strSearch)) = strSearch) 
       End If
    End Function
    ' *****************************************************************************
     
    'Appel de la Procédure
    ClcLines()
    intPercent = FormatNumber((intProgressLines/intNumberLines) * 100, 2) 
     
    Sub A(x,y)
    ' 1***
    ' 2***
    ' 3***
    ' 4***
    ' 5***
    ' 6***
    End Sub
     
    Function B(g,h)
    ' 1***
    ' 2***
    ' 3***
    End Function
     
    Sub C(e,f)
    ' 1***
    ' 2***
    ' 3***
    ' 4***
    ' 5***
    ' 6***
    ' 7***
    ' 8***
    End Sub
     
    MsgBox Ret & vbCrLf & vbCrLf & "- Nombre de lignes du Script >> " & intNumberLines & " Lignes" _
    & vbCrLf & "- Pourcentage total des Sub/Function du Script >> " & Cstr(intPercent) & "%"
    (bien entendu, la Procédure pour lire et relever toutes les valeurs ne sera pas dans un fichier qui sera lu comme ici, c'est juste ne pas se casser la tête à créer un autre fichier)

    Donc tout ça fonctionne parfaitement ! La question reste à savoir comment je vais pouvoir reprendre mes valeurs de pourcentages d'avancement du script (ce qui m’intéresse pour afficher dans mon PopUp IE) qui sont affichés dans une MsgBox avec "Ret" (affichable aussi dans un fichier.txt).

    Merci à toi l' autodidacte qui m'a beaucoup inspiré pour faire la suite de mon projet, je suis déjà bien avancé la. Et merci à tous d'avoir au moins lu le problème, suivis les choses ou essayer de m'aider.
    Si vous avez des suggestions ou des questions, des améliorations à apporter n'hésitez pas !
    (peu être au niveau de lire une seule fois le fichier au lieu de deux fois)
    Et puis de mon coté j'essaye de récupérer les valeurs qui m’intéresse pour afficher ça directement dans mon "PopUp IE".

    Bonne journée !

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/07/2014, 20h58
  2. Réponses: 3
    Dernier message: 16/04/2008, 08h39
  3. Récupérer l'index de la ligne d'une TDBLookUpListBox
    Par navis84 dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/02/2005, 10h13

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