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

ASP Discussion :

runtime error '800a0009' : Subscript out of range: 'i'


Sujet :

ASP

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 11
    Points
    11
    Par défaut runtime error '800a0009' : Subscript out of range: 'i'
    Bonjour à tous,


    En train de développer un moteur de recherche, je suis bloqué là-dessus :

    Microsoft VBScript runtime error '800a0009'

    Subscript out of range: 'i'


    Et je ne comprend pas pourquoi !! Il doit y avoir un petit détail qui m'echappe (et qui fait tou foirer)...

    Je m'en remet donc à vous et vos yeux expert.


    Fonctionnement :

    L'utilisateur rentre un critère de recherche (sPat), qui est découpé si constitué de plusieurs mots (avec split).

    On remplis nos tableaux, puis on cherche mot par mot dans les lignes de commentaires commençant par ''

    On récupére la ligne pour afficher plus tard le lien vers la page et son résumé (sSummary)
    Je vous épargne la partie d'affichage des résultats car je pense que ça ne vient pas de là.

    Voila le début + les 2 fonctions, merci beaucoup des futures réponses !

    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
    'Séparation si besoins puis insertion des critéres de recherche dans tab
    tab = Split(sPat," ")
    nbEl = ubound(tab)
    redim tab2(1, nbEl)
    for h = 0 to nbEl 'remplissage de tab2
        tab = tab2(0, h)
        h = h + 1
    next
     
    function SearchInLine(tab2, sLine)
        'retourne le nombre de mots trouvés
        dim iNbWord, i
        dim oRegExpr
        dim iFound 'nb de mots trouvés
        set oRegExpr = new RegExp 'en plus
        iNbWord = ubound(tab2, 1)
        iFound = 0
        for i = 0 to iNbWord
            oRegExpr.Pattern = tab2(0,i)
            oRegExpr.IgnoreCase = true
            oRegExpr.Global = false
            if oRegExpr.test(sLine) then 
                iFound = iFound + 1
                tab2(1,i) = true
            end if 
        next
        SearchInLine = iFound
    end function
     
     
     
    function SearchInFile(byref sSummary, tab2, sFile)
        dim bFound
        dim iCom, oF1, sLine 
        bFound = false
        iCom = 0
        sSummary = ""
        if oWkFso.FileExists(sFile) then
            ' Numéro de l'étape 
            ' 0 : Pas encore trouvé de commentaires 
            ' 1 : Dans le premier bloc de commentaires
            ' 2 : Sorti du premier bloc de commentaires
            set oF1 = oWkFSO.OpenTextFile(sFile, 1) 
            do while not oF1.atEndOfStream and iCom < 2
                sLine = oF1.Readline 
                if left(sLine, 2) = "''" then
                    iCom = 1
                    if left(sLine, 5) <> "''KEY" then
                        sSummary = sSummary & right(sLine, len(sLine) - 2) & "<br />" & vbNewline
                    end if
                    if SearchInLine(tab2, sLine) > 0 then
                        bFound = true                    
                    end if
                else
                    if iCom = 1 then
                        iCom = 2                    
                    end if
                end if
            loop                                        
        end if
        SearchInFile = bFound
    end function

    Pour les courageux qui veulent voir le code en entier :
    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    function SearchInLine(tab2, sLine)
    	'retourne le nombre de mots trouvés
    	dim iNbWord, i
    	dim oRegExpr
    	dim iFound 'nb de mots trouvés
    	set oRegExpr = new RegExp 'en plus
    	iNbWord = ubound(tab2, 1)
    	iFound = 0
    	for i = 0 to iNbWord
    		oRegExpr.Pattern = tab2(0,i)
    		oRegExpr.IgnoreCase = true
    		oRegExpr.Global = false
    		if oRegExpr.test(sLine) then 
    			iFound = iFound + 1
    			tab2(1,i) = true
    		end if 
    	next
    	SearchInLine = iFound
    end function
     
     
     
    function SearchInFile(byref sSummary, tab2, sFile)
    	dim bFound
    	dim iCom, oF1, sLine 
    	bFound = false
    	iCom = 0
    	sSummary = ""
    	if  oWkFso.FileExists(sFile) then
    		' Numéro de l'étape 
    		' 0 : Pas encore trouvé de commentaires 
    		' 1 : Dans le premier bloc de commentaires
    		' 2 : Sorti du premier bloc de commentaires
    		set oF1 = oWkFSO.OpenTextFile(sFile, 1) 
    		do while not oF1.atEndOfStream and iCom < 2
    			sLine = oF1.Readline 
    			if left(sLine, 2) = "''" then
    				iCom = 1
    				if left(sLine, 5) <> "''KEY" then
    					sSummary = sSummary & right(sLine, len(sLine) - 2) & "<br />" & vbNewline
    				end if
    				if SearchInLine(tab2, sLine) > 0 then
    					bFound = true					
    				end if
    			else
    				if iCom = 1 then
    					iCom = 2					
    				end if
    			end if
    		loop										
    	end if
    	SearchInFile = bFound
    end function
     
    'Déclaration des variables
    Dim oWkFso, oD, oDir
    Dim iCptResult 'Nombre résultat(s)
    Dim sSummary ' Résumé de la page
    Dim sPat   'Mot(s) recherché(s)
    Dim affichage 'Pour afficher les mots recherchés non-tronqués
    Dim tab 'Tableau contenant le sPat découpé + pour calculer nbEl
    Dim tab2() 'Tableau contenant les critéres de recherche (sPat)
    Dim tabPages(4, 4) 'Liste des pages 5 colonnes, 5 lignes
    Dim nbEl 'Nombre Eléments dans la liste des pages
    Dim iAllWords 'Pour vérifier si la totalité des mots sont trouvés en cas de recherche "Tous les mots"
    Dim h 'Pour boucler pour remplir tab2
    Dim i 'Pour boucler sur le nombre d'éléments dans tab2
    Dim j 'Pour boucler sur le nombre d'appli à fouiller
    Dim k 'Pour boucler dans la deuxiemme colonne de tab2
    Const NB_APPLICATIONS_A_FOUILLER = 5 'PENSER A INCREMENTER SI UNE APPLICATION DOIT ÊTRE AJOUTEE
    set oWkFso = server.createObject("Scripting.FileSystemObject")
    %>
    <%
    'tabPages(0, 0) = chemin physique vers le répertoire (sans le \ de fin)
    'tabPages(1, 0) = parcourir les sous répertoires ? (false / true)
    'tabPages(2, 0) = fichier à analyser
    'tabPages(3, 0) = chemin web à retourner (qui pointe vers l’application). Dans le cas d’un parcours des sous répertoires, $1 sera remplacé par le nom du sous répertoire courant.
    'tabPages(4, 0) = Accès intranet devant posséder l’utilisateur pour qu’il puisse accéder à cette application. Pour un groupe AD, mettre AD.Nom du groupe ad.
     
    tabPages(0, 0) = Request.ServerVariables("APPL_PHYSICAL_PATH") & "Stats.V2"
    tabPages(1, 0) = true
    tabPages(2, 0) = "functions.asp"
    tabPages(3, 0) = "/Stats.V2/$1/"
    tabPages(4, 0) = ""
    tabPages(0, 1) = Request.ServerVariables("APPL_PHYSICAL_PATH") & "Essais"
    tabPages(1, 1) = false
    tabPages(2, 1) = "cad_menustt.asp"
    tabPages(3, 1) = "/ESSAIS/cad_menustt.asp"
    tabPages(4, 1) = "ESSAIS.STT"
    tabPages(0, 2) = Request.ServerVariables("APPL_PHYSICAL_PATH") & "Essais\BOURGES\MAGASIN"
    tabPages(1, 2) = false
    tabPages(2, 2) = "cad_magasin.asp"
    tabPages(3, 2) = "/ESSAIS/BOURGES/MAGASIN/cad_magasin.asp"
    tabPages(4, 2) = "ESSAIS.MAG"
    tabPages(0, 3) = Request.ServerVariables("APPL_PHYSICAL_PATH") & "SuiviOffre"
    tabPages(1, 3) = false
    tabPages(2, 3) = "Index.txt"
    tabPages(3, 3) = "/SuiviOffre/"
    tabPages(4, 3) = "AD.FR Bou UAp SuiviOffres"
    tabPages(0, 4) = Request.ServerVariables("APPL_PHYSICAL_PATH") & "Adeqstock"
    tabPages(1, 4) = false
    tabPages(2, 4) = "main.asp"
    tabPages(3, 4) = "/Adeqstock"
    tabPages(4, 4) = "ADEQSTOCK"
     
    sPat = trim(request("search"))	
     
    if sPat <> "" then			
     
    	iCptResult = 0
    	iAllWords = 0
    	h = 0
    	i = 0
    	j = 0
    	k = 0
     
    	'Séparation si besoins puis insertion des critéres de recherche dans tab
    	tab = Split(sPat," ")
    	nbEl = ubound(tab)
    	redim tab2(1, nbEl)
    	for h = 0 to nbEl 'remplissage de tab2
    		tab = tab2(0, h)
    		h = h + 1
    	next
     
    	if nbEl >= 1 then
    	 response.write "<br> Vous avez lancé une recherche sur "& nbEl + 1 &" mots : <b>" & affichage & "</b> <br /><br />"
    	else 
    	 response.write "<br> Vous avez lancé une recherche sur "& nbEl + 1 &" mot : <b>" & affichage & "</b> <br /><br />"
    	end if
    		for j = 0 to NB_APPLICATIONS_A_FOUILLER - 1 'Début boucle selon tabPages		
    			if tabPages(1, j) = true then 'Parcourir les sous-repertoires ou non
    				' Recherche récursive
    				set oDir = oWkFso.GetFolder(tabPages(0, j))
    				if tabPages(4, j) = "" or access(tabPages(4, j)) then 'Restriction d'accés : autorisé si vide ou possède l'accès
    					for each oD in oDir.SubFolders
    						sSummary = ""
    						if SearchInFile(sSummary, tab2, oD.Path & "\" & tabPages(2, j)) then
    							if request("allwords") = "checked" then 'Checkbox "Tous les mots"
    								for k = 0 to nbEl
    									if tab2(1, k) = true then 							
    										iAllWords = iAllWords + 1
    										k = k + 1
    									end if
    								next
    								if iAllWords = nbEl then
    									response.write "<b><A href=""" & replace(tabPages(3, j), "$1", oD.Name) & """>" & replace(tabPages(3, j), "$1", oD.Name) & "</A></b><br />" & vbnewline
    		  							response.write "<i>" & sSummary & "</i><br /><br />" & vbnewline 
    									iCptResult = iCptResult + 1
    								end if
    							else
    								response.write "<b><A href=""" & replace(tabPages(3, j), "$1", oD.Name) & """>" & replace(tabPages(3, j), "$1", oD.Name) & "</A></b><br />" & vbnewline
    								response.write "<i>" & sSummary & "</i><br /><br />" & vbnewline 
    								iCptResult = iCptResult + 1							
    							end if
    						end if
    					next
    				end if
    			else 'On ne recherche pas dans les sous-fichiers
    				if tabPages(4, j) = "" or access(tabPages(4, j)) then 'Restriction d'accés : autorisé si vide ou possède l'accès
    					sSummary = ""
    					if SearchInFile(sSummary, tab2, tabPages(0, j) & "\" & tabPages(2, j)) then
    					  if request("allwords") = "checked" then 'Checkbox "Tous les mots"
    								for k = 0 to nbEl
    									if tab2(1, k) = true then 							
    										iAllWords = iAllWords + 1
    										k = k + 1
    									end if
    								next
    								if iAllWords = nbEl then
    									response.write "<b><A href=""" & replace(tabPages(3, j), "$1", oD.Name) & """>" & replace(tabPages(3, j), "$1", oD.Name) & "</A></b><br />" & vbnewline
    									response.write "<i>" & sSummary & "</i><br /><br />" & vbnewline 
    									iCptResult = iCptResult + 1
    								end if
    					  else
    						response.write "<b><A href=""" & replace(tabPages(3, j), "$1", oD.Name) & """>" & replace(tabPages(3, j), "$1", oD.Name) & "</A></b><br />" & vbnewline
    						response.write "<i>" & sSummary & "</i><br /><br />" & vbnewline 
    						iCptResult = iCptResult + 1
    					  end if
    					end if
    				end if
    			end if
    		next ' Boucle tabPages
    	if iCptResult = 0 then 'Affiche le nombre de résultat(s) trouvé(s)
    		response.write "Désolé, aucune page trouvée pour votre recherche. <br />" & vbnewline
    		response.write " Veillez à l'<u>orthographe</u> des mots recherchés." 
    	else 	if iCptResult > 1 then
    				response.write "<b>" & iCptResult & "</b>" & " résultats trouvés pour votre recherche <br />" & vbnewline
    			else response.write "<b>" & iCptResult & "</b>" & " résultat trouvé pour votre recherche <br />" & vbnewline
    			end if
    	end if
    else 
    	response.write "<b>Entrez un critère de recherche</b>" & vbnewline
    end if
    Encore merci !

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Etant donné qu'un tableau commence avec l'indice zéro, il faut faire moins un dans les boucles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    for i = 0 to iNbWord - 1
    ...

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

Discussions similaires

  1. [XL-2013] Run-time error '9': Subscript out of range
    Par francoisem dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/12/2014, 10h06
  2. Réponses: 3
    Dernier message: 06/10/2014, 18h46
  3. [XL-2007] Error 9 : subscript out of range
    Par Me.Leti dans le forum Excel
    Réponses: 5
    Dernier message: 28/08/2012, 11h06
  4. Réponses: 2
    Dernier message: 15/08/2010, 17h20
  5. [debutant] Run-time error '9': Subscript out of range
    Par NikoBe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/12/2008, 09h26

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