Somme de couleur rouge, obtenue par mise en forme cond
bonjour,
j'ai une liste de référence de stock, la valeur de ces stocks subis une mise en forme conditionelle, par exemple
>x € mis en rouge
<x € mis en vert
je souhaite obtenir le nombre de ces cases "à erreur" pour me dire par exemple "tilt il y x rouge"
j'ai trouvé ce code
'Fonction SomCool
'Exemple : Mettre dans la cellule du résultat la formule suivante
'=SomCool(A1:B5;"rouge")
'On peut ajouter des couleurs a la fonction.
Function SomCool(Zne As Range, Couleur As String)
Application.Volatile True
Select Case Couleur
Case "rouge"
Couleur = 3
Case "vert"
Couleur = 50
Case "jaune"
Couleur = 6
Case "bleu"
Couleur = 5
Case "gris"
Couleur = 15
Case "orange"
Couleur = 40
End Select
For Each cell In Zne
If cell.Interior.ColorIndex = Couleur Then cvSomme = cvSomme + 1
Next
SomCool = cvSomme
End Functionmais j'ai 2 soucis, il fonctionne si je met manuellement la couleur rouge mais pas avec les mises en forme conditionnelles (malgré des cases rouges ils m'affiches 0 erreurs)
Et en outre le resultat ne se met pas a jour dynamiquement.
Par exemple si je rajoute manuellement la couleur rouge, pour qu'elle soit prise en compe dans la formule il faut que je la "revalide" pour qu'elle m'affiche 1 au lieu de 0.
voilà si quelqu'un à une idée
cordialement et merci
Bonjour,
Plutôt que chercher à comptabiliser les couleurs, il est préférable que tu effectues ce comptage selon la condition initiale >x€, <y€.
Pour aller plus, il faut que tu joignes un fichier exemple accompagné de quelques explications.
A+
Dans l'exemple joint, on surveille les plages modifiables par saisie, à savoir D7:H10 et K7:K10 avec l'évènement Change de la feuille.
Si une valeur négative est saisie, toutes les valeurs négatives des plages D7:I10 et K7:L10 sont colorées en rouge.
Le compteur enregistre une erreur pour chaque valeur négative trouvée.
Si la valeur d'une cellule des plages D7:I10 et K7:L10 dépasse 1000€ la cellule est colorées en jaune.
Le compteur enregistre une erreur pour chaque valeur > 1000€ trouvée.
A+
bonjour, désolé de l'attente je n'étais plus au travail,
J'ai bien adapté ton code pour ma feuille de travail, mais je n'arrive pas à programmer la case qui comptabilise les erreurs.
Meme dans le fichier que tu m'a envoyé, si je change la case à savoir L12 en par exemple M12 les erreurs continues à se comptabilisé en L12 ?
Next Cel
[m12] = Cptr
End If
End Subje ne sais si cela vient de moi ou si ca te le fait aussi ?
merci d'avance
Bonjour,
A priori, ta modification du code est correcte. Le nombre d'erreur devrait s'inscrire en M12.
Peux-tu joindre un exemple ?
A+
je te redonne le tiens avec ma simple modif pour la case qui comptabilise les erreurs
cordialement
La procédure utilisée est une procédure évènementielle (Worksheet.Change).
Cette procédure doit être placée dans le module de la feuille concernée, à savoir le module Feuil1 (Feuil1).
Or, tu l'as placée dans un module standard (Modules / Module 2).
Pas bien !...
La preuve par l'exemple
A+
mes excuses, je suis encore en phase d'apprentissage j'ai commencé à essayer de faire du VBA il y a 3j
Simple demande supplémentaire, je ne sais pas si c est faisable, mais comme chaque mois je vais copier le mois précédent à la suite et changer les dates, est t il possible qu il me décalle chaque mois les champs pris dans la macro automatiquement ?
Actuellement pour le mois de mars je prends ceci
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Application.Union([y6:ac78], [am6:am78])) Is Nothing Then
For Each Cel In Application.Union([y6:ac78], [ar15:ar271])
If Cel < 0 Then
Cptr = Cptr + 1
Cel.Interior.ColorIndex = 3
ElseIf Cel > 5000 Then
Cptr = Cptr + 1
Cel.Interior.ColorIndex = 6
Else
Cel.Interior.ColorIndex = xlNone
End If
Next Cel
[ac3] = Cptr
End If
End SubIl faudrait que pour le mois suivant il m'affiche ces colonnes mais +5 tt en gardant les mêmes lignes soit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Application.Union([ad6:ah78], [ar6:ar78])) Is Nothing Then
For Each Cel In Application.Union([ad6:ah78], [aw15:aw271])
If Cel < 0 Then
Cptr = Cptr + 1
Cel.Interior.ColorIndex = 3
ElseIf Cel > 5000 Then
Cptr = Cptr + 1
Cel.Interior.ColorIndex = 6
Else
Cel.Interior.ColorIndex = xlNone
End If
Next Cel
[ah3] = Cptr
End If
End SubDonc par exmple tous les 5 du mois il incremente automatiquement ce "+5" ;
Si tu peux me renseigner sur la marche à suivre
cordialement
Tu peux définir les plages de saisie et les plages à surveiller en fonction d'une cellule de référence.
Le choix de cette référence dépendra de la structure de ta feuille. Par exemple, elle pourrait correspondre à la dernière cellule renseignée sur la ligne d'en-têtes.
Les plages seraient alors définies suivant un décalage par rapport à cette cellule de référence.
La définition de ce décalage dépendra aussi de l'étendue du traitement que tu souhaites effectuer. Est-ce que les plages des mois précédents doivent être surveillées ou seul le dernier mois est à prendre en compte ?
Sans classeur et une présentation sur plusieurs mois, difficile de pousser l'analyse plus loin.
J'en profite pour te conseiller de partir d'un projet abouti avant de commencer à écrire un code. Si tu joues à adapter ton code en fonction de l'avancement du projet, tu pars en galère... et attention au mal de mer !
A+
D'accord. Oui c'est un fichier qui va evoluer mais toujours de la même facon (colonne identique) comme nous évaluons le stock 1x par mois.
Donc ce n'est pas possible de lui "dire".
"Tous les mois à date fixe (basé sur le calendrier du PC par exemple ?) tu décalles la macro de 5 colonnes ?"
Sinon je ne vais pas me lancer dans quelques chose que je ne maitrise pas, je modiferai les plages à la main, ce sera plus logn mais au moins y'aura pas de risque de faire un mauvais code.
Si tu me dis que ce n'est pas possible je clos le poste et te remercie pour ton travail
cordialement
Je ne t'ai pas dit que ce n'est pas possible. Je t'ai même expliqué comment faire.
Par contre, je t'ai dit aussi que sans classeur et une présentation sur plusieurs mois, il est difficile de pousser l'analyse plus loin.
A+
je te transmet un exemple sur plusieurs mois, dis moi si cela te convient ?
cordialement
Tout d'abord, cela me semble réalisable sans grande difficulté. Il faut simplement que tu définisses précisement le résultat attendu.
Quelques questions à se poser :
1) Vas-tu créer un tableau complet pour les 12 mois et renseigner ce tableau mois par mois ?
C'est la solution la plus simple. Tu peux ainsi prévoir une feuille pour chaque année.
L'autre solution consiste à générer chaque mois un ensemble de 5 colonnes (+ 2 colonnes pour la valorisation) et insérer ces colonnes dans le tableau . Il faut alors gérer la phase de création.
Dans les deux cas, il faut prévoir un report des valeurs de l'année N-1 dans la première colonne puisque la somme du mois prend en compte le solde du mois précédent.
2) Pourquoi séparer la partie valorisation et la placer en bout de colonne alors que tu pourrais l'intégrer au traitement mensuel ?
Chaque traitement mensuel serait alors composé de 7 colonnes.
3) Pour la détection d'erreur, tu ne dis pas si les plages des mois précédents doivent être surveillées ou si seul le dernier mois est à prendre en compte ?
A priori, je dirais qu'elles doivent être prises en compte puisque les traitements mensuels sont dépendants du report de solde.
Dans ce cas, le comptage d'erreurs se ferait sur l'ensemble du tableau.
A te relire.
A+
1) Je peux créer directement les 12 mois (ou +) du tableau MAIS ils seront sur une seule feuille pour comparer rapidement M-1 et M
(je ne peux changer ... désolé ...) Mais dans ce cas là il faudra pouvoir gérer les changements d'années je ne vais pas créer 50 ans directement ^^
Mais pour être Franc il m'arrangerai mieux de créer chaque mois les colonnes
2) Concernant la valorisation là encore on l'a dissociée des entrées et sorties pour pouvoir comparer rapidement la valeur de chaque référence en en fin de document pour "m vs m+1 vs m+2" ect ...
3) Pour la gestion des erreurs il n'est pas nécessaire de prendre en compte les mois passées, en effet cette inventaire est "nouveau", 01/01/14 donc se serait du progressif et comme point de départ mettons le solde final de Mars.
A tester.
Le nouveau mois est généré avec le bouton en haut à gauche.
A+
EDIT :
J'ai oublié la recopie incrémentée dans les cellules de la plage "Total valeurs".
Il faudra que tu ajoutes la ligne en gras
Cells(7, ColFin + 2).Formula = "=" & SommeMois & "*" & Cells(7, ColFin + 1).Address(0, 0)
Cells(7, ColFin + 2).AutoFill Range(Cells(7, ColFin + 2), Cells(10, ColFin + 2))
A+
Merci de ta patience, vraiment énorme ton taf oO
je clos le poste, merci beaucoup
cordialement