Vista avec VB6" />

Gros pb erreur 16 "expression trop complexe" après migr W2K--> Vista avec VB6

Résolu
Signaler
Messages postés
96
Date d'inscription
jeudi 24 janvier 2002
Statut
Membre
Dernière intervention
9 mai 2011
-
Messages postés
96
Date d'inscription
jeudi 24 janvier 2002
Statut
Membre
Dernière intervention
9 mai 2011
-
Bonjour

Je viens de passer de W2k sur Vista j'ai importé VB6 et appliqué le sp6 , mon programme fonctionnait parfaitement avant .

Je ne m'en sors pas le premier programme que je prend ( pour amelioration ) se plante lamentablement ,en erreur 16 "Expression trop complexe " ???? déjà sur la ligne en Bleu

En gros dans un picturebox j'affiche des images et je memorise dans une table (tab_img) leur implanation , au survol , je test de quelle image il s'agit , pour traitement .





Private Sub PlanImages_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim i As Integer, Xx As Integer, Yy As Integer
On Error GoTo err_Resume
PlanImages.ToolTipText = ""
If Not (Not Tab_Img) Then Xx x : Yy y
    For i = 0 To UBound(Tab_Img) - 1
.
.
etc







A l'origine j'avais ce test simplemenbt ( qui marchait ) :
        If x >= Tab_Img(i).Position_ImageX And x <= Tab_Img(i).Position_ImageX + LargShape And _
           y >= Tab_Img(i).Position_ImageY And y <= Tab_Img(i).Position_ImageY + HautShape Then

ça promet !!!!!

Je ne comprend plus là ...

Si vous avez un idée .....

Bon week a tous

5 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
évidemment c'est un param byte attendu dans l'exemple, t'as juste à remplacer par


ByRef
aArray()
As



tab_image
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Pourquoi changer ton code puisqu'il marchait ??

If Not (Not Tab_Img) Then ...
Ce code ne sert à rien. Les 2 Not s'annulent mutuellement. Cela revient à faire If Tab_Img Then, ce qui en soit est incohérent puisque Tab_Img n'est pas un boolean. Il faut que tu revoie ton test

Pour finir, l'erreur n'est pas sur la ligne en bleu. Si VB t'indique l'erreur là, c'est qu'il est complètement perdu à cause d'une autre erreur ailleurs.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
salut,

not not tab_img sert ici à savoir si tab_img est dimentionné

ce test peut justement amener cette erreur (16) alétoirement.

tu peux le remplacer par ce code :



<hr />
'    SAVOIR SI UN TABLEAU EXISTE (DIMENSION)
'    http://www.codyx.org/snippet_savoir-si-tableau-existe-dimension_231.aspx#2108
'    Posté par [ 401740 PCPT ] le 25/10/2008
<hr />




Private Declare Sub 
CopyMemory 
Lib 
"kernel32" 
Alias 
"RtlMoveMemory" 
(pDst 
As Any
, pSrc 
As Any

ByVal 
ByteLen
As Long
)


Private Declare Function 
VarPtrArray 
Lib 
"msvbvm60.dll" 
Alias 
"VarPtr" 
(Ptr() 
As Any

As Long


'


Function 
IsArrayNull(
ByRef 
aArray()
As Byte
)
As
Boolean

    Dim lVarPtr As Long, lRet As Long
    lVarPtr = VarPtrArray(aArray)
    Call CopyMemory(lRet, ByVal lVarPtr, 4&)
    IsArrayNull = (lRet = 0)
End Function





'----------------------------------------------------------------



'Remarques :


'le précédent code fonctionne, mais provoque "parfois" une erreur
16 (expression trop complexe), surtout si la compilation est en
p-code
'
'cette méthode est plus sûre, explication à cette adresse
:
'http://support.microsoft.com/kb/199824







tu peux aussi en profiter pour typer correctement XX as SINGLE et non as integer
++

<hr size ="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
96
Date d'inscription
jeudi 24 janvier 2002
Statut
Membre
Dernière intervention
9 mai 2011

Re ,

Merci a vous 2 pour vos réponses , j'ai modifié le code en substituant le test par isarraynull , je met aussi la declaration du tableau !!

Public Type Tab_Image
    Chemin_Image As String
    Label_Image_Ori As String
    Label_Image_Jpg As String
    Label_Image_sans_Ext As String
    Largeur_Image As Long
    Hauteur_Image As Long
    Largeur_Vignette As Long
    Hauteur_Vignette As Long
    Comment_Image As String
    Date_Image As Date
    Position_ImageX As Integer
    Position_ImageY As Integer
    Comment1 As String
    Comment2 As String
    Comment3 As String
    Comment4 As String
End Type

Public Tab_Img() As Tab_Image

Private Sub PlanImages_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim i As Integer
On Error Resume Next
PlanImages.ToolTipText = ""
' If Not (Not Tab_Img) Then
If Not IsArrayNull(Tab_Img()) Then

    For i = 0 To UBound(Tab_Img) - 1
        If x >= Tab_Img(i).Position_ImageX And x <= Tab_Img(i).Position_ImageX + LargShape And _
           y >= Tab_Img(i).Position_ImageY And y <= Tab_Img(i).Position_ImageY + HautShape Then

J'ai une erreur

Incompatibilité de type: Tableau ou type defini par l'utilisateur attendu !!!

Merci encore et A+
Messages postés
96
Date d'inscription
jeudi 24 janvier 2002
Statut
Membre
Dernière intervention
9 mai 2011

Gros merci PCPT pour ton efficacité , chapeau !

Bonne semaine a tous