Problème dans une macro devant faire un tri
foxley_gravity
Messages postés
5
Statut
Membre
-
melanie1324 -
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
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
A voir également:
- Problème dans une macro devant faire un tri
- Comment faire un tri personnalisé sur excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Logiciel tri photo - Guide
- Afficher le 0 devant un nombre dans excel - Guide
- Vous devez disposer d'une autorisation pour effectuer cette action - Guide
1 réponse
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.
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.