OVH Cloud OVH Cloud

Une sorte de tri en plus complique je crois

4 réponses
Avatar
christophe.drezet
Bonjour,

J'ai un gros problème... et la je me sens completement coince.

Je m'explique:
Imaginons un tableau vide avec toutes mes references

Ref Montant
1
2
3
4
5
6

Et un autre avec le total pour certaines références
Ref Montant
4 100
6 150

Et je souhaite obtenir ce tableau:

Ref Montant
1
2
3
4 100
5
6 150

Est ce quelqu'un voit une solution???

Merci beaucoup.

4 réponses

Avatar
Antoine Driard
si les données sont stockées dans une base, il suffit de faire une jointure
sur le champ référence.

Si ce sont des structures de données en mémoire, alors, pour chaque
enregistrement de la première table, il faut parcourir la seconde, chercher
la donnée, et remplir la valeur Montant.

Est-ce réellement compliqué ?

--
Antoine Driard
Chef de Produit Outils de Développement
Microsoft France
---
Merci de répondre à ce message dans ce newsgroup,
je le consulte régulièrement


Christophe Drezet a pris sa plume et a
partagé cette idée avec nous :
Bonjour,

J'ai un gros problème... et la je me sens completement coince.

Je m'explique:
Imaginons un tableau vide avec toutes mes references

Ref Montant
1
2
3
4
5
6

Et un autre avec le total pour certaines références
Ref Montant
4 100
6 150

Et je souhaite obtenir ce tableau:

Ref Montant
1
2
3
4 100
5
6 150

Est ce quelqu'un voit une solution???

Merci beaucoup.


Avatar
Zoury
Salut Chirstophe! :O)

Tu veux fusionner les deux tableaux si je comprends bien? Peux-tu nous
donner plus de détails? car pour l'instant une solution tel que la suivante
serait envisageable, mais je doute que ça répondre à tes besoins

'***
' Module1
Option Explicit

Private Sub Main()

Dim lMontant() As Long
Dim lFusionner() As Long
Dim i As Long
Const TAILLE_TABLEAU As Long = 6

' on crérer notre tableau de montants...
ReDim lMontant(1, 1) As Long
lMontant(0, 0) = 4 ' index
lMontant(0, 1) = 100 ' montant

lMontant(1, 0) = 6 ' index
lMontant(1, 1) = 150 ' montant

lFusionner = Fusionner(lMontant, TAILLE_TABLEAU)
For i = 1 To TAILLE_TABLEAU
Debug.Print "Ref : " & i & " Montant : " & lFusionner(i)
Next i

End Sub

Private Function Fusionner(ByRef Montants() As Long, ByRef lTailleTableau As
Long) As Long()

Dim l() As Long
Dim i As Long

ReDim l(1 To lTailleTableau) As Long
For i = 0 To UBound(Montants)
l(Montants(i, 0)) = Montants(i, 1)
Next i
Fusionner = l

End Function
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"Christophe Drezet" wrote in message
news:
Bonjour,

J'ai un gros problème... et la je me sens completement coince.

Je m'explique:
Imaginons un tableau vide avec toutes mes references

Ref Montant
1
2
3
4
5
6

Et un autre avec le total pour certaines références
Ref Montant
4 100
6 150

Et je souhaite obtenir ce tableau:

Ref Montant
1
2
3
4 100
5
6 150

Est ce quelqu'un voit une solution???

Merci beaucoup.


Avatar
Patrice Henrio
Il me semble, comme le projet est présenté, qu'il y a plus simple.

T1 le premier tableau et T2 le deuxième.
Un Type utilisateur monType
Type MonType
Réf as integer
Montant as integer
End Type

T1(1 to NbRéf) as Integer, l'index est le numéro de référence qui semble
être une liste, NBRéf est une constante indiquant le nombre de référence.
T2() as MonType

For I=1 to Ubound(T2)
T1(T2(I).Réf)=T1(T2(I).Montant)
Next I


"Zoury" a écrit dans le message de
news:%
Salut Chirstophe! :O)

Tu veux fusionner les deux tableaux si je comprends bien? Peux-tu nous
donner plus de détails? car pour l'instant une solution tel que la


suivante
serait envisageable, mais je doute que ça répondre à tes besoins

'***
' Module1
Option Explicit

Private Sub Main()

Dim lMontant() As Long
Dim lFusionner() As Long
Dim i As Long
Const TAILLE_TABLEAU As Long = 6

' on crérer notre tableau de montants...
ReDim lMontant(1, 1) As Long
lMontant(0, 0) = 4 ' index
lMontant(0, 1) = 100 ' montant

lMontant(1, 0) = 6 ' index
lMontant(1, 1) = 150 ' montant

lFusionner = Fusionner(lMontant, TAILLE_TABLEAU)
For i = 1 To TAILLE_TABLEAU
Debug.Print "Ref : " & i & " Montant : " & lFusionner(i)
Next i

End Sub

Private Function Fusionner(ByRef Montants() As Long, ByRef lTailleTableau


As
Long) As Long()

Dim l() As Long
Dim i As Long

ReDim l(1 To lTailleTableau) As Long
For i = 0 To UBound(Montants)
l(Montants(i, 0)) = Montants(i, 1)
Next i
Fusionner = l

End Function
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"Christophe Drezet" wrote in message
news:
> Bonjour,
>
> J'ai un gros problème... et la je me sens completement coince.
>
> Je m'explique:
> Imaginons un tableau vide avec toutes mes references
>
> Ref Montant
> 1
> 2
> 3
> 4
> 5
> 6
>
> Et un autre avec le total pour certaines références
> Ref Montant
> 4 100
> 6 150
>
> Et je souhaite obtenir ce tableau:
>
> Ref Montant
> 1
> 2
> 3
> 4 100
> 5
> 6 150
>
> Est ce quelqu'un voit une solution???
>
> Merci beaucoup.




Avatar
Zoury
Salut Patrice! :O)

Il me semble, comme le projet est présenté, qu'il y a plus simple.



L'algorithme est identique. La seule différence est que tu utilise un Type
au lieu d'un tableau deux dimensions, ce qui à mon avis n'est pas plus
simple mais seulement différent... ;O)



For I=1 to Ubound(T2)
T1(T2(I).Réf)=T1(T2(I).Montant)
Next I



J'ai mal compris ce que tu veux faire où il y bien une erreur dans le code
ci-haut?

j'aurais plutôt pensé à ce code :

For I = 1 to Ubound(T2)
T1(T2(I).Réf) = T2(I).Montant
Next I


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/