problème après compilation...

problème après compilation... - VB/VBA/VBS - Programmation

Marsh Posté le 14-02-2005 à 09:34:18    

bonjour, j'ai un petit prob avec vb6. j'ai un programme qui marche sans problème en mod débug mais qui me retourne une erreur de type runtime error '91' (object variable non défini ou block with not set) une fois que je l'ai compilé en .exe
 
c'est un prob du compilateur?  qqn sait comment corriger ça? ou c'est juste mon code qui doit avoir un prob? mais alors pourquoi il passe lorsque vb6 est ouvert? je comprend pas...

Reply

Marsh Posté le 14-02-2005 à 09:34:18   

Reply

Marsh Posté le 14-02-2005 à 09:48:25    

Envoi le morceau qui bug une fois

Reply

Marsh Posté le 14-02-2005 à 10:03:03    

j'ai trouver un "truc" pour le faire passer finalement. si je rajoute un block:  

Code :
  1. With ma_form
  2.     mon_code   
  3. End With


ça passe. ce qui est un peu bête étant donnée que je travail avec une seule form... je sais pas pourquoi il veut que je la lui reprécise à chaque fois que je vais chercher des infos dessu
edit: ben maintenant ça marche plus avec ça non plus  :pt1cable:


Message édité par chnocombre le 14-02-2005 à 10:15:27
Reply

Marsh Posté le 14-02-2005 à 10:17:52    

voila le code (attention c'est long):

Code :
  1. Private Function funcMSN()
  2.    
  3.     '
  4.     'Declare Some variables for the process
  5.     '
  6.    
  7.     With frmAuditMaker
  8.        
  9.         'Domain and searchengine string
  10.         Dim strDomain As String
  11.         Dim strSearchEngine As String
  12.    
  13.         'Double for the navigation in the code
  14.         Dim dblStart As Double
  15.         Dim dblLen As Double
  16.        
  17.         'Byte for the place of the keywords
  18.         Dim bytPlaceCounter As Byte
  19.        
  20.         'String for the text check
  21.         Dim strKeywords As String
  22.         Dim strBody As String
  23.         Dim strCheck As String
  24.        
  25.         'Boolean if the domain is found
  26.         Dim boolTargetFound As Boolean
  27.        
  28.         'Html Object to read html code
  29.         Dim Webdoc As MSHTML.HTMLDocument
  30.         Set Webdoc = wbbViewer.document
  31.        
  32.         '
  33.         'Initialize Variables
  34.         '
  35.        
  36.         'Replace " " by + for the search engin and the é too
  37.         strKeywords = Replace(.txtKeywords, " ", "+" )
  38.         strKeywords = Replace(strKeywords, "é", "%C3%A9" )
  39.        
  40.         'Place Counter initialize
  41.         bytPlaceCounter = 1
  42.        
  43.         'Initialize Domain name
  44.         strDomain = .txtDomain.Text
  45.        
  46.         'Initialize searchengine
  47.         strSearchEngine = .cmbSearchEngine.Text
  48.        
  49.         'Load webPage
  50.         .wbbViewer.navigate strSearchEngine & "/results.aspx?q=" & strKeywords & "&FORM=QBHP"
  51.        
  52.         'Wait for the page to be full loaded
  53.         Do Until .wbbViewer.readyState = READYSTATE_COMPLETE
  54.         DoEvents
  55.         Loop
  56.        
  57.        
  58.         'Initialize to not found
  59.         boolTargetFound = False
  60.        
  61.         'Initialize the HTML Body to check
  62.         strBody = Webdoc.body.innerHTML
  63.        
  64.         'Initialize the check start
  65.         dblStart = 1
  66.        
  67.         'Initialize the place
  68.         bytPlaceCounter = 1
  69.        
  70.         'Initialize the starting point (for MSN only)
  71.         dblStart = InStr(dblStart, strBody, "</P></LI></UL></DIV></DIV>", vbTextCompare) + 1
  72.        
  73.         'Check the HTML for the 50 first result
  74.         Do Until bytPlaceCounter = 50
  75.            
  76.             'Récupération du texte de la page web:
  77.             dblStart = InStr(dblStart, strBody, "<H3><A href=", vbTextCompare) + 13
  78.            
  79.             'Obselete test, may be in use in the futur
  80.             'If Not (InStr(dblStart - 40, strBody, "<BLOCKQUOTE>", vbTextCompare)) > 20 Then
  81.            
  82.             'Initialize the lenght of string to check
  83.             dblLen = InStr(dblStart, strBody, ">", vbTextCompare) - 1
  84.            
  85.             'Save the string to check
  86.             strCheck = Mid(strBody, dblStart, (dblLen - dblStart))
  87.            
  88.             'Check the string
  89.             If Not InStr(1, strCheck, strDomain, vbTextCompare) = 0 Then
  90.            
  91.                 'Set the found variable to true
  92.                 boolTargetFound = True
  93.            
  94.                 'Exit the check
  95.                 Exit Do
  96.                
  97.             End If
  98.            
  99.             'Next place to check
  100.             bytPlaceCounter = bytPlaceCounter + 1
  101.                
  102.             'End If
  103.        
  104.         Loop
  105.        
  106.         'If the domain eas found
  107.         If boolTargetFound Then
  108.        
  109.             'Return the place found
  110.             funcMSN = bytPlaceCounter
  111.        
  112.         Else
  113.        
  114.             'Return the default value
  115.             funcMSN = "Not found in the 60 first result"
  116.        
  117.         End If
  118.        
  119.     End With
  120.        
  121. End Function


 
le but du programme: rechercher un lien pointant vers un site contenu dans strDomain, depuis une page d'un moteur de recherche (genre google) URL formée en partie de cmbSearchEngine et de strKeywords puis de trouver à quelle place ce site vient ce placer grace à bytPlaceCounter.


Message édité par chnocombre le 14-02-2005 à 10:23:19
Reply

Marsh Posté le 14-02-2005 à 10:20:22    

Ben genre avec les .txtDomain.Text, c'est normal qu'il te faut un bloc With ;)
 
