Fonction recursive

Résolu
moudz84 Messages postés 64 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 27 septembre 2007 - 6 août 2007 à 11:51
cs_etniqs Messages postés 201 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 10 mai 2016 - 6 août 2007 à 16:07
salut, j'aun probleme dans ma fonction recursive que j'ai ecrit en vba, j'ai trouver le probleme mais je ne sais pas le reparer:

if  recursive(XXX1 ,XXX2 )=true then
       return true
end if

je ne veut pas ecrire qlqchose comme return recursive(XXX1,XXX2) car je voudrai pas renvoyer la valeur faux

le probleme c'est que recursive(XXX1 ,XXX2 ) renvoi false (je l'est verifier avec un affichage) mais elle entre quand meme dans le test if (et donc a la fin je renvoi true)

est ce que qlq sait pourquoi?

12 réponses

Utilisateur anonyme
6 août 2007 à 13:38
Voilà, c'est bien ce que je pensait. Tu confond avec le return.



infoNonUtilise False ou infoNonUtilise True ne fait pas sortire de la fonction.
Il faut ajouter un Exit Function après.








__________
Kenji

(


Nouveau forum VBA/Office
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 août 2007 à 12:02
Salut,
(j'espere ne pas dire de bêtise)
Return True en vba n'est pas la syntaxe pour renvoyer une valeur pour une focntion (ca l'est en .NET, mais pas en VBA)

essaie plutot
'jsai pas si c'est clair
If recursive(XXX1, XXX2) = True Then
     recursive(XX1, XX2) = True 'XX1 etant les valeur avant d'appeler la second recursive
End If , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
Utilisateur anonyme
6 août 2007 à 12:07
Salut,

J'aurais plutot mis
if recursive(XXX1 ,XXX2 )=true then
  recursive = true
  Exit Function
end if







__________
Kenji

(


Nouveau forum VBA/Office
0
moudz84 Messages postés 64 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 27 septembre 2007
6 août 2007 à 13:12
salut, merci pour vos reponse

j'ai essayer les deux solution mais ca donne la meme chose...

(vous aviez raison return true ne fonctionne pas du tout)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 août 2007 à 13:16
Salut,
Si elle n'est pas trop grosse, peu être pourrais tu mettre le code de la dite fonction

@+: Ju£i?n
Pensez: Réponse acceptée
0
moudz84 Messages postés 64 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 27 septembre 2007
6 août 2007 à 13:22
elle est grosse et compliqué ..... j'ai mis en rouge la valeur de retour et le test:

Function infoNonUtilise(base, NomTable, Id)
    Dim resultatFinal As Boolean
    Dim maxRelation As Integer
    Dim RecordsetMaxRelation As DAO.Recordset
    Dim RecordsetClePrimaire As DAO.Recordset
    Dim RecordsetTemp As DAO.Recordset
    Set RecordsetMaxRelation = CurrentDb.OpenRecordset ("SELECT * FROM relationTableCEP where TableClasse2='" & NomTable & "'", dbOpenDynaset)

    If RecordsetMaxRelation.EOF = False Then
        RecordsetMaxRelation.MoveFirst

        Do While RecordsetMaxRelation.EOF = False
            Set RecordsetTemp CurrentDb.OpenRecordset("SELECT " & RecordsetMaxRelation("TableClas<wbr>se1") & ".dtmaj as dateMAJ FROM " & RecordsetMaxRelation("TableClas<wbr>se1") & "," & RecordsetMaxRelation("TableClas<wbr>se2") & " where " & RecordsetMaxRelation("TableClas<wbr>se1") & "." & RecordsetMaxRelation("FK") & " " & RecordsetMaxRelation("TableClas<wbr>se2") & "." & RecordsetMaxRelation("PK"), dbOpenDynaset)
            If RecordsetTemp.EOF = False Then
MsgBox (RecordsetMaxRelation("TableCla<wbr>sse1") & "-->" & RecordsetMaxRelation("TableClas

<wbr>se2"))
                RecordsetTemp.MoveFirst
                If Format(RecordsetTemp("dateMAJ"<wbr>), "yyyy") > Trim(Format(Date, "yyyy") - 3) Then

                    infoNonUtilise = False
                Else </wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

                    Set RecordsetClePrimaire = CurrentDb.OpenRecordset("SELECT * FROM niveauTableCEP where nomTable='" & RecordsetMaxRelation("TableClas<wbr>se1") & "'", dbOpenDynaset)
                    RecordsetClePrimaire.MoveFirst</wbr>

                   
If infoNonUtilise(base, RecordsetMaxRelation("TableClas<wbr>se1"), RecordsetClePrimaire("cle")) = false Then
                        infoNonUtilise = False
                    End If</wbr>
                End If
            End If
            RecordsetMaxRelation.MoveNext
        Loop
    Else

        infoNonUtilise = True
    End If
   

End Function
0
moudz84 Messages postés 64 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 27 septembre 2007
6 août 2007 à 13:26
ca m'etonnerai que vous lisiez ca.....

je veut juste savoir pourquoi le test if recursive(XXX1 ,XXX2 )=true then est tjs vrai...
0
Utilisateur anonyme
6 août 2007 à 13:31
Juste en regardant le code, je propose
Ne faudrais t-il pas sortire de la fonction après

infoNonUtilise = False
?


Sinon, ben un débuggage pas-à-pas s'impose (ca risque être long mais il faut être patient)







__________
Kenji

(


Nouveau forum VBA/Office
0
moudz84 Messages postés 64 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 27 septembre 2007
6 août 2007 à 13:35
infoNonUtilise = False 
est dans un if, on sort si cette condition est verifier

en tout cas ya un truc qui cloche, j'ai mis un msgbox avant et apres le
infoNonUtilise = True

MsgBox("test1")
infoNonUtilise = True
MsgBox("test2")

et la il m'affiche les deux.......  il ne doit pas afficher la deuxieme non??
et vu que il renvoi pas true il entre dans le test...
0
moudz84 Messages postés 64 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 27 septembre 2007
6 août 2007 à 13:43
ahhhhh ok dac, merci bien je v essayer
0
moudz84 Messages postés 64 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 27 septembre 2007
6 août 2007 à 13:59
merci c super ca marche :DDDDD
0
cs_etniqs Messages postés 201 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 10 mai 2016
6 août 2007 à 16:07
j'ajouterai que pour éviter les retours d'erreur à la con ,
déclare ta fonction avec le type retourné :

Function infoNonUtilise(base, NomTable, Id) as boolean

en plus, sans ça, tu pourrais avoir des surprise d'utilisation mémoire...

coïto ergo sum
0
Rejoignez-nous