XL 2010 Mise en forme conditionnel [VBA] critères multiple

Nylream

XLDnaute Junior
Bonjour,

J'aimerais utiliser le VBA pour ma mise en forme conditionnel (je ne souhaite pas utiliser l'outil de base).
J'ai trois type de mise en forme pour mon tableau :
  1. Un mot à mettre en rouge si présent
  2. Doublon sur une même colonne : fond de la ligne à changer (prioritaire)
  3. le fond d'une ligne à changer, en fonction de deux cellule (F et G) sur cette même ligne
Concrètement:
  • Si deux fois le même nom en colone A, le fond de la ligne en rouge
  • Si (F= "Navy") + (G = "O-11", "O-10", "O-9") alors couleurs #xxxx
  • Si (F= "Marines") + (G = "O-11", "O-10", "O-9") alors couleurs #yyyy
  • le mot "Unkow" toujours en rouge
J'ai testé pour le mot "Unknow" en rouge, mais en vain, les autres étant plus complexe, je cale.

Code:
Sub ColorOnDouble()

    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$B2:$K="Unknow""
    ligne .Color = 255
   
End Sub

Merci d'avance pour votre aide,
 

Pièces jointes

  • Test_Tool - v3.2.xlsm
    117.8 KB · Affichages: 49

Nylream

XLDnaute Junior
Re,

J'ai quelques problèmes pour dissocier le code lié au liste de validation de celui des combobox, idem avec les modification lié aux noms propres.

J'ai tenté de repartir du fichier suivant qui était fonctionnel et répondant à mon besoin, et j'ai essayer d'y appliquer les modifications.

J'ai du coup réalisé que dans "POSTING"ce n'est pas les changements des affectations qui remontent, mais les doublons, ce que j'ai déjà en exergue via le bouton en A1 des feuilles *_Dispatch.
Ce que j'aimerais récupérer en revanche, c'est une mémoire des affectations passés.

Exemple,
émilie martin est XO du RLS 2, et devient CO du RLS 4, puis revient au RLS 2 en tant que ADC
j'aimerais pouvoir retrouver une disposition comme dans la capture en pj
Capture.PNG


Cette mémoire me permettra de remplir le fichier Orders, qui lui même lancera (via bouton) la création d'un pdf.

Merci pour votre aide,
 

Pièces jointes

  • Test_Tool - v3.0.8.2.5.xlsm
    116.6 KB · Affichages: 28

job75

XLDnaute Barbatruc
Bonjour Nylream, le forum,

Dans ce fichier (7) voici un code qui tient mieux la route pour le remplissage de la feuille POSTING.

La feuille ADRESSES (à masquer) est remplie en parallèle :
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal r As Range)
If Not Sh.Name Like "*_Dispatch*" Then Exit Sub
Application.EnableEvents = False
If r.Count > 1 Then Application.Undo: GoTo 1 'annulation des entrées/effacements multiples
Dim nom$, F As Worksheet, i As Variant, j%
nom = Application.Trim(r) 'SUPPRESPACE, sécurité
If nom = "" Then 'effacement
  Application.Undo 'effacement annulé
  If r <> "" Then MsgBox "Impossible to delete." & vbLf & _
    "If needed enter " & r & " into the correct cell."
