Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
peut surement le faire d'une façon détourné.
Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
salut à tous,
Je souhaiterai avec un algo de tri générique qui prennent en parametre
Element (generique) et la fonction de comparaison propre à l'element
sur lequel mon tri ca fonctionner.
Suis je clair?
C'est à dire que je souhaiterai que ma function de tri dichotomique
marche sur des tableaux contenant n'importe quel type de donnée.
genre:
Public Function RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Generique) As Integer
Rem A chaque appel on divise le tableau restant en 2 pour ne
s'occuper apres comparaison que d'une partie
Rem Déclaration du milieu qui va servir d'élément de
comparaison Dim milieu As Integer
milieu = Int((Inf + Sup) / 2)
If Inf = Sup Then
RechercheDicho = Inf
ElseIf Elément <= tableau(milieu) Then
RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
Elément)
Else
RechercheDicho = RechercheDicho(milieu + 1, Sup,
tableau(), Elément)
End If
End Function
Public Type coordonnees
Rem N° rue
num_rue As String * 4
Rem libellé Voie :
libVoie As String * 32
Rem CP
codePostal As String * 5
Rem Localité
localité As String * 32
End Type
Utilisation
function ">" (c1 as coordonnees, c2 as coordonnees) as Boolean
if c1.codepostal > c2.codepostal
> = True
else
> = False
end if
end function
C'est pas sûr que le code soit tres correct mais ça vous donne idée
de ce que je cherche à faire.
Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
peut surement le faire d'une façon détourné.
Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
TIA
Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
peut surement le faire d'une façon détourné.
Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
salut à tous,
Je souhaiterai avec un algo de tri générique qui prennent en parametre
Element (generique) et la fonction de comparaison propre à l'element
sur lequel mon tri ca fonctionner.
Suis je clair?
C'est à dire que je souhaiterai que ma function de tri dichotomique
marche sur des tableaux contenant n'importe quel type de donnée.
genre:
Public Function RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Generique) As Integer
Rem A chaque appel on divise le tableau restant en 2 pour ne
s'occuper apres comparaison que d'une partie
Rem Déclaration du milieu qui va servir d'élément de
comparaison Dim milieu As Integer
milieu = Int((Inf + Sup) / 2)
If Inf = Sup Then
RechercheDicho = Inf
ElseIf Elément <= tableau(milieu) Then
RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
Elément)
Else
RechercheDicho = RechercheDicho(milieu + 1, Sup,
tableau(), Elément)
End If
End Function
Public Type coordonnees
Rem N° rue
num_rue As String * 4
Rem libellé Voie :
libVoie As String * 32
Rem CP
codePostal As String * 5
Rem Localité
localité As String * 32
End Type
Utilisation
function ">" (c1 as coordonnees, c2 as coordonnees) as Boolean
if c1.codepostal > c2.codepostal
> = True
else
> = False
end if
end function
C'est pas sûr que le code soit tres correct mais ça vous donne idée
de ce que je cherche à faire.
Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
peut surement le faire d'une façon détourné.
Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
TIA
Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
peut surement le faire d'une façon détourné.
Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
salut à tous,
Je souhaiterai avec un algo de tri générique qui prennent en parametre
Element (generique) et la fonction de comparaison propre à l'element
sur lequel mon tri ca fonctionner.
Suis je clair?
C'est à dire que je souhaiterai que ma function de tri dichotomique
marche sur des tableaux contenant n'importe quel type de donnée.
genre:
Public Function RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Generique) As Integer
Rem A chaque appel on divise le tableau restant en 2 pour ne
s'occuper apres comparaison que d'une partie
Rem Déclaration du milieu qui va servir d'élément de
comparaison Dim milieu As Integer
milieu = Int((Inf + Sup) / 2)
If Inf = Sup Then
RechercheDicho = Inf
ElseIf Elément <= tableau(milieu) Then
RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
Elément)
Else
RechercheDicho = RechercheDicho(milieu + 1, Sup,
tableau(), Elément)
End If
End Function
Public Type coordonnees
Rem N° rue
num_rue As String * 4
Rem libellé Voie :
libVoie As String * 32
Rem CP
codePostal As String * 5
Rem Localité
localité As String * 32
End Type
Utilisation
function ">" (c1 as coordonnees, c2 as coordonnees) as Boolean
if c1.codepostal > c2.codepostal
> = True
else
> = False
end if
end function
C'est pas sûr que le code soit tres correct mais ça vous donne idée
de ce que je cherche à faire.
Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
peut surement le faire d'une façon détourné.
Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
TIA
Hello,
> Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
> peut surement le faire d'une façon détourné.
> Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
Effectivement, CallByName pourrait t'être utile.
Il te faut commencer par nommer entrèrement des fonctions
Function GreatherThan(...) As Boolean
...
End Function
Function LowerThan(...) As Boolean
...
End Function
Ces fonctions doivent être forcément déclarées dans un objet (un module
standard, ça ne va pas)
Ensuite, au lieu de
If élément1 < élément2 Then :
If CallByName(ObjetContenantLesFonctions, "LowerThan", vbMethod, Element1,
Element2)
Il y a une autre méthode peut-être préférable, c'est de demander une
qui implémente un interface spécifique.
Exemple:
Dans un module de classe IComparaison:
Public Function LowerThan(...) As Boolean
End Function
Public Function GreatherThan(...) As Boolean
End Function
Dans une autre classe qui servira à un "groupe" d'éléments (dans cette
exemple on la nommera ComparaisonA):
Implements IComparaison
Public Function IComparaison_LowerThan(...) As Boolean
=> implémentation spécifique
End Function
'Idem pour GreatherThan
Enfin, dans ta procdure de tri:
Dim Comparaison As IComparaison
Set Comparaison = MonObjetDeTypeComparaisonA
(réalisé sans test, sujet à erreurs)
J'espères que ça pourra t'aider...
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" a écrit dans le message de
news:40828395$0$19506$
> salut à tous,
> Je souhaiterai avec un algo de tri générique qui prennent en parametre
> Element (generique) et la fonction de comparaison propre à l'element
> sur lequel mon tri ca fonctionner.
> Suis je clair?
> C'est à dire que je souhaiterai que ma function de tri dichotomique
> marche sur des tableaux contenant n'importe quel type de donnée.
>
> genre:
>
> Public Function RechercheDicho(Inf As Integer, Sup As Integer,
> tableau() As Variant, Elément As Generique) As Integer
> Rem A chaque appel on divise le tableau restant en 2 pour ne
> s'occuper apres comparaison que d'une partie
> Rem Déclaration du milieu qui va servir d'élément de
> comparaison Dim milieu As Integer
> milieu = Int((Inf + Sup) / 2)
>
> If Inf = Sup Then
> RechercheDicho = Inf
> ElseIf Elément <= tableau(milieu) Then
> RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
> Elément)
> Else
> RechercheDicho = RechercheDicho(milieu + 1, Sup,
> tableau(), Elément)
> End If
> End Function
>
> Public Type coordonnees
> Rem N° rue
> num_rue As String * 4
> Rem libellé Voie :
> libVoie As String * 32
> Rem CP
> codePostal As String * 5
> Rem Localité
> localité As String * 32
> End Type
>
>
> Utilisation
>
> function ">" (c1 as coordonnees, c2 as coordonnees) as Boolean
> if c1.codepostal > c2.codepostal
> > = True
> else
> > = False
> end if
> end function
>
> C'est pas sûr que le code soit tres correct mais ça vous donne idée
> de ce que je cherche à faire.
> Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
> peut surement le faire d'une façon détourné.
> Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
>
> TIA
Hello,
> Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
> peut surement le faire d'une façon détourné.
> Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
Effectivement, CallByName pourrait t'être utile.
Il te faut commencer par nommer entrèrement des fonctions
Function GreatherThan(...) As Boolean
...
End Function
Function LowerThan(...) As Boolean
...
End Function
Ces fonctions doivent être forcément déclarées dans un objet (un module
standard, ça ne va pas)
Ensuite, au lieu de
If élément1 < élément2 Then :
If CallByName(ObjetContenantLesFonctions, "LowerThan", vbMethod, Element1,
Element2)
Il y a une autre méthode peut-être préférable, c'est de demander une
qui implémente un interface spécifique.
Exemple:
Dans un module de classe IComparaison:
Public Function LowerThan(...) As Boolean
End Function
Public Function GreatherThan(...) As Boolean
End Function
Dans une autre classe qui servira à un "groupe" d'éléments (dans cette
exemple on la nommera ComparaisonA):
Implements IComparaison
Public Function IComparaison_LowerThan(...) As Boolean
=> implémentation spécifique
End Function
'Idem pour GreatherThan
Enfin, dans ta procdure de tri:
Dim Comparaison As IComparaison
Set Comparaison = MonObjetDeTypeComparaisonA
(réalisé sans test, sujet à erreurs)
J'espères que ça pourra t'aider...
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" <zegis.nospam@free.fr> a écrit dans le message de
news:40828395$0$19506$636a15ce@news.free.fr
> salut à tous,
> Je souhaiterai avec un algo de tri générique qui prennent en parametre
> Element (generique) et la fonction de comparaison propre à l'element
> sur lequel mon tri ca fonctionner.
> Suis je clair?
> C'est à dire que je souhaiterai que ma function de tri dichotomique
> marche sur des tableaux contenant n'importe quel type de donnée.
>
> genre:
>
> Public Function RechercheDicho(Inf As Integer, Sup As Integer,
> tableau() As Variant, Elément As Generique) As Integer
> Rem A chaque appel on divise le tableau restant en 2 pour ne
> s'occuper apres comparaison que d'une partie
> Rem Déclaration du milieu qui va servir d'élément de
> comparaison Dim milieu As Integer
> milieu = Int((Inf + Sup) / 2)
>
> If Inf = Sup Then
> RechercheDicho = Inf
> ElseIf Elément <= tableau(milieu) Then
> RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
> Elément)
> Else
> RechercheDicho = RechercheDicho(milieu + 1, Sup,
> tableau(), Elément)
> End If
> End Function
>
> Public Type coordonnees
> Rem N° rue
> num_rue As String * 4
> Rem libellé Voie :
> libVoie As String * 32
> Rem CP
> codePostal As String * 5
> Rem Localité
> localité As String * 32
> End Type
>
>
> Utilisation
>
> function ">" (c1 as coordonnees, c2 as coordonnees) as Boolean
> if c1.codepostal > c2.codepostal
> > = True
> else
> > = False
> end if
> end function
>
> C'est pas sûr que le code soit tres correct mais ça vous donne idée
> de ce que je cherche à faire.
> Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
> peut surement le faire d'une façon détourné.
> Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
>
> TIA
Hello,
> Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
> peut surement le faire d'une façon détourné.
> Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
Effectivement, CallByName pourrait t'être utile.
Il te faut commencer par nommer entrèrement des fonctions
Function GreatherThan(...) As Boolean
...
End Function
Function LowerThan(...) As Boolean
...
End Function
Ces fonctions doivent être forcément déclarées dans un objet (un module
standard, ça ne va pas)
Ensuite, au lieu de
If élément1 < élément2 Then :
If CallByName(ObjetContenantLesFonctions, "LowerThan", vbMethod, Element1,
Element2)
Il y a une autre méthode peut-être préférable, c'est de demander une
qui implémente un interface spécifique.
Exemple:
Dans un module de classe IComparaison:
Public Function LowerThan(...) As Boolean
End Function
Public Function GreatherThan(...) As Boolean
End Function
Dans une autre classe qui servira à un "groupe" d'éléments (dans cette
exemple on la nommera ComparaisonA):
Implements IComparaison
Public Function IComparaison_LowerThan(...) As Boolean
=> implémentation spécifique
End Function
'Idem pour GreatherThan
Enfin, dans ta procdure de tri:
Dim Comparaison As IComparaison
Set Comparaison = MonObjetDeTypeComparaisonA
(réalisé sans test, sujet à erreurs)
J'espères que ça pourra t'aider...
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" a écrit dans le message de
news:40828395$0$19506$
> salut à tous,
> Je souhaiterai avec un algo de tri générique qui prennent en parametre
> Element (generique) et la fonction de comparaison propre à l'element
> sur lequel mon tri ca fonctionner.
> Suis je clair?
> C'est à dire que je souhaiterai que ma function de tri dichotomique
> marche sur des tableaux contenant n'importe quel type de donnée.
>
> genre:
>
> Public Function RechercheDicho(Inf As Integer, Sup As Integer,
> tableau() As Variant, Elément As Generique) As Integer
> Rem A chaque appel on divise le tableau restant en 2 pour ne
> s'occuper apres comparaison que d'une partie
> Rem Déclaration du milieu qui va servir d'élément de
> comparaison Dim milieu As Integer
> milieu = Int((Inf + Sup) / 2)
>
> If Inf = Sup Then
> RechercheDicho = Inf
> ElseIf Elément <= tableau(milieu) Then
> RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
> Elément)
> Else
> RechercheDicho = RechercheDicho(milieu + 1, Sup,
> tableau(), Elément)
> End If
> End Function
>
> Public Type coordonnees
> Rem N° rue
> num_rue As String * 4
> Rem libellé Voie :
> libVoie As String * 32
> Rem CP
> codePostal As String * 5
> Rem Localité
> localité As String * 32
> End Type
>
>
> Utilisation
>
> function ">" (c1 as coordonnees, c2 as coordonnees) as Boolean
> if c1.codepostal > c2.codepostal
> > = True
> else
> > = False
> end if
> end function
>
> C'est pas sûr que le code soit tres correct mais ça vous donne idée
> de ce que je cherche à faire.
> Je crois savoir qu'on ne peut pas faire cela tel quel en VB6 mais on
> peut surement le faire d'une façon détourné.
> Qu'en est il de l'utilisation de CallByName, cela peut il m'aider?
>
> TIA
Enfin, dans ta procdure de tri:
Dim Comparaison As IComparaison
Set Comparaison = MonObjetDeTypeComparaisonA
Enfin, dans ta procdure de tri:
Dim Comparaison As IComparaison
Set Comparaison = MonObjetDeTypeComparaisonA
Enfin, dans ta procdure de tri:
Dim Comparaison As IComparaison
Set Comparaison = MonObjetDeTypeComparaisonA
C'est exactement ça qui m'interesse.
J'aimerai avoir des éclaircissement sur les 2 méthodes,
La 1ere:
Qu'est que tu entends par objet (j'ai du mal ;) ),
c'est une classe qui aura des propriété et des methodes en utilisant
GET et SET ?
Ma fonction de tri generique peut se trouver dans un module de classe?
Elle aura cette tête là (en gros) ?:
Merci de m'expliquer les references entre les modules car je ne les
comprends pas bien.
2è Methode:
Je fais une classe parent (IComparaison) contenant juste les noms des
functions sans code
Puis je fais une nouvelle classe (ComparaisonA) qui implementera les
fonctions précédentes mais de façon spécifique et qui heritera de la
classe IComparaison:
Enfin, dans ta procdure de tri:
Dim Comparaison As IComparaison
Set Comparaison = MonObjetDeTypeComparaisonA
Je vois pas bien à quoi elle ressemble et où elle se trouve cette
funtion de Tri.
Quelles st les criteres de choix entre ces 2 methodes?
C'est exactement ça qui m'interesse.
J'aimerai avoir des éclaircissement sur les 2 méthodes,
La 1ere:
Qu'est que tu entends par objet (j'ai du mal ;) ),
c'est une classe qui aura des propriété et des methodes en utilisant
GET et SET ?
Ma fonction de tri generique peut se trouver dans un module de classe?
Elle aura cette tête là (en gros) ?:
Merci de m'expliquer les references entre les modules car je ne les
comprends pas bien.
2è Methode:
Je fais une classe parent (IComparaison) contenant juste les noms des
functions sans code
Puis je fais une nouvelle classe (ComparaisonA) qui implementera les
fonctions précédentes mais de façon spécifique et qui heritera de la
classe IComparaison:
Enfin, dans ta procdure de tri:
Dim Comparaison As IComparaison
Set Comparaison = MonObjetDeTypeComparaisonA
Je vois pas bien à quoi elle ressemble et où elle se trouve cette
funtion de Tri.
Quelles st les criteres de choix entre ces 2 methodes?
C'est exactement ça qui m'interesse.
J'aimerai avoir des éclaircissement sur les 2 méthodes,
La 1ere:
Qu'est que tu entends par objet (j'ai du mal ;) ),
c'est une classe qui aura des propriété et des methodes en utilisant
GET et SET ?
Ma fonction de tri generique peut se trouver dans un module de classe?
Elle aura cette tête là (en gros) ?:
Merci de m'expliquer les references entre les modules car je ne les
comprends pas bien.
2è Methode:
Je fais une classe parent (IComparaison) contenant juste les noms des
functions sans code
Puis je fais une nouvelle classe (ComparaisonA) qui implementera les
fonctions précédentes mais de façon spécifique et qui heritera de la
classe IComparaison:
Enfin, dans ta procdure de tri:
Dim Comparaison As IComparaison
Set Comparaison = MonObjetDeTypeComparaisonA
Je vois pas bien à quoi elle ressemble et où elle se trouve cette
funtion de Tri.
Quelles st les criteres de choix entre ces 2 methodes?
Hello,
"Zeg" a écrit dans le message de
news:40829649$0$19488$
> C'est exactement ça qui m'interesse.
> J'aimerai avoir des éclaircissement sur les 2 méthodes,
> La 1ere:
> Qu'est que tu entends par objet (j'ai du mal ;) ),
> c'est une classe qui aura des propriété et des methodes en utilisant
> GET et SET ?
une classe, un contôle utilisateur, une form.. enfin pas un module
:-)
C'est parce que pour CallByName, il faut un objet en premier paramètre
pouvoir appeler la fonction.
> Ma fonction de tri generique peut se trouver dans un module de classe?
> Elle aura cette tête là (en gros) ?:
ouep
> Merci de m'expliquer les references entre les modules car je ne les
> comprends pas bien.
Il faut juste passer à ta fonction RechercheDicho l'objet contiendra les
fonctions LowerThan et GreatherThan.
Mais il se pourrait aussi que les fonctions LowerThan et GreatherThan
dans la même classe que la fonction RechercheDicho, auquel cas, le premier
argument de CallByName serait Me.
La seule raison pour laquelle j'ai évoqué qu'il fallait un objet est que
CallByName en requiert un.
Voici un exemple complet utilisant CallByName:
''Dans un module de Classe Specific
Public Sub Toto()
MsgBox "Specific"
End Sub
''Dans un module de Classe Specific2
Public Sub Toto()
MsgBox "Specific2"
End Sub
'Dans une Form avec un CommandButton, Command1:
Private Sub Command1_Click()
Dim ClsSpecific As Specific
Set ClsSpecific = New Specific
Dim ClsSpecific2 As Specific2
Set ClsSpecific2 = New Specific2
Test ClsSpecific
Test ClsSpecific2
Set ClsSpecific = Nothing
Set ClsSpecific2 = Nothing
End Sub
Private Function Test(objInterf As Object)
CallByName objInterf, "Toto", VbMethod
End Function
'----------------------------------------------------------------
> 2è Methode:
>
> Je fais une classe parent (IComparaison) contenant juste les noms des
> functions sans code
en fait, ce n'est pas une classe mais une interface.. que des prototypes,
pas de code :-)
> Puis je fais une nouvelle classe (ComparaisonA) qui implementera les
> fonctions précédentes mais de façon spécifique et qui heritera de la
> classe IComparaison:
ComparaisonA implémentera IComparaison de manière plus spécifique.
On a l'interface "de base" IComparaison qui définit ce qu'il faut
au minimum pour être "compatible" avec IComparaison.
>> Enfin, dans ta procdure de tri:
>> Dim Comparaison As IComparaison
>> Set Comparaison = MonObjetDeTypeComparaisonA
>
> Je vois pas bien à quoi elle ressemble et où elle se trouve cette
> funtion de Tri.
je voulais parler de la fonction RechercheDicho :-)
Mais dans ce cas, il s'agit d'un paramètre, comme dans le cas de
Voici un exemple complètement construit pour illustrer cette méthode:
'Dans un module de Classe IMyInterface:
Option Explicit
Public Sub Toto()
End Sub
Option Explicit
''Dans un module de Classe MaClasseSpécifique
Implements IMyInterface
Private Sub IMyInterface_Toto()
MsgBox "MaClasseSpécifique!"
End Sub
Public Sub Tata()
MsgBox "Tata"
End Sub
''Dans un module de Classe MaClasseSpécifique2
Implements IMyInterface
Private Sub IMyInterface_Toto()
MsgBox "MaClasseSpécifique2 !"
End Sub
Public Sub Titi()
MsgBox "Titi"
End Sub
'Dans une Form avec un CommandButton, Command1:
Private Sub Command1_Click()
Dim ClsSpecific As MaClasseSpécifique
Set ClsSpecific = New MaClasseSpécifique
Dim ClsSpecific2 As MaClasseSpécifique2
Set ClsSpecific2 = New MaClasseSpécifique2
Test ClsSpecific
Test ClsSpecific2
Set ClsSpecific = Nothing
Set ClsSpecific2 = Nothing
End Sub
Private Function Test(objInterf As IMyInterface)
objInterf.Toto
End Function
'----------------------------------------------------------------
> Quelles st les criteres de choix entre ces 2 methodes?
CallByName est plus lente mais moins spécifique qu'une interface, il me
semble.
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
Hello,
"Zeg" <zegis.nospam@free.fr> a écrit dans le message de
news:40829649$0$19488$636a15ce@news.free.fr
> C'est exactement ça qui m'interesse.
> J'aimerai avoir des éclaircissement sur les 2 méthodes,
> La 1ere:
> Qu'est que tu entends par objet (j'ai du mal ;) ),
> c'est une classe qui aura des propriété et des methodes en utilisant
> GET et SET ?
une classe, un contôle utilisateur, une form.. enfin pas un module
:-)
C'est parce que pour CallByName, il faut un objet en premier paramètre
pouvoir appeler la fonction.
> Ma fonction de tri generique peut se trouver dans un module de classe?
> Elle aura cette tête là (en gros) ?:
ouep
> Merci de m'expliquer les references entre les modules car je ne les
> comprends pas bien.
Il faut juste passer à ta fonction RechercheDicho l'objet contiendra les
fonctions LowerThan et GreatherThan.
Mais il se pourrait aussi que les fonctions LowerThan et GreatherThan
dans la même classe que la fonction RechercheDicho, auquel cas, le premier
argument de CallByName serait Me.
La seule raison pour laquelle j'ai évoqué qu'il fallait un objet est que
CallByName en requiert un.
Voici un exemple complet utilisant CallByName:
''Dans un module de Classe Specific
Public Sub Toto()
MsgBox "Specific"
End Sub
''Dans un module de Classe Specific2
Public Sub Toto()
MsgBox "Specific2"
End Sub
'Dans une Form avec un CommandButton, Command1:
Private Sub Command1_Click()
Dim ClsSpecific As Specific
Set ClsSpecific = New Specific
Dim ClsSpecific2 As Specific2
Set ClsSpecific2 = New Specific2
Test ClsSpecific
Test ClsSpecific2
Set ClsSpecific = Nothing
Set ClsSpecific2 = Nothing
End Sub
Private Function Test(objInterf As Object)
CallByName objInterf, "Toto", VbMethod
End Function
'----------------------------------------------------------------
> 2è Methode:
>
> Je fais une classe parent (IComparaison) contenant juste les noms des
> functions sans code
en fait, ce n'est pas une classe mais une interface.. que des prototypes,
pas de code :-)
> Puis je fais une nouvelle classe (ComparaisonA) qui implementera les
> fonctions précédentes mais de façon spécifique et qui heritera de la
> classe IComparaison:
ComparaisonA implémentera IComparaison de manière plus spécifique.
On a l'interface "de base" IComparaison qui définit ce qu'il faut
au minimum pour être "compatible" avec IComparaison.
>> Enfin, dans ta procdure de tri:
>> Dim Comparaison As IComparaison
>> Set Comparaison = MonObjetDeTypeComparaisonA
>
> Je vois pas bien à quoi elle ressemble et où elle se trouve cette
> funtion de Tri.
je voulais parler de la fonction RechercheDicho :-)
Mais dans ce cas, il s'agit d'un paramètre, comme dans le cas de
Voici un exemple complètement construit pour illustrer cette méthode:
'Dans un module de Classe IMyInterface:
Option Explicit
Public Sub Toto()
End Sub
Option Explicit
''Dans un module de Classe MaClasseSpécifique
Implements IMyInterface
Private Sub IMyInterface_Toto()
MsgBox "MaClasseSpécifique!"
End Sub
Public Sub Tata()
MsgBox "Tata"
End Sub
''Dans un module de Classe MaClasseSpécifique2
Implements IMyInterface
Private Sub IMyInterface_Toto()
MsgBox "MaClasseSpécifique2 !"
End Sub
Public Sub Titi()
MsgBox "Titi"
End Sub
'Dans une Form avec un CommandButton, Command1:
Private Sub Command1_Click()
Dim ClsSpecific As MaClasseSpécifique
Set ClsSpecific = New MaClasseSpécifique
Dim ClsSpecific2 As MaClasseSpécifique2
Set ClsSpecific2 = New MaClasseSpécifique2
Test ClsSpecific
Test ClsSpecific2
Set ClsSpecific = Nothing
Set ClsSpecific2 = Nothing
End Sub
Private Function Test(objInterf As IMyInterface)
objInterf.Toto
End Function
'----------------------------------------------------------------
> Quelles st les criteres de choix entre ces 2 methodes?
CallByName est plus lente mais moins spécifique qu'une interface, il me
semble.
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
Hello,
"Zeg" a écrit dans le message de
news:40829649$0$19488$
> C'est exactement ça qui m'interesse.
> J'aimerai avoir des éclaircissement sur les 2 méthodes,
> La 1ere:
> Qu'est que tu entends par objet (j'ai du mal ;) ),
> c'est une classe qui aura des propriété et des methodes en utilisant
> GET et SET ?
une classe, un contôle utilisateur, une form.. enfin pas un module
:-)
C'est parce que pour CallByName, il faut un objet en premier paramètre
pouvoir appeler la fonction.
> Ma fonction de tri generique peut se trouver dans un module de classe?
> Elle aura cette tête là (en gros) ?:
ouep
> Merci de m'expliquer les references entre les modules car je ne les
> comprends pas bien.
Il faut juste passer à ta fonction RechercheDicho l'objet contiendra les
fonctions LowerThan et GreatherThan.
Mais il se pourrait aussi que les fonctions LowerThan et GreatherThan
dans la même classe que la fonction RechercheDicho, auquel cas, le premier
argument de CallByName serait Me.
La seule raison pour laquelle j'ai évoqué qu'il fallait un objet est que
CallByName en requiert un.
Voici un exemple complet utilisant CallByName:
''Dans un module de Classe Specific
Public Sub Toto()
MsgBox "Specific"
End Sub
''Dans un module de Classe Specific2
Public Sub Toto()
MsgBox "Specific2"
End Sub
'Dans une Form avec un CommandButton, Command1:
Private Sub Command1_Click()
Dim ClsSpecific As Specific
Set ClsSpecific = New Specific
Dim ClsSpecific2 As Specific2
Set ClsSpecific2 = New Specific2
Test ClsSpecific
Test ClsSpecific2
Set ClsSpecific = Nothing
Set ClsSpecific2 = Nothing
End Sub
Private Function Test(objInterf As Object)
CallByName objInterf, "Toto", VbMethod
End Function
'----------------------------------------------------------------
> 2è Methode:
>
> Je fais une classe parent (IComparaison) contenant juste les noms des
> functions sans code
en fait, ce n'est pas une classe mais une interface.. que des prototypes,
pas de code :-)
> Puis je fais une nouvelle classe (ComparaisonA) qui implementera les
> fonctions précédentes mais de façon spécifique et qui heritera de la
> classe IComparaison:
ComparaisonA implémentera IComparaison de manière plus spécifique.
On a l'interface "de base" IComparaison qui définit ce qu'il faut
au minimum pour être "compatible" avec IComparaison.
>> Enfin, dans ta procdure de tri:
>> Dim Comparaison As IComparaison
>> Set Comparaison = MonObjetDeTypeComparaisonA
>
> Je vois pas bien à quoi elle ressemble et où elle se trouve cette
> funtion de Tri.
je voulais parler de la fonction RechercheDicho :-)
Mais dans ce cas, il s'agit d'un paramètre, comme dans le cas de
Voici un exemple complètement construit pour illustrer cette méthode:
'Dans un module de Classe IMyInterface:
Option Explicit
Public Sub Toto()
End Sub
Option Explicit
''Dans un module de Classe MaClasseSpécifique
Implements IMyInterface
Private Sub IMyInterface_Toto()
MsgBox "MaClasseSpécifique!"
End Sub
Public Sub Tata()
MsgBox "Tata"
End Sub
''Dans un module de Classe MaClasseSpécifique2
Implements IMyInterface
Private Sub IMyInterface_Toto()
MsgBox "MaClasseSpécifique2 !"
End Sub
Public Sub Titi()
MsgBox "Titi"
End Sub
'Dans une Form avec un CommandButton, Command1:
Private Sub Command1_Click()
Dim ClsSpecific As MaClasseSpécifique
Set ClsSpecific = New MaClasseSpécifique
Dim ClsSpecific2 As MaClasseSpécifique2
Set ClsSpecific2 = New MaClasseSpécifique2
Test ClsSpecific
Test ClsSpecific2
Set ClsSpecific = Nothing
Set ClsSpecific2 = Nothing
End Sub
Private Function Test(objInterf As IMyInterface)
objInterf.Toto
End Function
'----------------------------------------------------------------
> Quelles st les criteres de choix entre ces 2 methodes?
CallByName est plus lente mais moins spécifique qu'une interface, il me
semble.
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
Merci beaucoup pour les précisions.
Je suis en train d'essayer la premiere methode (CallByName) en
faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
Form:
Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
End Function
Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
J'ai une dll/activeX qui contient ma function de
RechercheDichotomique dans un module de classe et qui est defini
comme suit:
Public Function RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Variant, Objet As Object) As Integer
Dim milieu As Integer
milieu = Int((Inf + Sup) / 2)
If Inf = Sup Then
RechercheDicho = Inf
ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod, Elément,
tableau(milieu)) Then
RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
Elément, Objet)
Else
RechercheDicho = RechercheDicho(milieu + 1, Sup,
tableau(), Elément, Objet)
End If
End Function
Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
ElseIf CallByName..... dans la function RechercheDichotomique.
Merci beaucoup pour les précisions.
Je suis en train d'essayer la premiere methode (CallByName) en
faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
Form:
Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
End Function
Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
J'ai une dll/activeX qui contient ma function de
RechercheDichotomique dans un module de classe et qui est defini
comme suit:
Public Function RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Variant, Objet As Object) As Integer
Dim milieu As Integer
milieu = Int((Inf + Sup) / 2)
If Inf = Sup Then
RechercheDicho = Inf
ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod, Elément,
tableau(milieu)) Then
RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
Elément, Objet)
Else
RechercheDicho = RechercheDicho(milieu + 1, Sup,
tableau(), Elément, Objet)
End If
End Function
Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
ElseIf CallByName..... dans la function RechercheDichotomique.
Merci beaucoup pour les précisions.
Je suis en train d'essayer la premiere methode (CallByName) en
faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
Form:
Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
End Function
Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
J'ai une dll/activeX qui contient ma function de
RechercheDichotomique dans un module de classe et qui est defini
comme suit:
Public Function RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Variant, Objet As Object) As Integer
Dim milieu As Integer
milieu = Int((Inf + Sup) / 2)
If Inf = Sup Then
RechercheDicho = Inf
ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod, Elément,
tableau(milieu)) Then
RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
Elément, Objet)
Else
RechercheDicho = RechercheDicho(milieu + 1, Sup,
tableau(), Elément, Objet)
End If
End Function
Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
ElseIf CallByName..... dans la function RechercheDichotomique.
Hello,
tu as un type incompatible parce que tu passe du variant (Elément,
tableau(milieu)) à de l'integer (c1, c2).
Il suffit donc de modifier ta fonction de comparaison comme ceci:
Function LowerOrEqualThan(c1 As Variant, c2 As Variant) As Boolean
If VarType(c1) = vbInteger And VarType(c2) = vbInteger Then
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
Else
Err.Raise 13 'type incompatible
End If
End Function
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" a écrit dans le message de
news:4082cdf6$0$19480$
> Merci beaucoup pour les précisions.
> Je suis en train d'essayer la premiere methode (CallByName) en
> faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
> Form:
> Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
> If c1 <= c2 Then
> LowerOrEqualThan = True
> Else
> LowerOrEqualThan = False
> End If
> End Function
>
> Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
>
> J'ai une dll/activeX qui contient ma function de
> RechercheDichotomique dans un module de classe et qui est defini
> comme suit:
>
> Public Function RechercheDicho(Inf As Integer, Sup As Integer,
> tableau() As Variant, Elément As Variant, Objet As Object) As Integer
> Dim milieu As Integer
> milieu = Int((Inf + Sup) / 2)
>
> If Inf = Sup Then
> RechercheDicho = Inf
> ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod, Elément,
> tableau(milieu)) Then
> RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
> Elément, Objet)
> Else
> RechercheDicho = RechercheDicho(milieu + 1, Sup,
> tableau(), Elément, Objet)
> End If
> End Function
>
> Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
> ElseIf CallByName..... dans la function RechercheDichotomique.
Hello,
tu as un type incompatible parce que tu passe du variant (Elément,
tableau(milieu)) à de l'integer (c1, c2).
Il suffit donc de modifier ta fonction de comparaison comme ceci:
Function LowerOrEqualThan(c1 As Variant, c2 As Variant) As Boolean
If VarType(c1) = vbInteger And VarType(c2) = vbInteger Then
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
Else
Err.Raise 13 'type incompatible
End If
End Function
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" <zegis.nospam@free.fr> a écrit dans le message de
news:4082cdf6$0$19480$636a15ce@news.free.fr
> Merci beaucoup pour les précisions.
> Je suis en train d'essayer la premiere methode (CallByName) en
> faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
> Form:
> Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
> If c1 <= c2 Then
> LowerOrEqualThan = True
> Else
> LowerOrEqualThan = False
> End If
> End Function
>
> Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
>
> J'ai une dll/activeX qui contient ma function de
> RechercheDichotomique dans un module de classe et qui est defini
> comme suit:
>
> Public Function RechercheDicho(Inf As Integer, Sup As Integer,
> tableau() As Variant, Elément As Variant, Objet As Object) As Integer
> Dim milieu As Integer
> milieu = Int((Inf + Sup) / 2)
>
> If Inf = Sup Then
> RechercheDicho = Inf
> ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod, Elément,
> tableau(milieu)) Then
> RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
> Elément, Objet)
> Else
> RechercheDicho = RechercheDicho(milieu + 1, Sup,
> tableau(), Elément, Objet)
> End If
> End Function
>
> Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
> ElseIf CallByName..... dans la function RechercheDichotomique.
Hello,
tu as un type incompatible parce que tu passe du variant (Elément,
tableau(milieu)) à de l'integer (c1, c2).
Il suffit donc de modifier ta fonction de comparaison comme ceci:
Function LowerOrEqualThan(c1 As Variant, c2 As Variant) As Boolean
If VarType(c1) = vbInteger And VarType(c2) = vbInteger Then
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
Else
Err.Raise 13 'type incompatible
End If
End Function
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" a écrit dans le message de
news:4082cdf6$0$19480$
> Merci beaucoup pour les précisions.
> Je suis en train d'essayer la premiere methode (CallByName) en
> faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
> Form:
> Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
> If c1 <= c2 Then
> LowerOrEqualThan = True
> Else
> LowerOrEqualThan = False
> End If
> End Function
>
> Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
>
> J'ai une dll/activeX qui contient ma function de
> RechercheDichotomique dans un module de classe et qui est defini
> comme suit:
>
> Public Function RechercheDicho(Inf As Integer, Sup As Integer,
> tableau() As Variant, Elément As Variant, Objet As Object) As Integer
> Dim milieu As Integer
> milieu = Int((Inf + Sup) / 2)
>
> If Inf = Sup Then
> RechercheDicho = Inf
> ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod, Elément,
> tableau(milieu)) Then
> RechercheDicho = RechercheDicho(Inf, milieu, tableau(),
> Elément, Objet)
> Else
> RechercheDicho = RechercheDicho(milieu + 1, Sup,
> tableau(), Elément, Objet)
> End If
> End Function
>
> Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
> ElseIf CallByName..... dans la function RechercheDichotomique.
Oui en effet cela marche mieux;)
Seulement, le fait de définir la fontion LowerOrEqualThan permet de
définir une comparaison sur n'importe quel type,
mais lors de l'appel de RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Variant, Objet As Object) As Integer
comment passer un argument un Elément de n'importe quel type à
rechercher dans un tableau contenant des elements de ce même type :
des integer, des type predefinis etc.
Finalement je suis bloqué avec tableau() As Variant, Elément As
Variant ma fonction n'est plus generique.
Je suis obligé de lui passer un type Variant :(
"François Picalausa" a écrit dans le message de
news:Hello,
tu as un type incompatible parce que tu passe du variant (Elément,
tableau(milieu)) à de l'integer (c1, c2).
Il suffit donc de modifier ta fonction de comparaison comme ceci:
Function LowerOrEqualThan(c1 As Variant, c2 As Variant) As Boolean
If VarType(c1) = vbInteger And VarType(c2) = vbInteger Then
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
Else
Err.Raise 13 'type incompatible
End If
End Function
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" a écrit dans le message de
news:4082cdf6$0$19480$Merci beaucoup pour les précisions.
Je suis en train d'essayer la premiere methode (CallByName) en
faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
Form:
Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
End Function
Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
J'ai une dll/activeX qui contient ma function de
RechercheDichotomique dans un module de classe et qui est defini
comme suit:
Public Function RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Variant, Objet As Object) As
Integer Dim milieu As Integer
milieu = Int((Inf + Sup) / 2)
If Inf = Sup Then
RechercheDicho = Inf
ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod,
Elément, tableau(milieu)) Then
RechercheDicho = RechercheDicho(Inf, milieu,
tableau(), Elément, Objet)
Else
RechercheDicho = RechercheDicho(milieu + 1, Sup,
tableau(), Elément, Objet)
End If
End Function
Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
ElseIf CallByName..... dans la function RechercheDichotomique.
Oui en effet cela marche mieux;)
Seulement, le fait de définir la fontion LowerOrEqualThan permet de
définir une comparaison sur n'importe quel type,
mais lors de l'appel de RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Variant, Objet As Object) As Integer
comment passer un argument un Elément de n'importe quel type à
rechercher dans un tableau contenant des elements de ce même type :
des integer, des type predefinis etc.
Finalement je suis bloqué avec tableau() As Variant, Elément As
Variant ma fonction n'est plus generique.
Je suis obligé de lui passer un type Variant :(
"François Picalausa" <fpicalausa@chez.com> a écrit dans le message de
news: uOYe8mXJEHA.1764@TK2MSFTNGP12.phx.gbl...
Hello,
tu as un type incompatible parce que tu passe du variant (Elément,
tableau(milieu)) à de l'integer (c1, c2).
Il suffit donc de modifier ta fonction de comparaison comme ceci:
Function LowerOrEqualThan(c1 As Variant, c2 As Variant) As Boolean
If VarType(c1) = vbInteger And VarType(c2) = vbInteger Then
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
Else
Err.Raise 13 'type incompatible
End If
End Function
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" <zegis.nospam@free.fr> a écrit dans le message de
news:4082cdf6$0$19480$636a15ce@news.free.fr
Merci beaucoup pour les précisions.
Je suis en train d'essayer la premiere methode (CallByName) en
faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
Form:
Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
End Function
Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
J'ai une dll/activeX qui contient ma function de
RechercheDichotomique dans un module de classe et qui est defini
comme suit:
Public Function RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Variant, Objet As Object) As
Integer Dim milieu As Integer
milieu = Int((Inf + Sup) / 2)
If Inf = Sup Then
RechercheDicho = Inf
ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod,
Elément, tableau(milieu)) Then
RechercheDicho = RechercheDicho(Inf, milieu,
tableau(), Elément, Objet)
Else
RechercheDicho = RechercheDicho(milieu + 1, Sup,
tableau(), Elément, Objet)
End If
End Function
Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
ElseIf CallByName..... dans la function RechercheDichotomique.
Oui en effet cela marche mieux;)
Seulement, le fait de définir la fontion LowerOrEqualThan permet de
définir une comparaison sur n'importe quel type,
mais lors de l'appel de RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Variant, Objet As Object) As Integer
comment passer un argument un Elément de n'importe quel type à
rechercher dans un tableau contenant des elements de ce même type :
des integer, des type predefinis etc.
Finalement je suis bloqué avec tableau() As Variant, Elément As
Variant ma fonction n'est plus generique.
Je suis obligé de lui passer un type Variant :(
"François Picalausa" a écrit dans le message de
news:Hello,
tu as un type incompatible parce que tu passe du variant (Elément,
tableau(milieu)) à de l'integer (c1, c2).
Il suffit donc de modifier ta fonction de comparaison comme ceci:
Function LowerOrEqualThan(c1 As Variant, c2 As Variant) As Boolean
If VarType(c1) = vbInteger And VarType(c2) = vbInteger Then
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
Else
Err.Raise 13 'type incompatible
End If
End Function
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" a écrit dans le message de
news:4082cdf6$0$19480$Merci beaucoup pour les précisions.
Je suis en train d'essayer la premiere methode (CallByName) en
faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
Form:
Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
If c1 <= c2 Then
LowerOrEqualThan = True
Else
LowerOrEqualThan = False
End If
End Function
Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
J'ai une dll/activeX qui contient ma function de
RechercheDichotomique dans un module de classe et qui est defini
comme suit:
Public Function RechercheDicho(Inf As Integer, Sup As Integer,
tableau() As Variant, Elément As Variant, Objet As Object) As
Integer Dim milieu As Integer
milieu = Int((Inf + Sup) / 2)
If Inf = Sup Then
RechercheDicho = Inf
ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod,
Elément, tableau(milieu)) Then
RechercheDicho = RechercheDicho(Inf, milieu,
tableau(), Elément, Objet)
Else
RechercheDicho = RechercheDicho(milieu + 1, Sup,
tableau(), Elément, Objet)
End If
End Function
Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
ElseIf CallByName..... dans la function RechercheDichotomique.
Hello,
Le variant est malheureusement ce qu'il y a de plus générique...
Un variant peut contenir un objet, une chaine de caractères, un nombre ...
Mais effectivement, il faut que ton tableau passé as Variant.
Si tu es sûr de ne travailler que sur des objets, tu pourrais redéfinir
tableau As Object et ton Element As Object, je pense que ça se
plus de ce que tu veux.
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" a écrit dans le message de
news:4082da09$0$19480$
> Oui en effet cela marche mieux;)
> Seulement, le fait de définir la fontion LowerOrEqualThan permet de
> définir une comparaison sur n'importe quel type,
> mais lors de l'appel de RechercheDicho(Inf As Integer, Sup As Integer,
> tableau() As Variant, Elément As Variant, Objet As Object) As Integer
> comment passer un argument un Elément de n'importe quel type à
> rechercher dans un tableau contenant des elements de ce même type :
> des integer, des type predefinis etc.
> Finalement je suis bloqué avec tableau() As Variant, Elément As
> Variant ma fonction n'est plus generique.
> Je suis obligé de lui passer un type Variant :(
>
>
> "François Picalausa" a écrit dans le message de
> news:
>> Hello,
>>
>> tu as un type incompatible parce que tu passe du variant (Elément,
>> tableau(milieu)) à de l'integer (c1, c2).
>> Il suffit donc de modifier ta fonction de comparaison comme ceci:
>>
>> Function LowerOrEqualThan(c1 As Variant, c2 As Variant) As Boolean
>> If VarType(c1) = vbInteger And VarType(c2) = vbInteger Then
>> If c1 <= c2 Then
>> LowerOrEqualThan = True
>> Else
>> LowerOrEqualThan = False
>> End If
>> Else
>> Err.Raise 13 'type incompatible
>> End If
>> End Function
>>
>> --
>> François Picalausa (MVP VB)
>> http://faq.vb.free.fr --- http://msdn.microsoft.com
>> http://apisvb.europe.webmatrixhosting.net
>>
>> "Zeg" a écrit dans le message de
>> news:4082cdf6$0$19480$
>>> Merci beaucoup pour les précisions.
>>> Je suis en train d'essayer la premiere methode (CallByName) en
>>> faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
>>> Form:
>>> Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
>>> If c1 <= c2 Then
>>> LowerOrEqualThan = True
>>> Else
>>> LowerOrEqualThan = False
>>> End If
>>> End Function
>>>
>>> Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
>>>
>>> J'ai une dll/activeX qui contient ma function de
>>> RechercheDichotomique dans un module de classe et qui est defini
>>> comme suit:
>>>
>>> Public Function RechercheDicho(Inf As Integer, Sup As Integer,
>>> tableau() As Variant, Elément As Variant, Objet As Object) As
>>> Integer Dim milieu As Integer
>>> milieu = Int((Inf + Sup) / 2)
>>>
>>> If Inf = Sup Then
>>> RechercheDicho = Inf
>>> ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod,
>>> Elément, tableau(milieu)) Then
>>> RechercheDicho = RechercheDicho(Inf, milieu,
>>> tableau(), Elément, Objet)
>>> Else
>>> RechercheDicho = RechercheDicho(milieu + 1, Sup,
>>> tableau(), Elément, Objet)
>>> End If
>>> End Function
>>>
>>> Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
>>> ElseIf CallByName..... dans la function RechercheDichotomique.
Hello,
Le variant est malheureusement ce qu'il y a de plus générique...
Un variant peut contenir un objet, une chaine de caractères, un nombre ...
Mais effectivement, il faut que ton tableau passé as Variant.
Si tu es sûr de ne travailler que sur des objets, tu pourrais redéfinir
tableau As Object et ton Element As Object, je pense que ça se
plus de ce que tu veux.
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" <zegis.nospam@free.fr> a écrit dans le message de
news:4082da09$0$19480$636a15ce@news.free.fr
> Oui en effet cela marche mieux;)
> Seulement, le fait de définir la fontion LowerOrEqualThan permet de
> définir une comparaison sur n'importe quel type,
> mais lors de l'appel de RechercheDicho(Inf As Integer, Sup As Integer,
> tableau() As Variant, Elément As Variant, Objet As Object) As Integer
> comment passer un argument un Elément de n'importe quel type à
> rechercher dans un tableau contenant des elements de ce même type :
> des integer, des type predefinis etc.
> Finalement je suis bloqué avec tableau() As Variant, Elément As
> Variant ma fonction n'est plus generique.
> Je suis obligé de lui passer un type Variant :(
>
>
> "François Picalausa" <fpicalausa@chez.com> a écrit dans le message de
> news: uOYe8mXJEHA.1764@TK2MSFTNGP12.phx.gbl...
>> Hello,
>>
>> tu as un type incompatible parce que tu passe du variant (Elément,
>> tableau(milieu)) à de l'integer (c1, c2).
>> Il suffit donc de modifier ta fonction de comparaison comme ceci:
>>
>> Function LowerOrEqualThan(c1 As Variant, c2 As Variant) As Boolean
>> If VarType(c1) = vbInteger And VarType(c2) = vbInteger Then
>> If c1 <= c2 Then
>> LowerOrEqualThan = True
>> Else
>> LowerOrEqualThan = False
>> End If
>> Else
>> Err.Raise 13 'type incompatible
>> End If
>> End Function
>>
>> --
>> François Picalausa (MVP VB)
>> http://faq.vb.free.fr --- http://msdn.microsoft.com
>> http://apisvb.europe.webmatrixhosting.net
>>
>> "Zeg" <zegis.nospam@free.fr> a écrit dans le message de
>> news:4082cdf6$0$19480$636a15ce@news.free.fr
>>> Merci beaucoup pour les précisions.
>>> Je suis en train d'essayer la premiere methode (CallByName) en
>>> faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
>>> Form:
>>> Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
>>> If c1 <= c2 Then
>>> LowerOrEqualThan = True
>>> Else
>>> LowerOrEqualThan = False
>>> End If
>>> End Function
>>>
>>> Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
>>>
>>> J'ai une dll/activeX qui contient ma function de
>>> RechercheDichotomique dans un module de classe et qui est defini
>>> comme suit:
>>>
>>> Public Function RechercheDicho(Inf As Integer, Sup As Integer,
>>> tableau() As Variant, Elément As Variant, Objet As Object) As
>>> Integer Dim milieu As Integer
>>> milieu = Int((Inf + Sup) / 2)
>>>
>>> If Inf = Sup Then
>>> RechercheDicho = Inf
>>> ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod,
>>> Elément, tableau(milieu)) Then
>>> RechercheDicho = RechercheDicho(Inf, milieu,
>>> tableau(), Elément, Objet)
>>> Else
>>> RechercheDicho = RechercheDicho(milieu + 1, Sup,
>>> tableau(), Elément, Objet)
>>> End If
>>> End Function
>>>
>>> Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
>>> ElseIf CallByName..... dans la function RechercheDichotomique.
Hello,
Le variant est malheureusement ce qu'il y a de plus générique...
Un variant peut contenir un objet, une chaine de caractères, un nombre ...
Mais effectivement, il faut que ton tableau passé as Variant.
Si tu es sûr de ne travailler que sur des objets, tu pourrais redéfinir
tableau As Object et ton Element As Object, je pense que ça se
plus de ce que tu veux.
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
"Zeg" a écrit dans le message de
news:4082da09$0$19480$
> Oui en effet cela marche mieux;)
> Seulement, le fait de définir la fontion LowerOrEqualThan permet de
> définir une comparaison sur n'importe quel type,
> mais lors de l'appel de RechercheDicho(Inf As Integer, Sup As Integer,
> tableau() As Variant, Elément As Variant, Objet As Object) As Integer
> comment passer un argument un Elément de n'importe quel type à
> rechercher dans un tableau contenant des elements de ce même type :
> des integer, des type predefinis etc.
> Finalement je suis bloqué avec tableau() As Variant, Elément As
> Variant ma fonction n'est plus generique.
> Je suis obligé de lui passer un type Variant :(
>
>
> "François Picalausa" a écrit dans le message de
> news:
>> Hello,
>>
>> tu as un type incompatible parce que tu passe du variant (Elément,
>> tableau(milieu)) à de l'integer (c1, c2).
>> Il suffit donc de modifier ta fonction de comparaison comme ceci:
>>
>> Function LowerOrEqualThan(c1 As Variant, c2 As Variant) As Boolean
>> If VarType(c1) = vbInteger And VarType(c2) = vbInteger Then
>> If c1 <= c2 Then
>> LowerOrEqualThan = True
>> Else
>> LowerOrEqualThan = False
>> End If
>> Else
>> Err.Raise 13 'type incompatible
>> End If
>> End Function
>>
>> --
>> François Picalausa (MVP VB)
>> http://faq.vb.free.fr --- http://msdn.microsoft.com
>> http://apisvb.europe.webmatrixhosting.net
>>
>> "Zeg" a écrit dans le message de
>> news:4082cdf6$0$19480$
>>> Merci beaucoup pour les précisions.
>>> Je suis en train d'essayer la premiere methode (CallByName) en
>>> faisant un appel de ma feuille sur un tableau d'entier Tab1 et 65:
>>> Form:
>>> Function LowerOrEqualThan(c1 As Integer, c2 As Integer) As Boolean
>>> If c1 <= c2 Then
>>> LowerOrEqualThan = True
>>> Else
>>> LowerOrEqualThan = False
>>> End If
>>> End Function
>>>
>>> Place = RechercheDicho(LBound(Tab1), 12, Tab1, 65, Me)
>>>
>>> J'ai une dll/activeX qui contient ma function de
>>> RechercheDichotomique dans un module de classe et qui est defini
>>> comme suit:
>>>
>>> Public Function RechercheDicho(Inf As Integer, Sup As Integer,
>>> tableau() As Variant, Elément As Variant, Objet As Object) As
>>> Integer Dim milieu As Integer
>>> milieu = Int((Inf + Sup) / 2)
>>>
>>> If Inf = Sup Then
>>> RechercheDicho = Inf
>>> ElseIf CallByName(Objet, "LowerOrEqualThan", VbMethod,
>>> Elément, tableau(milieu)) Then
>>> RechercheDicho = RechercheDicho(Inf, milieu,
>>> tableau(), Elément, Objet)
>>> Else
>>> RechercheDicho = RechercheDicho(milieu + 1, Sup,
>>> tableau(), Elément, Objet)
>>> End If
>>> End Function
>>>
>>> Et je me retrouve avec une erreur :"Type Incompatible" sur la ligne
>>> ElseIf CallByName..... dans la function RechercheDichotomique.