Trie et somme de n lignes sous Excel 2007

tetragramaton Messages postés 6 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 16 août 2010 - 12 août 2010 à 11:55
tetragramaton Messages postés 6 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 16 août 2010 - 16 août 2010 à 10:23
Bonjour,

J'ai besoin d'aide, car après plusieurs recherches, je n'ai pas trouvé mon bonheur et j'ai essayé de bidouiller à partir de plusieurs p'tit bout de code.

Voici mon problème:
Sous Excel 2007, je souhaiterais faire une macro me permet de trier la colonne C par ordre alphabétique puis après le trie de faire la somme de la colonne B puis H et enfin I sur un nombre n de lignes qui va varie selon chaque feuille. Et j'aimerais que ce script puisse exécuter sur la feuille souhaitée !

Voici le code que j'ai pour l'instant réussit à faire et qui permet d'ouvrir une boite de dialogue pour sélectionner la feuille de son choix et trier la colonne C par ordre alphabétique mais selon un nombre de ligne déjà déterminé:

Sheetname = InputBox("Tapez le nom de la feuille:", "Trie de 'label' par ordre alphabÈtique")
Worksheets(Sheetname).Activate
Range("C1").Select
ActiveWorkbook.Worksheets(Sheetname).Sort.SortFields.Add Key:=Range("C1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(Sheetname).Sort
.SetRange Range("A2:K261")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With



Merci de m'aider SVP !

11 réponses

the_little_big_man Messages postés 86 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 14 février 2011
12 août 2010 à 14:17
il faudrait que tu explique un peu plus pour tes sommes. sinon pour ton trie de la colonne C juste en enregistant une macro et en modifiant :

Sub Macro1()
'
' Macro1 Macro
'

Dim sheetname As String

sheetname = InputBox("Tapez le nom de la feuille:", "Trie de 'label' par ordre alphabÈtique")

ActiveWorkbook.Worksheets(sheetname).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(sheetname).Sort.SortFields.Add Key:=Range("C1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(sheetname).Sort
.SetRange Range("C:C")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
0
tetragramaton Messages postés 6 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 16 août 2010
12 août 2010 à 14:35
Merci pour ton retour. Pour ce qui est des sommes, je souhaite juste la somme de toute la colonne B puis celle de H et de I. l'idéal serait que le résultat apparaisse juste après la dernière ligne et possiblement en rouge.
0
the_little_big_man Messages postés 86 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 14 février 2011
12 août 2010 à 14:43
petite question ? il est possible que tu es une cellule vide dans les colonnes B H ou I??
0
tetragramaton Messages postés 6 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 16 août 2010
12 août 2010 à 14:46
Non, il n'y a pas de cellule vide entre deux valeurs
0

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

Posez votre question
the_little_big_man Messages postés 86 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 14 février 2011
12 août 2010 à 15:19
voila. il te suffit de remplace la précedente macro par celle ci.
bonne journée

Sub Macro1()
'
' Macro1 Macro
'

Dim sheetname As String
Dim sumB As Long, sumH As Long, sumI As Long
Dim cel As String


sheetname = InputBox("Tapez le nom de la feuille:", "Trie de 'label' par ordre alphabÈtique")

ActiveWorkbook.Worksheets(sheetname).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(sheetname).Sort.SortFields.Add Key:=Range("C1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(sheetname).Sort
.SetRange Range("C:C")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'somme de toute la colone B
cel = Range("B65536").End(xlUp).Row
Cells(Range("B65536").End(xlUp).Row + 1, "B").Select
ActiveCell.Formula = "=SUM(B1:B" + cel & ")"
ActiveCell.Interior.Color = vbRed
'somme de toute la colonne H
cel = Range("H65536").End(xlUp).Row
Cells(Range("H65536").End(xlUp).Row + 1, "H").Select
ActiveCell.Formula = "=SUM(H1:H" + cel & ")"
ActiveCell.Interior.Color = vbRed

'somme de toute la colonne I
cel = Range("I65536").End(xlUp).Row
Cells(Range("I65536").End(xlUp).Row + 1, "I").Select
ActiveCell.Formula = "=SUM(I1:I" + cel & ")"
ActiveCell.Interior.Color = vbRed
End Sub
0
the_little_big_man Messages postés 86 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 14 février 2011
12 août 2010 à 15:24
rajoute cette ligne apres ton sheetname=input....

"If sheetname = "" Then Exit Sub"

une petite sécurité au cas tu selectionnerais "cancel" dans ton inputbox
0
tetragramaton Messages postés 6 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 16 août 2010
12 août 2010 à 15:40
Un très grand merci pour ta solution qui fonctionne nickel mise à part une précision que j'ai oublié de te mentionner à savoir que c'est toute la feuille doit être triée par rapport à la colonne C (de A à Z) et pas seulement la colonne C, car les données de chaque ligne sont liées.
Peux-tu me donné la correction ?


Encore merci pour ton aide.
0
the_little_big_man Messages postés 86 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 14 février 2011
12 août 2010 à 16:07
Sub Macro1()
'
' Macro1 Macro
'

Dim sheetname As String
Dim sumB As Long, sumH As Long, sumI As Long
Dim cel As String


sheetname = InputBox("Tapez le nom de la feuille:", "Trie de 'label' par ordre alphabÈtique")

Cells.Select
ActiveWorkbook.Worksheets(sheetname).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(sheetname).Sort.SortFields.Add Key:=Range("C:C") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(sheetname).Sort
.SetRange Range("A:Z")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'somme de toute la colone B
cel = Range("B65536").End(xlUp).Row
Cells(Range("B65536").End(xlUp).Row + 1, "B").Select
ActiveCell.Formula = "=SUM(B1:B" + cel & ")"
ActiveCell.Interior.Color = vbRed
'somme de toute la colonne H
cel = Range("H65536").End(xlUp).Row
Cells(Range("H65536").End(xlUp).Row + 1, "H").Select
ActiveCell.Formula = "=SUM(H1:H" + cel & ")"
ActiveCell.Interior.Color = vbRed

'somme de toute la colonne I
cel = Range("I65536").End(xlUp).Row
Cells(Range("I65536").End(xlUp).Row + 1, "I").Select
ActiveCell.Formula = "=SUM(I1:I" + cel & ")"
ActiveCell.Interior.Color = vbRed
End Sub
0
tetragramaton Messages postés 6 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 16 août 2010
12 août 2010 à 16:24
Bon ben tout fonctionne parfaitement !

Merci beaucoup
0
the_little_big_man Messages postés 86 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 14 février 2011
12 août 2010 à 16:33
avec plaisir
0
tetragramaton Messages postés 6 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 16 août 2010
16 août 2010 à 10:23
Maintenant je voudrais savoir comment faire la somme dès qu'une casse vide est rencontrée ?


Merci par avance
0
Rejoignez-nous