Else
  Application.ScreenUpdating = False
  Application.Undo
  If r <> "" And r <> nom Then MsgBox r & " has to get first another posting !", 16: GoTo 1
  If r = nom Then GoTo 1
  Application.Undo
  With Feuil10 'CodeName de la feuille POSTING, à adapter
    Set F = Feuil11 'CodeName de la feuille ADRESSES, à adapter
    i = Application.Match(nom, .Columns(1), 0)
    If IsError(i) Then i = Application.CountA(.Columns(1)) + 1: _
      .Cells(i, 1) = nom: F.Cells(i, 1) = nom 'nouvelle ligne
    j = .Cells(i, .Columns.Count).End(xlToLeft).Column 'dernière cellule à droite
    .Cells(i, j + 1) = r(2 - r.Row) & " / " & r(1, 2 - r.Column)
    F.Cells(i, j + 1) = Sh.Name & "!" & r.Address(0, 0)
    .Cells(1, j + 1) = "POSTING " & j: F.Cells(1, j + 1) = "POSTING " & j
    If j > 1 Then Range(F.Cells(i, j)) = "" 'effacement de la position précédente
    With .UsedRange
      .WrapText = False
      .Columns.AutoFit: F.Columns.AutoFit 'ajustement largeur
      .Sort .Cells(1), xlAscending, Header:=xlYes 'tri
      F.UsedRange.Sort F.Cells(1), xlAscending, Header:=xlYes 'tri en parallèle
    End With
  End With
End If
1 Application.EnableEvents = True
End Sub
Nota 1 : il ne peut plus y avoir de doublons dans les feuilles "Dispatch".

J'ai donc supprimé la macro Rechercher, UserForm1 et la macro du double-clic.

Nota 2 : le classeur est protégé pour éviter la modification des noms des feuilles.

Pour masquer les feuilles il faut d'abord ôter sa protection.

Nota 3 : les textes des MsgBox sont en anglais..

A+
 

Pièces jointes

  • Test_Tool - v3.0.8.2(7).xlsm
    100.4 KB · Affichages: 33
Dernière édition:

Nylream

XLDnaute Junior
Bonjour Job75, le forum,

Merci pour cette nouvelle version, mais je suis désolé, le fichier n'est pour moi pas utilisable de cette façon.

Comme je l'ai dis plus haut, je ne peux pas, dans le contexte qui me concerne appliquer un tri par nom propre, même si ça vous parait plus cohérent. Par ailleurs, et toujours lié au contexte, je souhaite utiliser une recherche intuitive, permettant une saisie comme celle possible avec les combobox pour les feuilles "_Dispatch", ainsi que pour la feuille Orders.
En revanche, si cette même saisie intuitive peut être effectué sans combobox ou d'une manière plus "correct", je suis preneur.

Je tenterais dès que possible d'appliquer la modification pour POSTING qui s'approche beaucoup de ce que je recherche, en revanche, je ne comprend pas ce qu'est la feuille ADRESSES
La fonctionnalité qui empêcher les doublons, cumulé à l'historique est excellente.

Concernant la "Nota 3" et les messages en anglais ou dans la langue de l'application, c'est génial, mais c'est applicable comment ?

Encore merci pour votre aide,
 

job75

XLDnaute Barbatruc
Re,

Testez mon fichier (7) pour tous les cas de modifications des feuilles "Dispatch" et regardez à chaque fois les feuilles POSTING et ADRESSES pour bien comprendre.

Et vous comprendrez peut-être que mes solutions sont bien meilleures que ce que vous voulez faire.

Au post #35 je disais :
Peut-être faudra-t-il revoir la conception du vôtre si l'on veut éviter l'usine à gaz.
C'est ce que j'ai fait.

A+
 

Nylream

XLDnaute Junior
Re,

J'ai bien compris que je risque l'usine à gaz, et j'ai testé ce fichier

Je ne peux pas saisir de nom dans les feuilles _Dispatch, à moins de le saisir en entier et sans faute en plaçant le nom avant le prénom. Je ne peux pas faire de saisie partiel non plus, et le menu déroulant ne se déroule qu'en cliquant sur les petites flèches.
Si je ne saisie que le début du nom et appuie sur tab, j'ai une erreur, si j'essaie de cliquer sur la flèche pour avoir le menu après une saisie partiel, ça n'affiche rien.

Cela ne correspond pas du tout à mon besoin, j'en suis désolé.

Je comprend que ma demande est une usine a gaz, mais n'ayant pas notion de ce que je risque en ayant cette usine a gaz, je m'y lance malgré tout.

