Completer les données

bonjour

cette macro consis à ajouter sur la feuille "parametrage " les lignes exitantes sur la feuille

synthèse mais pas sur la feuille parametrage

j'ai donc bricolé la macro ci-apres

Sub tableau_parametrage()
 Dim tableau() As Double
 Dim i As Long, j As Long, k As Long
 Dim n As Long, lastrow As Long
 Dim m As String
 Dim tabl() As String
 Dim trouve As Boolean
 k = Sheets("Synthèse").Cells(65536, 1).End(xlUp).Row
 lastrow = Sheets("Parametrage").Cells(65536, 1).End(xlUp).Row
 ReDim tableau(lastrow - 1)
 ReDim tabl(lastrow - 1)
 For i = 0 To k - 6
    n = worksheets("Synthèse").Cells(i + 6, 1).Value
    m = worksheets("Synthèse").Cells(i + 6, 4).Value
    trouve = False
    For j = 0 To lastrow - 2
        tableau(j) = Sheets("Parametrage").Cells(j + 2, 1).Value
        tabl(j) = Sheets("Parametrage").Cells(j + 2, 2).Value
            If n = tableau(j) And m = tabl(j) Then
            trouve = True

            End If
    Next
        If trouve = False Then
        Sheets("Parametrage").Cells(lastrow + 1, 1).Value = n
        Sheets("Parametrage").Cells(lastrow + 1, 2).Value = _
        worksheets("Synthèse").Cells(i + 6, "D").Value
        Sheets("Parametrage").Cells(lastrow + 1, 3).Value = _
        worksheets("Synthèse").Cells(i + 6, "E").Value
         lastrow = lastrow + 1
        End If
 Next
End Sub

lorsqu'on est sur la ligne i de la feuille synthèse on veux mettre dans parametrage A(i);D(i) et

E(i)

lorsque je lance la macro j'ai constament un blocage "l'indice n'appartient pas à la selection

à la ligne 152,153...

comment y remedier ?

merci bien d'avance

20classeurtest.zip (25.84 Ko)

Bonjour

Je suppose que tes ID sont uniques pour chaque isin et libellé ?? (on ne sait jamais)

a ta réponse, je te proposerai une autre solution

dans l'attente

edit: comment sont remplies les données dans la colonne E de parametrage ?

Bonjour

je suppose que tes ID sont uniques pour chaque isin et libellé ?? (on ne sait jamais)

disons que les ID peuvent changer, j’avait déjà fait un code avant avec seule condition que sur les ID et je m’étais rendu compte que les ID pouvaient changer ou se répéter .C’est la raison pour laquelle j’ai mis une condition supplémentaire sur l’isin et le libellé dans chaque ligne car ces trois conditions sont uniques pour chaque ligne

edit: comment sont remplies les données dans la colonne E de parametrage ?

la feuille « paramétrage » n’a rien en colonne E c’est plutôt le libellé qui est en colonne E dans la feuille

« synthèse » .Sur la feuille « parametrage » le libellé vient en colonne C.

merci d'avance

Bonjour,

je viens de regarder la feuille "paramêtrage" colonne E il y a en header: "contrepartie" ....

tester sur 3 colonnes est + compliqué forcément; je regarde et te dis...cet aprem ou demain.

-- Mer Sep 22, 2010 11:46 am --

Re,

Voici la macro proposée (test unique sur concaténation Id, isin, libellé)

Option Explicit
Sub mettreajour()
Dim Dico As Object
Dim derlig_p As Long, lig As Long, ref As String
Dim derlig_s As Long, cptr As Long
Dim tablo

Set Dico = CreateObject("Scripting.Dictionary")

With Sheets("parametrage")
    derlig_p = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
    For lig = 2 To derlig_p
        ref = .Cells(lig, 1) & .Cells(lig, 2) & .Cells(lig, 3) 'concaténation des 3 données==> unique
        If Not Dico.exists(ref) Then: Dico.Add ref, ref
    Next

    With Sheets("synthèse")
        ReDim tablo(3, 0)
        derlig_s = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
        For lig = 6 To derlig_s
            ref = .Cells(lig, 1) & .Cells(lig, 4) & .Cells(lig, 5)
            If Not Dico.exists(ref) Then
                tablo(0, cptr) = .Cells(lig, 1)
                tablo(1, cptr) = .Cells(lig, 4)
                tablo(2, cptr) = .Cells(lig, 5)
                tablo(3, cptr) = .Cells(lig, 6)
                cptr = cptr + 1
                ReDim Preserve tablo(3, cptr)
            End If
        Next
        ReDim Preserve tablo(3, cptr - 1)
    End With

Application.ScreenUpdating = False
.Cells(derlig_p + 1, 1).Resize(cptr, 4) = Application.Transpose(tablo)

End With

End Sub

ci joint maquette

Bonjour

j’ai essayé le code il tourne bien mais me ramène dans "parametrage" les données existantes de la feuille synthèse. en fait j’ai fais le test en supposant qu’il ne manque aucune ligne sur la feuille parametrage sauf que lorsque je lance la macro, les lignes existantes aussi bien sur la feuille parametrage que sur la feuille synthèse s’ajoutes ayant le même ID ,le même isin et le même libellé

merci bien

Je viens d'essayer en copiant les éléments de la feuille synthèse colonne ID, ISIN,LIBELLE dans param^trage, ainsi,les 2 tableaux étant identiques, il ne devrait avoir aucun ajout dans la feuille paramétrage

C'est gagné, on s'arrète à la ligne 188 sans ajout.

Donc, j'ai peut-^tre mal compris ta demande ou tu as peut-être fait une fausse manip

par contre, si les 2 listes sont identiques, le compteur (cptr) est à 0 et il faut modifier la fin de la macro ainsi

 End If
        Next
     [i]ReDim Preserve tablo(3, cptr - 1)   [/i] [b]A supprimer[/b]
    End With

Application.ScreenUpdating = False
If cptr > 0 Then
ReDim Preserve tablo(3, cptr - 1)
.Cells(derlig_p + 1, 1).Resize(cptr, 4) = Application.Transpose(tablo)
End If
End With

Tu dis...

Merci bien ça a marché

sauf que j'ai supprimé :<span style="font-style: italic">ReDim Preserve tablo(3, cptr - 1) </span> <span style="font-weight: bold">A supprimer</span>

enfin cette ligne ne s'intaigre pas danss le code elle reste toute rouge ! du coup je sais pas si j'ai bien fait de l'enlever.

Rechercher des sujets similaires à "completer donnees"