cs_marco62118
Messages postés176Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 1 avril 2013
-
30 janv. 2009 à 23:33
cs_marco62118
Messages postés176Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 1 avril 2013
-
1 févr. 2009 à 01:47
j'ai voulu créer un type et en faire un tableau puis chercher dans chaque élément une particularité mais j'ai un message d'erreur dont l'explication et l'aide n'est pas très compréhensible
Public Type AdresseWeb
ok As Boolean
adresse As String
End Type
Public adresse50 As AdresseWeb
Public adresse66 As AdresseWeb
Public adresse55 As AdresseWeb
Public adresse35 As AdresseWeb
Public adresse60 As AdresseWeb
Public adresse31 As AdresseWeb
Public adresse As AdresseWeb
Public AdressesWeb As Variant
For Each adresse In AdressesWeb
If adresse.ok = False Then
OuvreUrl adresse.adresse(Mot)
End If
Next
end sub
voici le message d'erreur "Erreur de Compilation : Seuls les types publics définis par l›utilisateur qui sont définis dans les modules objet publics peuvent être convertis depuis ou vers un variant ou passés à des fonctions à liaison tardive"
voici ce qu'en donne l'aide
"Seuls les types publics définis par l›utilisateur dans les modules objet publics peuvent être utilisés comme paramètres ou types renvoyés pour les procédures publiques des modules de classe ou comme champs des types publics définis par l›utilisateur
Cause et solution de cette erreur : Vous avez tenté d›utiliser un type public défini par l›utilisateur comme paramètre ou comme type renvoyé pour une procédure publique d›un module de classe, ou comme champ d›un type public défini par l›utilisateur. Seuls les types publics définis par l›utilisateur dans un module d›objet public peuvent être utilisés de cette façon. "
je pense bien qu'il y a un pb de définition des variables mais je ne trouve pas la solution .Comment devrais je définir cela
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 31 janv. 2009 à 20:08
Re
Ah c'est vrai que j'ai tiqué sur le TYPE mais je n'avais pas fait gaffe au Array qui est assez particulier comme le souligne "cnt"
C'est l'instruction ARRAY qui pose problème, pas la mise en tableau. Il suffit donc de s'en passer.
Une déclaration comme celle-ci suffit, sauf que l'index ne correspond pas aux chiffres de tes variables, il faudra donc que tu t'adapetes !
Public Type AdresseWeb
ok As Boolean
adresse As String
End Type
Public AdressesWeb() As AdresseWeb
Préparation du tableau avant de mettre les valeurs dedans :
ReDim AdressesWeb(0 To 5)
Pour entrer tes valeurs dans tes variables, il suffira de t'adresser à AdresseWeb(monIndex) au lieu des déclarations individuelles adresse50, adresse66 ...
Quand tu voudras faire une recherche :
Dim i As Byte
For i = 0 To 5
If AdressesWeb(i) .ok = False Then
'OuvreUrl AdressesWeb(i).adresse End If
Next i
Je n'ai pas bien compris ce que tu veux faire avec "Mot".
Adresse est une String
Adresse(Mot) n'a pas de sens
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 31 janv. 2009 à 00:51
Salut
Parce que tu as dû déclarer ces types publics dans une Classe ?
Si les variables doivent aussi être connues (accessibles) depuis l'hôte (le programme priuncipal qui utilisera cette classe), il faut qu'il puisse préparer une structure équivalente avant d'appeler la Classe.
Donc, la seuls solution est de placer ta déclaration de type dans un module, en public, toujours. De cette manière, tout le projet partagera cette définiton.
D'autre part, maîtrise bien les étendues des variables.
Tu sembles tout dimensionner en Public : Ce n'est pas une solution viable, tu t'en apercevras.
Opte aussi pour la déclaration obligatoire des variables avec "Option Explicit" en tête de chaque partie Déclarations des pages de code (Voir Option) : Ca t'oblige à dimensionner toutes tes variables. Ca peut sembler lourd, mais au contraire, cela permet de réflechir pour chacune d'elle à leur étendue : Devront-elles être accessible de partout (est-ce utile) ?
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_marco62118
Messages postés176Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 1 avril 20131 31 janv. 2009 à 14:46
bonjour
merci pour cettet prompte réponse.
c'est vrai j'ai tendance à mettre toutes les variables public car j'essaie de diviser mon prog enplusieur module et feuille mais il arrive souvent que ça bloque car les variables ne sont pas connus!
De plus je choisi toujours option explicit, c'est vrai aussi très contraignant et je n'ai pas vu vraiment l'intéret car sans cette option VB se débrouille bien pour définir les variables , mais enfin j'essaie de respecter les conventions puristes des programateur!
Ce n'ai pas un module de classe c'est un module ordinaire!
et avec ce message d'erreur VB surligne " AdressesWeb = Array(adresse50, adresse66, adresse55, adresse35, adresse60, adresse31)"
précision la procédure "ouvreUrl" est dans le même module.
Comment toi tu aurais déclaré tout ça?
merci encore
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 20101 31 janv. 2009 à 19:52
La réponse au sujet de l'utilisation de la fonction "Array" est dans l'aide MSDN de VB6.
En voici un extrait:
<title>Array, fonction</title><style><![CDATA[import url(msdn_ie4.css);]]></style><link disabled= "" href="msdn_ie3.css" rel="stylesheet" /> Note Une variable de type Variant non
déclarée comme tableau peut cependant en contenir un. Une variable de type
Variant peut contenir tout type de tableau, à l'exception des chaînes de
longueur fixe et de
<object id ="alink_9" type= "application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_9.Click() types définis par l'utilisateur]. Bien que
le concept de variable de type Variant contenant un tableau diffère d'un
tableau contenant des éléments de type Variant, la manière d'accéder aux
éléments du tableau est identique.
J'ai déja été confronté à ce problème et l'ai résolu comme ci-dessous
------------------------------------------------------------------
Option Explicit
Public Type AdresseWeb
ok As Boolean
adresse As String
End Type
Public adresse50 As AdresseWeb
Public adresse66 As AdresseWeb
Public adresse55 As AdresseWeb
Public adresse35 As AdresseWeb
Public adresse60 As AdresseWeb
Public adresse31 As AdresseWeb
Public adresse As AdresseWeb
Public AdressesWeb() As Variant
--------------------------------------
Public Sub RechercheDefinition(Mot As String)
Dim i As Byte
For i = 0 To 5
If AdressesWeb(1, i) = False Then
'OuvreUrl AdressesWeb(0, i)(Mot)
End If
Next i
End Sub
********************************
J'espère que cela répond au problème
Salut
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_marco62118
Messages postés176Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 1 avril 20131 1 févr. 2009 à 01:13
bonsoir et merci pour vos réponses , solutions .
je venais de trouver une méthode en suivant quelques messages sur ce forum en fait j'ai créé un module de class dans le quel j'ai mis
Option Explicit
Public OK As Boolean
Public Adresse As String
Public name As String
puis dans mon prog dans le module ordinaire
Option Explicit
'déclaration et attribution d'adresse web de "class1"
Private adresse50 As New Class1
Private adresse66 As New Class1
Private adresse55 As New Class1
Private adresse35 As New Class1
Private adresse60 As New Class1
Private adresse31 As New Class1
Private AdressesWeb As Variant 'tableau des adresses web
Public Sub RechercheDefinition(Mot As String)
Dim eltAdresse As Class1 'élément du tableau des adresses web
Dim shw As New ShellWindows 'collection de fenêtre window
Dim sW As New WebBrowser_V1 'fenêtre internet
Dim typeSW As String 'type de fenêtre windows
AdressesWeb = Array(adresse50, adresse66, adresse55, adresse35, adresse60, adresse31)
If PasPremiereRecherche = False Then
Mod_URL.AfficheUrl (Mot)
Else
For Each eltAdresse In AdressesWeb
eltAdresse.OK = False
Next
On Error Resume Next 'obligatoire sinon erreur à la premeière fenêtre
For Each sW In shw
typeSW = ""
typeSW = sW.Type
If typeSW = "Document HTML" Then
For Each eltAdresse In AdressesWeb
If sW.LocationURL = eltAdresse.name Then
eltAdresse.OK = True 'la page est trouvée
sW.Navigate eltAdresse.Adresse 'nouvelle recherche
Exit For
End If
Next
End If
Next
For Each eltAdresse In AdressesWeb
If eltAdresse.OK = False Then 'si la page n'a pas été retrouvée
OuvreUrl (eltAdresse.Adresse) 'ouverture d'une nouvelle recherche
End If
Next
End If
MotRechercheAntecedant = Mot 'enregistre le mot à rechercher
PasPremiereRecherche = True
End Sub
maintenat ceci fonctionne très bien
mais je crois que je vais reprendre votre formule pour éviter d'utiliser un module de classe
je vais me repencher ladessus
cs_marco62118
Messages postés176Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 1 avril 20131 1 févr. 2009 à 01:47
merci c'est impécable j'ai rectifié et ça me parrait plus simple mais l'utilisation de type personnel dans des tableaux pose énormément de problème même ensuite avec each ça ne fonctionne pas
merci
merci aussi à toi cnt qui a vu ma bévue