Manipulation de données et récursivité

fabricioliking Messages postés 79 Date d'inscription mercredi 30 août 2006 Statut Membre Dernière intervention 15 mai 2009 - 27 mai 2008 à 20:27
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 30 mai 2008 à 00:37
Bonjour,

Me voila aujourd'hui avec un ptit problème. Non ce n'est pas un programme qui ne marche pas cette fois-ci mais je n'arrive pas à imaginer ma fonction, c'est pour cela que je vous demande un coup de papatte.

Voici un extrait de ma table ci dessous
Il n'y a seulement 2 champs qui me sont important pour le moment dans mon développement (ENSEMBLOF et NUMEROOF)
J'aimerai pouvoir faire une fonction qui à chaque Numeroof, vérifie si ce numéro existe dans ENSEMBLOF et ce en continue.
Exemple j'ai un NUMEROOF = 12113A/001
L'appli va chercher si je le trouve dans ENSEMBLOF, en effet il y est plusieurs fois, dans le premier cas j'ai en NUMEROOF 01109A/001, ce numéro n'est pas non plus dans ENSEMBLOF donc j'arete. Par contre j'ai un second ENSEMBLOF = 012113A/001, dont le NUMEROOF est 012112A/001
Ce numéro est retrouvé plusieurs fois dans ENSEMBLOF etc ...

J'ai mis des couleurs sur l'image pour que ce sois un petit peu plus clair

Exemple, j'ai un NUMEROOF = 012112A/001, je vais le trouver dans ENSEMBLEOF

Aussi j'ai commencé à fair un bout de développement, seul souie c'est que je suis limité à 2 sous "ENSEMBLE"
On m'a parlé de fair une fonction récursive pour résoudre mon problème, je suis un peu perdu

Mon code cidessous :

I = 0
lenumOf = zs_numof.Text
EnsembleOF "SELECT ENSEMBLEOF FROM consomof WHERE NUMEROOF '" & lenumOf & "';"
Reque = "Select NUMEROOF FROM consomof"
Call DemontEnsemble(lenumOf)requeteSearch "Select ENSEMBLOF, NUMEROOF FROM consomof WHERE ENSEMBLOF '" & lenumOf & "';"

Set lareque = Db_VisualGP.OpenRecordset(Reque)
Set R1 = Db_VisualGP.OpenRecordset(Reque)

Set RequeSearch = Db_VisualGP.OpenRecordset(requeteSearch)
lareque.MoveFirst
nr = lareque.RecordCount
While Not (lareque.EOF) 'On parcours l'ensemble des l'ensemble de la table consomof
   ' valEn = lareque!Ensemblof ' ValEn contiends les ENSEMBLOG
    
        If RequeSearch.RecordCount > 0 Then 'Si ENSEMBLOF = NUMEROOF donc premier sousEnsemble
         'RequeSearch.MoveFirst
                While Not (RequeSearch.EOF)                Set RequeSearch2 Db_VisualGP.OpenRecordset("SELECT NUMEROOF, ENSEMBLOF FROM consomof WHERE ENSEMBLOF '" & RequeSearch!Numeroof & "';")
                Call DemontEnsemble(RequeSearch!Numeroof)
                ' MsgBox RequeSearch2!Numeroof
                    If RequeSearch2.RecordCount > 0 Then
                        While Not (RequeSearch2.EOF)
                        Dim test As String                        Set requeSearch3 Db_VisualGP.OpenRecordset("SELECT NUMEROOF FROM consomof WHERE ENSEMBLOF '" & RequeSearch2!Numeroof & "';")
                        Call DemontEnsemble(RequeSearch2!Numeroof)
                        If requeSearch3.RecordCount > 0 Then
                            While Not (requeSearch3.EOF)
                            requeSearch3.MoveNext
                            Wend
                         End If
                        'Demonte RequeSearch2
                        RequeSearch2.MoveNext
                        Wend
                    'Demonte RequeSearch2!NUMEROOF
                    'RequeSearch.MoveNext
                    End If
                'Demonte RequeSearch!NUMEROOF
                
                RequeSearch.MoveNext
                Wend
'        Else
'        MsgBox ("Aucun Enregistrement pour ce numéro d'of")
        End If
        lareque.MoveNext
    I = I + 1
Wend


Fabrice,

5 réponses

Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
27 mai 2008 à 22:04
Salut,

Voici le fonctionnement d'une fonction récursive:

Sub TrouverLesENSEMBLOF(NUMEROOF)
    Parcourir les ENSEMBLEOF
       Si ENSEMBLOF = NUMEROOF alors:
          TrouverLesENSEMBLOF(NUMEROOF de ENSEMBLOF)
End Sub

Mais dans ce cas il est possible que la Sub ne s'arrete jamais si il y a des croisement entre les ENSEMBLOF et les NUMEROOF.

Mais c'est quoi ton but final? Car comme ceci tu vas passer plusieurs fois sur chaque enregistrement, est-ce le but?
0
fabricioliking Messages postés 79 Date d'inscription mercredi 30 août 2006 Statut Membre Dernière intervention 15 mai 2009
27 mai 2008 à 22:12
Non pas du tout en effet j'ai représenté sur le plan ce que je compte fair

[IMG]http://www.anime-station.fr/plan.jpg[IMG]

Je veux parcourir tous les sousensemble eventuels afin d'effectuer sur chaque Article présent dans le premier sousensemble ou dans les petits, une fonction de démontage. ' qui récupérera cette hierarchi pour faire encore d'autres choses '

L'exemple du plan est très simpliste mais il peut y avoir des dizaines de sous ensembles
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
27 mai 2008 à 22:52
- Y a-t-il 2 sortes d'enregistrements, des enregistrements représentants un sous-ensemble (groupe) et d'autres représentants des articles?

C'est comme sur un disque dur. Y'a-t-il que des dossiers ou aussi des fichiers?

- Est il possible que les sous-ensembles se croise? C'est a dire que le sous-ensemble A contient un sous-ensemble B qui lui contient le sous-ensemble A?

Si oui, il est impossible de charger la hiérarchie complète, car elle est infinie...
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
27 mai 2008 à 23:27
Strucure Enregistrement         ' Pour simplifer le code, il s'agit d'un enregistrement de ta table
    ENSEMBLOF As String
    NUMEROOF As String
End Strucure

Structure Ensemble               ' Résultat hiérarchique
    ENSEMBLOF As String
    NUMEROOF As String
    Sous-ensemble As Collection
End Structure

Function CréerHiérarchie(MonEnregistrement As Enregistrement) As Ensemble
    ' Créer l'ensemble
    Dim MonEnsemble as Ensemble
    MonEnsemble.ENSEMBLOF = MonEnregistrement.ENSEMBLOF
    MonEnsemble.NUMEROOF = MonEnregistrement.NUMEROOF
    ' Trouver les sous-ensemble
    Pour chaque Enregistrement dans la table ou ENSEMBLOF = MonEnregistrement.NUMEROOF
       MonEnsemble.Sous-ensemble.Add CréerHiérarchie(Enregistrement )
    End
    ' Retourner l'ensemble
    Return MonEnsemble
End Sub

Le tout est de trouver l'enregistrement qui est le tout 1er dans les niveaux hiérarchiques (sur un disque dur, il s'agit de la racine (ex: C:\))
0

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

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
30 mai 2008 à 00:37
Pour pouvoir mettre des images sur le site, utilise un site web comme ImageShack
Ensuite, tu copies le lien de l'image que tu as mise sur ce site.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous