Ameliorer les boucles for VBA

Bonjour dans le classeur joint il y a mon code que je souhaite améliorer ,il existe peu

etre un moyen de le rendre plus efficace et moins long

en fait je calcule d'une par les pourcentages moyens selons les atributions AAA jusqu'a BB

puis je calcule les moyennes des pourcentages selon les notes AAA Jusqu'a BB et en tenant compte

des noms en colonne E

les resultats sont mis en colonne H et dans le tableau sur la feuille risque de crédit

(tous les codes sont dans le fichier joint)

merci bien

Bonjour,

Depuis quelle feuille lancer la macro ?

Set ws = Worksheets("Feuil1")

la "Feuil1" n'existe pas sur ton fichier !

Amicalement

Claude

ha oui c'était une erreur

desolé remplacer feuil1 par "synthèse"

merci bien

re,

Ok et on part d'où ?

édit:

Attention:

en colonne P de synthèse, il y a des espaces qui vont géner

" BBB" et "BBB", c'est pas pareil

Claude

il s'agit bien de travailler avec les données de la feuilles synthese

et mettre les resultats dans la feuille risque de credit

de ce qui est de

la macro "spread_moyen_par_type_lk" remplit le tableau et l'autre macro remplit le tableau de la la colonne H

C'est ce que font les deux codes

pour les espaces qui vont géner

" BBB" et "BBB", normalement dans mon travail il doivent etre identique

donc choisir l'une ou l'autre des ecritures entre

" BBB" et "BBB",

merci bien

re,

" BBB" et "BBB", normalement dans mon travail il doivent etre identique

donc choisir l'une ou l'autre des ecritures

y-a pas à choisir, les cellules avec espace ne seront pas prises en compte

vois déjà cette macro de 33 lignes au lieu de 230 avant.

Je regarderais l'autre dans la soirée

à noter que les macros doivent être dans un Module et non dans une feuille VBE

Sub calcul_spread_moyen()
Dim Cel As Range, Lg As Byte
Dim i As Long, L As Long, k As Long
Dim alpha As Double, diff As Double
'Macros par Claude Dubois pour "dianbobo" Excel-Pratique le 20 août 2010

'------ calcul du spread sur les contreparties ------
'calcul des spreads de crédits moyens par type de rating
'cette macro intervient sur la feuille Risque crédit
    Application.ScreenUpdating = False
    k = Sheets("Synthèse").Cells.Find("*", , , , xlByRows, xlPrevious).Row

    With Sheets("Risque Crédit")
                Lg = 6
        For Each Cel In .Range("p6:p21")
            With Sheets("Synthèse")
                For i = 6 To k
                    If .Cells(i, "P") = Cel And .Cells(i, "V") <> "" Then
                        diff = .Cells(i, "V")
                        alpha = alpha + diff
                        L = L + 1
                    End If
                Next
            End With
                If L > 0 Then
                    .Cells(Lg, 8) = alpha / L
                Else
                    .Cells(Lg, 8) = ""
                End If
                    L = 0
                    alpha = 0
                    diff = 0
                    Lg = Lg + 1
        Next Cel
    End With
End Sub

tu peux partir de n'importe quelle feuille

Amicalement

Claude

c'est tout simplement merveilleux !!

ça marche bien merci

Bonjour à tous,

Peut-on compter sur ton ancienne macro (pour le tableau Notes) ?

J'essaye de regrouper les 2 macros, mais je ne trouve pas les mêmes résultats sur le tableau Notes

Pourtant la 1ere partie de macro est la même (semble-t-il)

à mon avis, il faudrait voir autre chose, la liste des actions va forcément évoluer et il n'est pas

concevable de "bidouiller" la macro à chaque fois !

- Voir à faire un tableau sur une feuille avec :

1) liste des actions sur une colonne

2) la colonne à coté avec la catégorie

ton avis ?

Ci-joint le fichier avec les anciennes et nouvelle macros,

c'est un fichier de travail, ne tient pas compte du formatage ni des feuilles ajoutées provisoirement.

Amicalement

Claude.

30dianbolo.xlsm (80.10 Ko)

Bonjour tout le monde

c'est une superbe idée de créer une liste des actions sur une colonne et une autre sur la catégorie

puis l'utiliser

comme le dit si bien Claude la liste des actions va évoluer

c'est aussi mon avis

je vais procéder ainsi et vous faire part de la suite

merci bien

Bonjour,

Attention :

Sur la liste actuelle "Libellé", sur 170 noms il y a 71 doublons,

ce qui fausse les calculs

Amicalement

Claude

bonjour

