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

Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

  • Initiateur de la discussion Initiateur de la discussion jp65
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

jp65

Guest
Bonjour le forum

Je vous soumet ce sujet qui me pose problème.

Je voudrais colorer les cellules d'une ligne qui contiennent la valeur la plus élevée et la plus petite.
Les cellules concernées ne sont pas contigues mais liées à l'entête de leur colonne.
Je joint un fichier pour tenter d'être plus clair.

Par contre je souhaiterais que celà soit fait en VBA et non en MFC.😛

Je vous remercie pour l'aide que vous voudrez bien m'apporter.

Bonne soirée
 

Pièces jointes

Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

Re.Re

Allez on repart.

Modeste
Quand je rempli les diverses cellules d'un groupe (par exemple les colonnes A) elles sont colorées ou non de manière logique au vu du résultat souhaité.
Tout va bien.
Les cellules remplies dans les autres groupes de colonnes n'influent pas sur le groupe déjà renseigné.
Tout va bien.
c'est après que ça se gâte.
Quand je supprime le contenu des cellules d'un groupe, la couleur rouge réapparait dans toutes les cellules du groupe précédemment renseignées alors que là elles sont vides.
Si je re-renseigne une de ces cellules les autres cellules rouges vides redeviennent blanches.
Si je re-supprime le contenu de la cellule précédemment renseignée, de nouveau les cellules du groupe redeviennent rouge.

jpb388
Quand je renseigne deux cellules dans un groupe tout va bien.
Si je renseigne une troisième cellule dans le groupe le code plante:
erreur d'exécution 13
Incompatibilité de type
sur la ligne For i = Départ To Col Step 4

Je continue à travailler sur les deux codes pour tenter de corriger tout cela.

Bonne soirée et bravo à l'équipe de France de rugby
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

re
essaye celle ci mélangeant les 2 macros (celle de Modeste et moi) cela semble rouler
 

Pièces jointes

Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

Re aussi,

Comme j'avais regardé, je poste aussi: si tu veux effacer, soit tu désactives les macros pendant ce temps-là, soit tu utilises le code ci-dessous, mais tu ne peux effacer qu'une cellule à la fois.
On pourrait aussi imaginer que l'effacement soit déclenché par un autre événement, pour ne pas transformer en usine à gaz!
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 5 Or Target.Row < 4 Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target = "" Then Target.Interior.ColorIndex = xlNone: Exit Sub

Col = Cells(3, Columns.Count).End(xlToLeft).Column
colModif = (Target.Column - 5) Mod 4
Set pl = Target
For x = 5 To Col Step 4
     Set pl = Union(pl, Cells(Target.Row, x).Offset(0, colModif))
     Cells(Target.Row, x).Offset(0, colModif).Interior.ColorIndex = xlNone
Next x
Min = Application.Min(pl)
Max = Application.Max(pl)
For x = 5 To Col Step 4
     If Cells(Target.Row, x).Offset(0, colModif) = Min Then Cells(Target.Row, x).Offset(0, colModif).Interior.ColorIndex = 43
     If Cells(Target.Row, x).Offset(0, colModif) = Max Then Cells(Target.Row, x).Offset(0, colModif).Interior.ColorIndex = 3
Next x
End Sub
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

Bonjour les 'jp',
Salut Si... 🙂