Sinon, une remarque :D Tu as l'air de souffrir de commentite aiguë :D Je pense que des truc genre :

'Exit the check
Exit Do


Ne servent strictement à rien :/ Quand on commente un programme, on a l'habitude de ne commenter que les trucs chelous, pas les Exit Do ;)

Reply

Marsh Posté le 14-02-2005 à 10:25:39    

ouai je sais. mais comme je sais pas du tout qui risque de reprendre mon code un jour, je préfère tout notè... même les truc inutils (pis si on a un code avec 5 boucle Do imbriquée ça peut être bien de préciser la quelle on ferme meme si il y a les tabulations, même si 5 Do imbriquées c'est assez rare (pour ce que je fais) et un peu con...ça peut surement exister (bon le pour exit Do d'accord...)


Message édité par chnocombre le 14-02-2005 à 10:27:25
Reply

Marsh Posté le 14-02-2005 à 10:29:53    

pis tu va me dire que plutot de définir les variable dans la fonction j'aurais pu les importées depuis la sub ou je la lance mais comme je dois pouvoir fais des tests sur plusieur moteur de recherche différent j'ai trouver plus simple de faire une fonction par moteur... (je sais pas non plus si c'était un bon choix mais j'avais peur que le fait de débugguer l'un me casse le débuggage des autres :/)

Reply

Marsh Posté le 14-02-2005 à 10:30:27    

Le truc c'est que le Exit Do est explicite :) Autant alors mettre ça :

' Fin de la Sub
End Sub


:D
 
Aussi, dans ton cas, j'enlèverais le With, il ne sert pas à grand chose :/ Surtout que quand t'es plongé loin dans le code, si tu te rappelles plus sur quel objet porte le With :(
 
Même chose pour les 'Initialize searchengine. On voit bien que c'est une initialisation :D
 
Le problème en fait, c'est qu'il ne faut pas passer trop de temps à faire des commentaires. Il vaut mieux s'en tenir à l'essentiel, sinon t'en fini pas :)

Reply

Marsh Posté le 14-02-2005 à 10:32:43    

enfin, je comprend quand même pas pourquoi ça marche sans prob depuis VB6 et pas depuis l'exe...
edit: tiens j'ai pas mis de

Code :
  1. 'End of the Sub

j'ai du l'oublier  :sarcastic:


Message édité par chnocombre le 14-02-2005 à 10:35:05
Reply

Marsh Posté le 14-02-2005 à 10:33:26    

En debug, y'a toujours un tas de truc planqués en plus... Faudrait voir :(

Reply

Marsh Posté le 14-02-2005 à 10:33:26   

Reply

Marsh Posté le 14-02-2005 à 10:49:35    

j'ai fini par utiliser la méthode que la programmation intersidéral appelle quand elle n'est plus capable
de trouver une solution à ses problèmes, quand il ne reste plus aucun espoir :
l'innomable capitaine

Code :
  1. on error resume next

Reply

Marsh Posté le 14-02-2005 à 10:52:26    

pis une fois que j'ai du temps je regarderais plus a fond le problème et je posterais la soluce (si je la trouve évidemment :sarcastic:)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed