Nouvelle ligne avec somme

E

Evelynetfrancois

Guest
bonsoir le forum

Ma macro insert une ligne vide sous chaque série de nom ,grâce au bouton "insertion ligne" lol...
est il possible d'avoir
un total(somme) sous chaque série (en colonne C)en ColorIndex=3 positionné dans cette nouvelle ligne
soit par exemple ,une fois la ligne insérée, pour automobile en "C8" = "107"

un fichier joint pour plus de lumières!!
merci d'avance
evelynetfrancois

Sub separer()
Dim cell As Range
Dim depart As String
Application.ScreenUpdating = False
depart = Range("b2").Value
For Each cell In Range("b2", Range("b65536").End(xlUp))
If Not cell.Value = depart Then
Rows(cell.Row).Insert Shift:=xlDown
depart = cell.Value
End If
Next
End Sub
 

Pièces jointes

  • lignesommes.zip
    16.8 KB · Affichages: 22
L

LaurentTBT

Guest
Bonsoir.

Après l'insertion de la ligne, ajoutez ces 2 lignes:

cell.Cells(0, 2).FormulaR1C1 = "=SUMIF(C[-1],R[-1]C[-1],C)"
cell.cells(0,2).interior.colorindex=3

Cela devrait suffir.

Mais comme vient de me dire Jean-Marie sur le chat, un TCD ferait bien l'affaire.

Bonne nuit.
Laurent.
 
E

Evelynetfrancois