les doublons faussent les calculs de quelle façon je n'ai pas bien saisi

et quels calculs?

pour ce tableau de parametrage que je suis entrain de faire

je voudrais utiliser les premiers caracteres a gauche de ma colonne "Libellé" d'excel dans un

condition "SI" pour renseigner les rating

alors j'ai essayé :

 =SI(GAUCHE(D6, RECHERCHE(" ",D6,1))=MICHELIN;BBB;"")

mais ça ne marche pas

aussi peut on faire une condition SI telle que le test logique soit un tableau par exemple sur toute une collone ?

c'est a dire que si on trouve la valeur trouvée dans l'une des cellules du tableau alors on applique la condition si vrai

comment faire ?

merci de votre aide

Bonjour,

quels calculs?

quand on boucle sur la liste

For Each Cel In .Range("p6:p21")
    With Sheets("Synthèse")
        For i = 6 To k
            If .Cells(i, "P") = Cel And .Cells(i, "V") <> "" Then
                diff = .Cells(i, "V")
                alpha = alpha + diff
                L = L + 1

le "L" est bien incrémenté et influe sur les résultats ici :

.Cells(Lg, 8) = alpha / L   'tableau Coefficient
.Cells(Lg, xC) = alpha / L  'tableau Notes

pour la colonne libellé, j'aurai laissé le nom brut (pour le moment),

fait voir ce que tu prépare

Claude

ci joint

le fichier dont j'ai commencé le parametrage

merci bien

21classeuressai11.zip (30.52 Ko)

re,

C'est quoi le Rating et d'où sort-il ?

de même l' ID, d'où sort-il ?

je vois encore des doublons, c'est normal ?

il faudrait expliquer comment çà marche tout çà !!

Amicalement

Claude

'bonjour

'les doublons je pense que je dois les enlever

'le rating (c'est une attribuée à chaque libellé)

'les id ce sont les numeros de chaque libellé (chaque libellé a un numero unique)

'et je crois que j'ai pas besoin d'id pour faire mon tableau de parametrage

'

'comment ça fonctionne tout ça?

'j'ai une feuille synthese surlaquelle il y a tous les libellés

'soulignons qu'il y a une mise a jour chaque jour alors il se pourait qu'un nouveau

'libellé apparaisse dans ma feuille synthese du coup je voudrais que celui ci sois automatiquement

'sur mon tableau de parametrage qui à moi de donner à la main son rating avant de continuer lexecution de mes macros

'exemlpe supossons que j'ai au depart 20 lignes de libellé BPCE et 4 lignes OAT sur ma

'feuille synthese

'alors ma table de parametrage devrait avoir deux lignes ; une ligne BPCE de rating A+ et une ligne OAT

'de rating AAA

'de cette façon si lors de ma mise à jour d'autres libellés BPCE ou OAT s'ajoutent dans ma feuille synthese

'elles doivent automatiquement avoir leurs rating

'par ailleurs si un nouveau libellé s'ajoute dans ma feuille synthese ,elle doit s'ajouter automati

quement dans mon tableau de parametrage quitte à moi d'ajouter son rating à la main dans mon tableau

de parametrage(je peux ajouter les rating sur mon tableau de parametrage et ceux ci doivent automatiquement apparaitre

dans ma feuille synthese

comment fonctionne ma feuille synthese?

1) je recupere des données via un repertoire (à titre d'information)

2) je suprime les ligne qui ne me sont pas utiles

une fois le 1) et 2) fait je voudrais donc que le rating de chaque libellé soit connu

grace a mon tableau de parametrage

j'espere avoir eté clair

merci d'avance

-- 25 Aoû 2010, 15:13 --

bonjour

'je voudrai faire un tableau croisé dynamique pour resoudre le probleme

'dont voici l'enregistreur de macro que j'ai dejà commencé a modifier

'mon tableau se trouve sur la feuille "feuil1" et mon tableau croisé dynamique lui je

'veux le mettre sur la feuille "param"

pour l'instant j'ai ajouté la ligne 3 et modifier la ligne 7

car c'est pas un tableau figé parce que les lignes peuvent etre ajoutées ou pas