En espérant que jp65 ne nous sorte pas une manipulation inattendue 😀 ... la version suivante permet l'effacement d'une plage entière (même sur plusieurs lignes).
Pour autant que je puisse en juger, ça semble fonctionner (j'insiste sur le soulignement)

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 5 Or Target.Row < 4 Then Exit Sub
If Target.Count > 1 Then
    If Application.Sum(Target) = 0 Then Target.Interior.ColorIndex = xlNone
    Exit Sub
End If

Col = Cells(3, Columns.Count).End(xlToLeft).Column
colModif = (Target.Column - 5) Mod 4
Set pl = Target
For x = 5 To Col Step 4
     Set pl = Union(pl, Cells(Target.Row, x).Offset(0, colModif))
Next x
pl.Interior.ColorIndex = xlNone
If Application.Sum(pl) = 0 Then Exit Sub
Min = Application.Min(pl)
Max = Application.Max(pl)
For Each c In pl
     If c = Min Then c.Interior.ColorIndex = 43
     If c = Max Then c.Interior.ColorIndex = 3
Next c
End Sub
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

salut

bonjour Modeste 😀
...Pour autant que je puisse en juger, ça semble fonctionner (j'insiste sur le soulignement)

Chez moi il y a des cellules qui oublient de changer de couleur (test avec le fichier ci-dessus).

Pourquoi n'ai-je pas pensé limiter le tset sur une seule colonne ?
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Rows.Count > 1 Then Exit Sub
  If Intersect(Target, [Tt]) Is Nothing Then Exit Sub
  co = Target.Column      'pas de bouclette
  Set P = [Tt].Columns(co)
   P.Interior.ColorIndex = xlNone
   pP = Application.Min(P): pG = Application.Max(P)
   For L = 1 To [Tt].Rows.Count
     Set R = [Tt].Columns(co).Rows(L)
     If R <> "" And R = pP Then R.Interior.ColorIndex = 3
     If R <> "" And R = pG Then R.Interior.ColorIndex = 43
    Next
End Sub
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

Re,

Si... à dit:
Chez moi il y a des cellules qui oublient de changer de couleur (test avec le fichier ci-dessus).
Parce que nous n'avons pas dû comprendre la même chose dans la demande de jp65 😕 (enfin je suppose!?)
De ce que j'ai compris, lorsqu'on change une valeur dans une ligne x, seules les valeurs de la même ligne mais aussi avec le même intitulé de colonne doivent être comparées.

Ainsi, si on modifie la valeur dans une colonne avec "B" en en-tête, on ne compare qu'avec les valeurs des autres colonnes ayant le même en-tête. Les couleurs des colonnes "A", "C" et "D" ne sont pas impactées.

Ceci suffit-il à expliquer ton trouble? 🙂 ... Ou y a-t-il quelque chose qui m'échappe, une fois encore? 😱
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

Bonjour à tous mes sauveurs

Je n'ai pas encore pu essayer toutes vos solutions mais au moins je peux rassurer Modeste, l'explication que tu vient de donner à SI est pile exacte.
Pour faire un complément d'explication à SI, si plusieurs cellules sont identiques en min ou max il faut que toutes soient colorées.
Les cellules dont la valeur est entre min et max ne sont pas colorées.

Je me remet au boulot.
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

Re encore

Bon j'ai testé les diverses solutions proposées.

jpb388
J'ai torturé ton code et là ça vas beaucoup, beaucoup mieux.
J'ai quand même un message d'erreur quand je supprime le contenu de la cellule d'un groupe (la dernière) au niveau de NbPetit = Application.Min(Plage)
Erreur d'exécution 5
Argument ou appel de procédure incorrect
J'ai résolu le problème à la hussarde en insérant juste avant un On Error Resume Next.
C'est peu être laborieux mais ça marche.

Modeste
Torture également sur ton code et je ne relève aucun dysfonctionnement.

Si
Il n'y a aucune coloration de cellule.
De plus j'ai un message d'erreur quand je renseigne ou efface une cellule
Erreur d'éxecution 424
Objet requis
sur la ligne If Intersect(Target, [tt]) Is Nothing Then
J'ai déclaré Tt comme object.
Aucune modification dans le fonctionnement mais le message d'erreur a changé
erreur d'exécution 13
Incompatibilité de type
sur la même ligne If Intersect(Target, [tt]) Is Nothing Then
Ce qui est terrible c'est que visiblement tu as testé ton code et tu arrive à colorer les cellules alors que moi nada.


J'ai inséré le code de Modeste à mon vrai fichier et c'est vraiment pas mal du tout.
Par contre comme j'ai décidé d'être pénible ce Weekend 😡
Y a t'il moyen de rajouter une fonction au code de base. Je précise que ce n'était pas prévu au départ.
Peut on décider q'un groupe de colonnes (par exemple toutes les colonnes D) ne soit pas affectée par le code.

Merci encore de m'avoir accompagné en ce weekend pluvieux et froid.
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

j'ai décidé d'être pénible ce Weekend

♫♫♫ Tous les contributeurs sont actuellement en ligne ♫♫ Le temps d'attente est de 12 jours, 15 heures et 28 minutes; nous vous recommandons de réessayer plus tard ♫♫♫ 😉


[...]


Blague à part, essaie de mettre un point d'arrêt sur cette ligne: colModif = (Target.Column - 5) Mod 4 ... que vaut la variable colModif quand tu as modifié la valeur d'une des colonnes "D"?

Que se passerait-il si, à la ligne suivante, tu ajoutais: If colModif = la_valeur_que_tu_trouveras_tout_seul Then Exit Sub
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

Bonjour le forum

Modeste suite à tes conseils:
J'ai rajouté ce bout de code
Code:
Range("AJ1") = colmodif
pour voir la valeur de colmodif.
J'ai pu voir que la variable prenait la valeur 0 à 3 (A=0,B=1,C=2,D=3).
J'ai donc rempli ta proposition de code ainsi
Code:
If colmodif = 3 Then Exit Sub
.
Cela semble fonctionner (semble devient mon mot préféré).

Merci pour tes conseils.
Je continue à triturer mon fichier.

Bonne journée à tous sous le soleil (du moins dans les Pyrénées)
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

Bonjour jp65,

Comme tu es repassé sur le forum à plusieurs reprises, depuis ton dernier message, tu penseras à nous dire si tu as fini de "triturer" ton fichier ... et s'il se confirme que le code fonctionne?
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

Bonjour le forum

Bonjour Modeste

J'ai continué effectivement à torturer le code après l'avoir intégré à mon "vrai" fichier ce qui m’a amené à légèrement l'adapter.
Avec les divers essais effectués, je ne l'ai pas pris en défaut.
Voici pour info le code tel qu'utilisé sur mon fichier:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 14 Or Target.Row < 5 Then Exit Sub
If Target.Count > 1 Then
    If Application.Sum(Target) = 0 Then Target.Interior.ColorIndex = xlNone
    Exit Sub
End If
COL = Cells(4, Columns.Count).End(xlToLeft).Column
colmodif = (Target.Column - 14) Mod 4
If colmodif = 3 Then Exit Sub
Set PL = Target
For x = 14 To COL Step 4
    
     Set PL = Union(PL, Cells(Target.Row, x).Offset(0, colmodif))
Next x


PL.Interior.ColorIndex = xlNone
If Application.Sum(PL) = 0 Then Exit Sub

Min = Application.Min(PL)
Max = Application.Max(PL)
For Each c In PL
     If c = Min Then c.Interior.ColorIndex = 43
     If c = Max Then c.Interior.ColorIndex = 3
     If Min = Max Then Exit Sub
     
     
Next c
End Sub

Je remercie tous ceux qui mon aidés
jpb388😉 Staple1600😉 SI😉 et bien sur Modeste😉

Bonne soirée
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

Bonsoir à tous

Modeste
Je sais que tu vas encore t'écrier : "Encore les panties de Staple !!!"
Mais je prends le risque d'avoir mal aux oreilles
Où sont donc tes paires de Dim ?
(j'ose pas pas parler de celles de Si... car j'ai l'ouie fragile 😉)
 
Re : Recherche valeur MIN MAX dans lignes suivant l'entête des colonnes

Bonjour Staple1600

Question à 100 balles
Quel est l'intérêt si on le fait ou le risque si on le fait pas de déclarer les variables😕
Quand on démarre le code avec Option explicit on a pas le choix mais au final est-ce que le code tourne moins bien.

Ce n'est pas le but de ce post mais après tout la question est intéressante et de toute façon elle est valable pour tous les post quel qu'il soit.

JP
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

R
Réponses
7
Affichages
2 K
C
Réponses
3
Affichages
1 K
claude.dasilva
C
B
Réponses
4
Affichages
2 K
benoitoleron
B
M
Réponses
5
Affichages
3 K
Michelll38
M
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…