Guest
bonjour LaurentTBT ,bonjour Jean-marie
tout d'abord Merci beaucoup .
(ce n'est pas la cell que je souhaitais en colorindex=3 mais la police...si possible)
Vous avez mille fois raison sur le TCD , mais j'avous , n'en ayant jamais fait je connais assez mal ,voir pas du tout le fonctionnement donc j'ai du mal à me lancer lol ......
mais je vais essayer
bonne journée
merci encore
evelynetfrancois
 
L

LaurentTBT

Guest
Bonjour à tous.

Avec quelques délais...
pour colorier la police, ce doit être:
Cell.font.colorindex=3, mais j'écris sans accés à Excel, donc sans vérifier.

Pour ce genre de code VBA, je vous conseille d'utiliser l'enregistreur de macro, il fera tout pour vous (malheureusement en surchargeant le code). Mais au moins, vous trouverez la syntaxe qui vous fait défaut.

En l'occurrence, il suffit ici de lancer l'enregistreur de macro, de modifier la couleur de police d'une cellule quelconque, de fermer l'enregistreur, et d'aller voir le code qu'il aura automatiquement généré.

Bon courage.

Laurent.
 
E

Evelynetfrancois

Guest
bonsoir et merci laurentTBT

C'est bon pour la police rouge et gras j'avais solutionné;
cependant
les deux lignes que vs m'avez donné ci dessous;
cell.Cells(0, 2).FormulaR1C1 = "=SUMIF(C[-1],R[-1]C[-1],C)"
cell.cells(0,2).font.colorindex=3
conviennent parfaitement
mais comme la macro insère une ligne que entre chaques articles différents il est evident que la dernière catégories n'est pas prise en compte
j'ai donc essaye de rajouter une ligne en dernière position
Rows(Range("b1").End(xlDown).Row + 1).Select
Selection.Insert Shift:=xlDown
et d'y incorporer vos deux lignes
cell.Cells(0, 2).FormulaR1C1 = "=SUMIF(C[-1],R[-1]C[-1],C)"
cell.cells(0,2).font.colorindex=3
pour obtenir un resultat similaire aux autres categories.
mais résultat est nul
j'ai re joint un petit fichier
merci d'avance et bon Dim as anche
Evelynetfrancois

Sub separer()
Dim cell As Range
Dim depart As String
Application.ScreenUpdating = False
'Rows(Range("b2").End(xlDown).Row + 1).Select
' Selection.Insert Shift:=xlDown
'cell.Cells(0, 2).FormulaR1C1 = "=SUMIF(C[-1],R[-1]C[-1],C)"
'cell.Cells(0, 2).Font.ColorIndex = 3
depart = Range("b2").Value
For Each cell In Range("b2", Range("b65536").End(xlUp))
If Not cell.Value = depart Then
Rows(cell.Row).Insert Shift:=xlDown
cell.Cells(0, 2).FormulaR1C1 = "=SUMIF(C[-1],R[-1]C[-1],C)"
With cell.Cells(0, 2).Font
.ColorIndex = 3
.Bold = True
End With
depart = cell.Value
End If
Next
End Sub
 

Pièces jointes

  • exemple.zip
    8.2 KB · Affichages: 28
  • exemple.zip
    8.2 KB · Affichages: 25
  • exemple.zip
    8.2 KB · Affichages: 28
L

LaurentTBT

Guest
Bonsoir.

Cell est ici une variable qui est utilisée dans la boucle
for each cell in range...
next cell.
Avant cette boucle, cell n'est pas initialisée.
D'ailleurs, mieux vaut utiliser un nom de variable plus différent de ce qu'utilise déjà VBA. (par exemple Cellule au lieu de cell)

En fait, le plus simple est que la boucle for each cell... prenne en compte aussi la dernière série, et pour cela, il suffit que la plage de cellule balayée comprenne une ligne de plus, ce qui peut être fait tout simplement par:
For Each cell In Range("b2", Range("b65536").End(xlUp).cells(2,1))

Voici la procédure complète:

Sub separer()
Dim Cellule As Range
Dim depart As String
Application.ScreenUpdating = False
depart = Range("b2").Value
For Each Cellule In Range("b2", Range("b65536").End(xlUp).cells(2,1))
If Not Cellule .Value = depart Then
Rows(Cellule .Row).Insert Shift:=xlDown
Cellule .Cells(0, 2).FormulaR1C1 = "=SUMIF(C[-1],R[-1]C[-1],C)"
With Cellule .Cells(0, 2).Font
.ColorIndex = 3
.Bold = True
End With
depart = Cellule .Value
End If
Next Cellule
End Sub

Désolé de ne pas l'avoir vu plus tôt.

Bonne soirée et bon week end.
Laurent.

PS: on peut oublier le vous (Moi, j'utilisais le vous pour Evelyne ET François)
 
E

Evelynetfrancois

Guest
bonsoir laurentTBT

merci beaucoup y a pas à etre desolé
pour moi c'est clair mais pour toi qui n'est pas dans mon projet , tu ne peux pas tout deviner!!et c'est deja super simpa de me depatouiller dans tt ça

je fais les essais (demain) et bien sur, je te tiens au courant dans tous les cas
A+ et encore merci ;

Evelynetfrancois

PS: quel pseudo à la c..
 
D

Dan

Guest
Bonsoir,

J'arrive un peu tard dans ce projet mais sait-on jamais, cela servira peut-être. Une solution simple via le calcul "sous-totaux" et une autre via TCD.

Solution 1 :
En utilisant les fonctions "sous totaux" via le menu/données/sous-totaux. Ensuite dans la fenêtre choisir "produit dans "a chaque changement de", fonction "somme" et "ajouter un sous total" chosir "Vol"

Solution 2 :
Plus complexe, en construisant un TCD basé sur la plage des données de la feuille "entrée-2".
Le résultats sont regroupés par mois et année.
En cas d'ajout de données, veiller à insérer une ligne dans le tableau et non à la suite du tableau de données. Ceci permet au TCD de prendre en compte le ou les nouveaux enregistrements.

Le fichier reprend les solutions proposées.

Espérant t'avoir aidé dans ce projet.

@+

Dan
 

Pièces jointes

  • SelectionDates_56881_V1.zip
    48.5 KB · Affichages: 23
E

Evelynetfrancois

Guest
bonjour Dan
Voici une fonction que je n'avais jamais utilisé (données/sous-totaux)
qui est vraiment super bien
je l'ai enregistré avec l'enregistreur de macro pour pouvoir l' incorporer dans le reste d'une macro existante : résultat plus qu' honorable
merci beaucoup
pour ce qui est des TCD , je les trouve toujours difficile d'accès pour des non initier et de plus moins clair que des sous totaux (enfin pour se qui est de mon projet, et ça n'engage que moi lol )
en tout cas merci beaucoup pour ton travail et le temps que tu m'as consacrer
bonne journée
Evelynetfrancois
 
E

Evelynetfrancois

Guest
bonjour laurentTBT

j'ai fait les essais aprés les modifs de la macro , tout va au poil !!!
merci
As-tu vu la soluce de dan (plus haut) est pas mal non plus
les sous totaux donne également un résultat très correct
je n'ai plus que l'embarrât du choix lol....
merci à vous deux
très bonne journée
Evelynetfrancois
 
L

LaurentTBT

Guest
Bonjour à tous.

Et oui, la fonction sous totaux est très bien pour cela. On me l'a fait découvrir... hier soir, en parlant de ce fil sur le chat. Jem'apprétais à t'en faire part, et Dan m'a devancé.

Maintenant, il faut que tu te mettes aux TCD, car si tu manies des petites bases de données, c'est très pratique, et bien plus puissant que la fonction sous totaux (qui en est peut-être l'ancêtre).

Allez, bonne journée à tous, et bravo (hélas) aux anglais.
 

Discussions similaires

Réponses
21
Affichages
417

Statistiques des forums

Discussions
312 555
Messages
2 089 547
Membres
104 208
dernier inscrit
laura29180