Sub tableau_croisé_d()
Dim k As Long
k = Worksheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
    Range("A6").Select
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Feuil1!L5C1:L" & (k) & "C16", Version:=xlPivotTableVersion10).CreatePivotTable _
        TableDestination:="param!L5C1", TableName:="Tableau croisé dynamique7", _
        DefaultVersion:=xlPivotTableVersion10
    Sheets("param").Select
    Cells(5, 1).Select
    ActiveSheet.PivotTables("Tableau croisé dynamique7").AddDataField ActiveSheet. _
        PivotTables("Tableau croisé dynamique7").PivotFields("ID"), "Somme de ID", _
        xlSum
    With ActiveSheet.PivotTables("Tableau croisé dynamique7").PivotFields("ISIN")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique7").PivotFields("Libellé" _
        )
        .Orientation = xlRowField
        .Position = 2
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique7").PivotFields("Rating")
        .Orientation = xlRowField
        .Position = 3
    End With
End Sub

lorsque je lance le code avec F8 j'ai une erreur à la ligne 4 "erreur definie par l'application ou par l'objet"

merci de votre aide

17classeuressai11.zip (38.65 Ko)

Bonsoir,

Je ne travaille pas les TCD,

et ne pourrais donc pas te suivre sur cette voie

désolé !

Claude

bonjour

utilisons une autre vois

en accordant que les doublons doivent exister sur mon tableau parametrage

1) j'ai creer un tableau a l'aide des données deja existant

du coup s'il existe au jour le jour des nouvelles données

il suffit donc d'ajouter les ligne dans le tableau existant

2) et si jamais une donner est a son echéance alors il faut suprimer cette ligne du tableau

en resumé:

s'il existe un id(numero) sur la feuille synthèse mais qui n'existe pas encore sur mon tableau de parametrage alors on

ajoute cette ligne a la premiere ligne vide du tableau parametrage

par ailleurs s'il existe sur la feuille parametrage un numero inexistant sur la feuille synthèse alors on suprime cette ligne du tableau .

voila j'ai bricolé un code

que voici:

Sub tableau()
Dim Cel As Range, Lg As Byte
Dim i As Long, L As Long, k As Long
Dim j As Long, nombre As Long
Dim lastrow As Long

    'k = worksheets("Synthèse").Cells(Row.Count, 1).End(xlUp).Row

   Application.ScreenUpdating = False
    k = Sheets("Synthèse").Cells.Find("*", , , , xlByRows, xlPrevious).Row
     lastrow = Sheets("Feuil5").Cells.Find("*", , , , xlByRows, xlPrevious).Row
    With Sheets("Feuil5")

        For Each Cel In .Range("a2:a171")
            With Sheets("Synthèse")
                For i = 6 To k
                    If .Cells(i, "A") <> Cel Then
                    worksheets("Feuil5").Cells(lastrow + 1, 1).Value = _
                    Sheets("Synthèse").Cells(i, 1).Value
                    worksheets("Feuil5").Cells(lastrow + 1, 2).Value = _
                    Sheets("Synthèse").Cells(i, "D").Value
                    worksheets("Feuil5").Cells(lastrow + 1, 3).Value = _
                    Sheets("Synthèse").Cells(i, "E").Value
                    End If
                Next
            End With

        Next Cel
    End With
End Sub

mais ça ne marche pas

merci encore de votre aide

Bonjour à tous,

J'ai l'impression que tu complique là !

à quoi sert la feuille "paramétrage" ?

Tu aurais pu ajouter simplement une colonne "Contrepartie" dans la feuille "Synthèse"

çà ne faisait qu'une feuille à actualiser, non ?

Amicalement

Claude.

bonjour

je ne peu aps ajouter directement la colonne comme tu le dit

le probleme c'est que les rationg doivent provenir d'une source c'est cette source là que je suis entrain de créer

sur la feuille parametrage du coup ,je defini deja un tableau contenant tous les libellé ,leurs rating et leur numero(id) (chacun a un numero unique)

donc j'ai besoin que ce tableau de la feuille parametrage puisse s'adapter lors de mes mises à jour

de façon plus claire:

'soit 2 feuilles synthèse et parametrage

'sur la feuille parametrage il y a dejà une base de données construite a l'aide

'des données de la feuille synthèse a mettre a jour

'sur la feuile synthèse il y a un tableau

'je veux faire la chose suivante :

'1)verifier si le numero en cellule A(i) de ma feuille synthèse est present sur ma feuille

'de parametrage si tel est le cas on ne fait rien

'mai si ce numero n'existe pas sur ma feuille de parametrage alors j'ajoute la ligne correspondante

'sur ma feuille parametrage

merci bien

Bonsoir,

Ton sujet :

ameliorer les boucles for vba

Je pense avoir répondu à cette question,

maintenant pour le reste, c'est un autre sujet autre poste.

Reviens avec un fichier propre en expliquant ce que tu veux,

car là on ne suit plus !

pour moi, ce poste est résolu

Claude

Rechercher des sujets similaires à "ameliorer boucles vba"