Problème dans une macro devant faire un tri

foxley_gravity Messages postés 5 Statut Membre -  
 melanie1324 -
Bonjour

Je suis débutant en vba et je dois faire un petit programme

J'ai un petit probème avec une macro ...
J'ai un fichier dont le nombre de données varient ( et donc le nombre de lignes) mais les colonnes restent les mêmes ... j'ai 3 colonnes : les titres ( col 2) , les montants (col 10 ) , et les noms ( col 6 )

J'aimerai un programme qui vienne lire tous les titres ... ( ici le seul titre démandé est x) et qui viennent sommer les montants correspondant.

Mon probleme est que :

je n'arrive pas à imposer a ma macro de commencer a sommer 5 lignes apres avoir sélectionner le titre sélectionné ( ici x ) et surtout ma macro ne s'arrete pas apres , elle continue a sommer les valeurs des titres suivants
info suplémentaire : entre chaque montant il y a 1 blanc
entre le dernier montant d'un titre , et le premier du suivant il y a 2 blanc ... donc j'aimerais des qu'il y a 2 blanc qu'elle s'arrête ...

Voici la macro (qui ouvre le fichiercible avec les titres ,les montant.. pour copier la somme dans le fichier ouvert)

Sub copier_sinistre()

Dim i As Integer
Dim last_line As Integer
Dim star_line As Integer

Workbooks.Open Filename:="D:\Documents and Settings\x7001\Bureau\2008Sinistres02062009.xls"
Workbooks("2008Sinistres02062009.xls" ).Worksheets("PREVIsin2008" ).Activate

Worksheets("PREVIsin2008" ).Select

last_line = Cells(65536, 10).End(xlUp).Row
start_line = 1
Dim tab1
Set tab1 = CreateObject("Scripting.Dictionary" )
old_cle = ""
For ligne = start_line To last_line
If Cells(ligne, 2) = "" Then
cle = old_cle
Else
cle = Cells(ligne, 2)
old_cle = cle
End If

If Cells(ligne, 10) <> 0 Then
If tab1.exists(cle) Then
tmp = tab1(cle)
tmp(0) = tmp(0) + Cells(ligne, 10) ' cumul des sommes
tmp(1) = tmp(1) & " " & Cells(ligne, 6) ' cumul des noms
tab1(cle) = tmp
Else
tab1(cle) = Array(Cells(ligne, 10), Cells(ligne, 6))
End If

MsgBox (Cells(ligne, 10))
End If
Next

cle = "x"
tmp = tab1(cle)

Cells(1, 1) = tmp(0)

'Workbooks(1).Worksheets(1).Cells(1, 1) = tmp(0)

'Workbooks(1).Activate
Cells(1, 1).ClearComments
Cells(1, 1).Select
Cells(1, 1).AddComment
Cells(1, 1).Comment.Text Text:=tmp(1)

End Sub

merci de m'aider ...
cordialement

1 réponse

melanie1324
 
Bonjour,

Ce que tu demandes ressemble fort à des sous totaux (données sous totaux).
Si c'est ce que je pense essaie ca :

cells.copy
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(5, 6), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True

TotalList:=Array(5, 6), : est les colonnes par lesquelles tu veux faire un sous total toi, ca serait plutot TotalList:=Array(2,6,10)

Essaie de voir si c'est ca que tu veux.
0