Je comprendrais tout à fait que vous ne souhaitiez pas participer à la conception d'une chose qui ne serait pas cohérente pour vous. Si en revanche, vous acceptez de m'aider, je ne cache pas que j'en aurais grand besoin vue mon niveau de compétence dans ce domaine.

Dans tout les cas, je vous remercie infiniment pour l'aide que vous m'avez déjà apportée, et le temps que vous m'avez consacré.
 

job75

XLDnaute Barbatruc
Re,

Importante modif au fichier (7) : j'ai interdit l'effacement d'un nom dans une feuille "Dispatch".

Même si c'était une erreur, tant pis, elle restera enregistrée dans POSTING.

Plus de problème de langue pour les boutons des MsgBox, ce sont des "OK".

PS : inutile d'essayer de nous convaincre Nylream que vos ComboBox sont une bonne solution.

Pour ce qui est des "noms propres" vous pouvez faire ce que vous voulez : j'ai bien indiqué dans la Worksheet_Change que la ligne correspondante est facultative.

A+
 

Nylream

XLDnaute Junior
Re,

Je n’essaie pas de vous convaincre de quoi que ce soit, je vous dis juste que c'est ce que je souhaite utiliser.
C'est juste un choix, et aussi absurde qu'il puisse vous paraitre, c'est le miens.

Vue que je n'arrive pour le moment pas à appliquer les autres modifications qui m’intéresses dans les fichiers que vous avez joint, sur ma dernière version comportant les combobox, elle me sont pour le moment inutilisable, et j'en suis le premier navré.

Comme dis plus haut, je me moque que ce soit des combobox, en revanche, je souhaite une fonctionnalité de saisie intuitive, me permettant de ne saisir qu'une partie du nom complet, pour filtrer la recherche.
Si cela implique de passer par les combobox, soit, mais je ne reviendrais pas sur une saisie différente comme celle que vous m'avez suggérer, même si elle sont plus propre et plus soignée d'un point de vue code, vue qu'elle ne répondent simplement pas à mon besoin.

Merci pour le temps que vous m'avez consacré,
 

job75

XLDnaute Barbatruc
Bonjour Nylream, le forum,

Je n'avais pas fait attention à cette énormité :
J'ai du coup réalisé que dans "POSTING"ce n'est pas les changements des affectations qui remontent, mais les doublons
Vous n'y êtes pas du tout, POSTING est le récapitulatif de toutes les entrées faites au cours du temps dans les feuilles "Dispatch".

Comme je l'ai dit c'est un historique de ces entrées, et j'ai dit aussi qu'il ne peut pas y avoir de doublons.

Il faudrait quand même tester ce que je propose !!!

J'en profite pour traiter votre feuille "Orders", avec 2 solutions dans les fichiers (8) et (8 bis) joints.

Tout se fait par formules, je vous laisse le soin de les découvrir.

Il y a juste une macro dans la feuille pour ajuster les largeurs des colonnes.

Bonne journée.
 

Pièces jointes

  • Test_Tool - v3.0.8.2(8).xlsm
    102.3 KB · Affichages: 31
  • Test_Tool - v3.0.8.2(8 bis).xlsm
    104.3 KB · Affichages: 22

Nylream

XLDnaute Junior
Bonjour Job75, le forum,

Le test que j'ai fais ne peut être reproduit puisque le fichier porte le même nom malgré plusieurs changement. J'avais constaté ce problème avant que dans les feuilles _Dispatch, le déplacement soit forcé par une suppression.
De fait, j'ai certainement copier coller un nom au lieu de le couper coller.
Ce qui ne signifie pas que je n'ai pas tester le fichier.

Les modifications suivantes intéressement :
Suppression d'un nom si il est saisie dans une autre cellule pour les fichiers _Dispatch
Conservation dans la feuille POSTING des anciennes valeurs "role/assignment" pour un nom suite à un changement. Idéalement, je préfèrerais même que cela passe par une validation manuelle pour remplir le POSTING

