Detention croisés sur les fonds ( VBA)

cs_mimi0 Messages postés 11 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 22 juillet 2008 - 7 juil. 2008 à 14:25
cs_mimi0 Messages postés 11 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 22 juillet 2008 - 7 juil. 2008 à 18:29
Bonjour,

Je suis en stage dans une banque, et je souhaite arrivé à calculer a partir de deux feuille Excel: l'une concerne les fonds détenus par des souscripteurs externes et l'autre par les souscripteurs interne. Dans chaque feuille j'ai plusieurs colonnes et je voudrais faire une macro qui me trouve la colonne libellé fonds et une autre qui me trouve total dans chacune des deux feuilles: externe et interne.
Ensuite je voudrais arriver dans la 3émé feuille regroupement a calculé la somme par fonds détenus par les externe et un peu plus loin dans un autre tableau la somme par fonds détenus par les externe.

voila a quoi je suis arrivé .... mais ca ne marche pas correctement.
Si quelqu'un peut m'aider ca serait trop sumpa!!!
merci d'avance



'tri des fonds dans chaque liste par ordre alphabétique croissant

Worksheets("Externe").Select
Cells(1, 1).Select
Cells.Find(What:="Libellé Fonds", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
col = ActiveCell.Column
Columns(ActiveCell.Column).Select
Selection.Sort Key1:=Cells(2, col), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Worksheets("CS").Select
Cells(1, 1).Select
Cells.Find(What:="Libellé Fonds", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
col = ActiveCell.Column
Columns(ActiveCell.Column).Select
Selection.Sort Key1:=Cells(2, col), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal


'1) La somme d'opérations des fonds dans la période ( fonds detenus par externe )

Worksheets("Externe").Select
Cells(1, 1).Select

Cells.Find(What:="Total en EUR", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
refcolNetTotal = ActiveCell.Column

Cells.Find(What:="Libellé Fonds", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
col = ActiveCell.Column


Range(Selection, Selection.End(xlDown)).Select
nbligne = Selection.Rows.Count
i = 0
indexfonds = 1

For Row = 2 To nbligne
SommeNet = Cells(Row, refcolNetTotal).Value
Nomfonds = Cells(Row, col).Value

While Cells(Row + 1 + i, col).Value = Cells(Row + i, col).Value
i = i + 1
SommeNet = SommeNet + Cells(Row + i, refcolNetTotal).Value
Wend

Worksheets("regroupement").Cells(6 + indexfonds, 2).Value = SommeNet
Worksheets("regroupement").Cells(6 + indexfonds, 1).Value = Nomfonds
Worksheets("regroupement").Cells(6 + indexfonds, 1).Font.Bold = True

Row = Row + i
If Row >= nbligne Then Exit For
i = 0
indexfonds = indexfonds + 1
Next


'2) La somme d'opérations des fonds dans la période ( fonds detenus par cs )

Worksheets("CS").Select
Cells(1, 1).Select

Cells.Find(What:="Total en EUR", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
refcolNetTotal = ActiveCell.Column

Cells.Find(What:="Libellé Fonds", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
col = ActiveCell.Column


Range(Selection, Selection.End(xlDown)).Select
nbligne = Selection.Rows.Count
i = 0
indexfonds = 1

For Row = 2 To nbligne
SommeNet = Cells(Row, refcolNetTotal).Value
Nomfonds = Cells(Row, col).Value

While Cells(Row + 1 + i, col).Value = Cells(Row + i, col).Value
i = i + 1
SommeNet = SommeNet + Cells(Row + i, refcolNetTotal).Value
Wend

Worksheets("regroupement").Cells(6 + indexfonds, 5).Value = SommeNet
Worksheets("regroupement").Cells(6 + indexfonds, 4).Value = Nomfonds
Worksheets("regroupement").Cells(6 + indexfonds, 4).Font.Bold = True

Row = Row + i
If Row >= nbligne Then Exit For
i = 0
indexfonds = indexfonds + 1

Next
'3) calcul du total , l'affichage des résultats, mise en forme
Worksheets("regroupement").Select

Cells(6, 1).Value = "libellé de fonds"
Cells(6, 2).Value = "total"
Cells(6, 4).Value = "libellé de fonds"
Cells(6, 5).Value = "total"




End Sub

10 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
7 juil. 2008 à 15:49
Salut,

tu n'es pas dans le bon theme. Pour le VBA le bon theme est ici :

[infomsg.aspx Thèmes] / [infomsgf_VISUAL-BASIC_1.aspx Visual Basic 6] / [infomsgt_LANGAGES-DERIVES_287.aspx Langages dérivés] / [infomsgt_VBA_244.aspx VBA] /

Ta question est trop vague :"ca ne marche pas correctement" n'est pas une question et ne nous aidera pas a t'aider. Precise ce qui ne marche pas correctement, ce qui ce passe, si il y a plantage du code, quel est le message d'erreur etc.

A+
0
cs_mimi0 Messages postés 11 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 22 juillet 2008
7 juil. 2008 à 16:02
merci,
( je sais  que je peux paraitre bête:  mais je le suis en VBA)

je suis perdue et ca fait une semaine que j'y suis.

ce qui  pose probleme apparement :  
  Worksheets("regroupement").Cells(6 + indexfonds, 2).Value = SommeNet

 et aussi

For Row = 2 To nbligne

 le message d'erreur:  Run-Timr error'9': subscrit out of range

merci d'avance,
Cordialement
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
7 juil. 2008 à 16:54
salut,

essaie de vérifier tes valeurs :

Debug.Print indexfonds
Worksheets("regroupement").Cells(6 + indexfonds, 2).Value = SommeNet

Debug.Print nbligne
For Row = 2 To nbligne

Quand ça plante, fais Ctrl G (fenètre exécution) et regarde ce qui est écrit (grace au Debug.Print).
Regarde si c'est cohérent

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0
cs_mimi0 Messages postés 11 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 22 juillet 2008
7 juil. 2008 à 17:09
Merci

j'ai eu comme réponse: 1402
                                    1

                                       1402 
                                          1402
 rien compris......

cordialemet,
0

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

Posez votre question
cs_mimi0 Messages postés 11 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 22 juillet 2008
7 juil. 2008 à 17:11
 j'ai eu egalement: compile error: syntax error
 par rappotrt à :
 i = 0 Debug.Print indexfonds

Cdlt
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
7 juil. 2008 à 17:16
Pour ta compil error, c'est parce que tu as mis le debug.Print à côté de i = 0, faut que ce soit sur une ligne (debug.print) sans rien à côté.

Bah tu vois, avec les valeurs retournées, il n'y a rien qui te met la puce à l'oreille ?

Debug.Print nbligne
For Row = 2 To nbligne

Le Debug.Print te reourne 1.
Tu ne peux pas faire (littéralement) For Row = 2 to 1

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0
cs_mimi0 Messages postés 11 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 22 juillet 2008
7 juil. 2008 à 17:44
ça ne marche pas!!! c'est la premiere fois que je  fait une macro  dans mon stage,je pense que je vais lire un peu  de docs avant de poser des questions bêtes...

 si quelqu'un peut me diriger vert un site qui traite ce genre de sujet ca serait sumpa!(

merci d'avance
Cordialement,
Miryam
 
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
7 juil. 2008 à 18:02
Salut mortalino

completement d'accord avec toi. Cela montre que la methode n'est pas bonne.

mimi0 :

remplace : nbligne = Selection.Rows.Count par :

nbligne = Selection.Rows.Count + Selection.Row - 1

remplace le nom de ta variable Row par un autre nom car Row est un nom reservé.
De plus je ne vois aucune declaration de variable. Les variables doivent etre declarees

Tu peux aller voir le tuto de mortalino : http://www.codes-sources.com/tutorial_liste.aspx?authorID=647037

et puis il n'y a pas de question bete. Juste un truc ne regarde pas ton code dans son ensemble mais par bout fonctionnel. Autrment dit ton code est une succession d'etapes. Chaque une de ces etapes doivent etre bonne avant de passer a la suivante.

A+
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
7 juil. 2008 à 18:08
salut Bigfish_le_vrai

bien vu pour nbLigne et Row (en fait, j'aivais pas lu le code du premier message [trop long à lire, pas en état], seulement le second )
sorry

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0
cs_mimi0 Messages postés 11 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 22 juillet 2008
7 juil. 2008 à 18:29
merci a tous!
cela dit je risque de revenir avec mes questions intelligentes!!!!
0
Rejoignez-nous