Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 somme couleur colonnes

teddy33130

XLDnaute Nouveau
bonjour a tous
j'ai une base de données avec 500 lignes (pour l'instant)
je cherche a faire une addition des cellules en fonction de leur couleur (il y en a deux , blanc ou vert)
en bas de ma base de données
mais bien sur au fur et a mesure que ma base de données s'alimente les cellule contenant les formules vont se decaler vers le bas car j'insere ma nouvelle ligne en ligne 2
en ligne 1 j'ai les entete des colonnes
esperant avoir ete clair
amicalement
 
Solution
Un essai en PJ à bien vérifier.

1- Création d'une feuille X ( que j'ai initialisée avec InitPageXcouleur ). Cette feuille est mis en xlSheetVeryHidden pour n'être jamais visible.
Le but est que chaque fois qu'on touche à Base de données on fait exactement la même chose dans X. Si on met vert alors on met V dans X, si on insère une ligne, on fait pareil dans X. A tout moment une cellule en LC dans base à son équivalent couleur dans X. Je ne met que V pour vert, le reste étant blanc il n'est pas nécessaire de le préciser.
2- Dans le code :
a- A chaque fois qu'on insère une ligne, on fait pareil dans X :
VB:
        With Feuil3
            .Rows("2:2").Insert T2 = xlDown, CopyOrigin:=xlFormatFromLeftOrAbove    'insere une ligne a la ligne...

sylvanu

XLDnaute Barbatruc
Supporter XLD
En fait ça recalcule tout à chaque fois, donc cela dépend de votre fichier.... d'où un fichier test représentatif, quand c'est possible.
Autre solution, à la fin de votre userform vous faites un Calculate. Ca ne sera recalculé qu'à ce moment là.
 

teddy33130

XLDnaute Nouveau
VB:
            For i = 1 To 30
                .Cells(2, i + 3) = Controls("TV" & i)
                If .Cells(2, i + 3) > "" Then .Cells(2, i + 3) = Replace(.Cells(2, i + 3), ".", ",") * 1    ' remplace les . par des ,& multiplie par 1
                If .Cells(2, i + 3) > "" Then .Cells(2, i + 3) = .Cells(2, i + 3) * 1: .Cells(2, i + 3).NumberFormat = "0.000"    'met le formet 0.000
                If Controls("ch" & i) = True Then .Cells(2, i + 3).Interior.Color = RGB(192, 255, 96)
            Next
voici le code qui m'envoie les infos sur ma base de données ,y aurais t'il quelques chose a modifier pour que cela recalcule quand il renvois dans la cellule ??
 

teddy33130

XLDnaute Nouveau
VB:
For i = 1 To 30
                .Cells(2, i + 3) = Controls("TV" & i)
                If .Cells(2, i + 3) > "" Then .Cells(2, i + 3) = Replace(.Cells(2, i + 3), ".", ",") * 1    ' remplace les . par des ,& multiplie par 1
                If .Cells(2, i + 3) > "" Then .Cells(2, i + 3) = .Cells(2, i + 3) * 1: .Cells(2, i + 3).NumberFormat = "0.000"    'met le formet 0.000
                If Controls("ch" & i) = True Then .Cells(2, i + 3).Interior.Color = RGB(192, 255, 96)
            Next
            Calculate
comme ca tout simplement
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Dernière solution.
Quand vous entrez dans votre userform vous mettez :
VB:
Application.Calculation = xlCalculationManual
puis à la fin avant le endsub vous mettez
Code:
Application.Calculation = xlCalculationAutomatic
Calculate
Comme ça tous les calculs passent en manuel pendant le userform.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
??? Là ça dépend de la structure de votre code.
Dans ce cas remettez le Application.volatile dans la fonction.
Comme les calculs seront inhibés cela ne devrait pas avoir d'impact sur le temps. et le Calculate à la fin devrait tout recalculer.
Après ça dépend comment votre fichier est fait et si vous avez besoin de calculs intermédiaires.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
On peut déjà mettre astuce pour gagner du temps, car la formule SOMMECOUL(D137) dans la cellule blanche est inutile, il suffit de mettre : Somme totale moins somme verte. Ca divise par deux le nombres de fonctions.
Pouvez vous m'envoyez le code VBA, là il n'y a rien de confidentiel. Car normalement ça devrait marcher.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…