Malheureusement, comme depuis le post #39, vous insistez pour que j'utilise des listes de validation à la place des combobox, je ne peux pas utiliser les versions des fichiers que vous m'avez proposé. J'ai compris le conseil, mais ne peux, ni ne veux le suivre dans la mesure ou il me fait perdre une fonctionnalité importante.
J'ai besoin de la saisie intuitive multicritère, et ce, même si cela ne vous parait pas approprié.


Merci toutefois pour l'aide que vous m'avez apporté jusqu'ici, et bonne continuation dans le cas ou vous ne souhaitez pas reporter vos modifications en prenant en compte une saisie intuitive multicritère.
 

job75

XLDnaute Barbatruc
Bonjour Nylream, le forum,

Dans ces fichiers (9) et (9 bis) j'ai mis en place une recherche intuitive par ComboBox qui tient la route.

Si vous avez suivi ce que j'ai fait précédemment vous arriverez peut-être à comprendre.

Pour le message d'alerte l'UserForm va mieux qu'une MsgBox.

De toute façon c'est bien compliqué, comme toutes les usines à gaz.

A+
 

Pièces jointes

  • Test_Tool - v3.0.8.2(9).xlsm
    136.4 KB · Affichages: 25
  • Test_Tool - v3.0.8.2(9 bis).xlsm
    140.1 KB · Affichages: 24

Nylream

XLDnaute Junior
Bonjour Job75, le forum,

Tout d'abord, merci beaucoup d'avoir répondu à ma demande.
J'ai testé les deux versions. Juste pour être sûr, la différence est au niveau du Orders, ou l'agencement est différent n'est ce pas ?
Si c'est ça, j'ai une préférence pour la version 9, mais c'est un détails.

La possibilité de "déplacer" les noms (suppression de l'ancien si saisie dans une nouvelle cellule) est excellente.
Je suis en train de voir ce que donne la validation à chaque modification pour la feuille POSTING.
J'avais imaginé un bouton en A1 pour validé "les changements" sur la feuille, mais en y réfléchissant, ça n'est pas applicable. Si l'utilisateur ne valide pas, POSTING ne s'incrémenterait pas, mais les cellule sur la feuille _Dispatch, elles, seraient bien modifié.

C'est en tout cas génial, et merci d'avoir pris le temps de m'aider malgré le coté illogique apparent de la demande.
 

Nylream

XLDnaute Junior
Re,

J'ai tout à fais compris comment ça fonctionnait, mais il fallait également lire la phrase précédente pour que cela ai un sens. L'utilisation du conditionnel, du coup, prend tout son sens.
J'avais imaginé un bouton en A1 pour validé "les changements" sur la feuille, mais en y réfléchissant, ça n'est pas applicable. Si l'utilisateur ne valide pas, POSTING ne s'incrémenterait pas, mais les cellule sur la feuille _Dispatch, elles, seraient bien modifié.

Ce que j'avais imaginé n'étant, je suppose pas raisonnable, la validation à chaque modification est une proposition intéressante.

Bonne nuit,
 

job75

XLDnaute Barbatruc
Bonjour Nylream, le forum,

J'ai modifié les fichiers (9) et (9 bis) post #55 pour que l'UserForm s'ajuste à la dimension du message :
Code:
Private Sub UserForm_Initialize()
With Label1
  .AutoSize = False
  .Caption = nom & " will be posted as " & post
  .Width = 1000
  .AutoSize = True
  Me.Width = Application.Max(.Width + 30, 147)
End With
End Sub
Bon dimanche.
 

Nylream

XLDnaute Junior
Bonjour Job75, le forum,

Merci pour la dernière modification, c'est bien pratique (plus propre).

J'ai commencé à exploiter tout ça et a développer la feuille Orders, ça prend forme :)
Je bloque un peu sur la même chose : redimensionnement automatique, sauf que là, ce que je cherche, c'est la hauteur pour une seule ligne, la 50.

Merci encore pour votre aide,
 

Pièces jointes

  • Test_Tool - v3.0.8.3.xlsm
    121.5 KB · Affichages: 23

Discussions similaires

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260