Code VBA pour colorier des cellules à partir de trois critères

NoodleDS

XLDnaute Nouveau
Bonjour à tous,

Je suis nouveau sur le forum et effectue du VBA depuis peu de temps.

Voici mon problème :

Je souhaite qu'un code VBA à partir de 3 critères sélectionnés dans un formulaire puisse me colorier deux colonnes qui correspondent au jour RTT choisi.
Voir les deux fichiers en exemple.

Merci pour votre aide.
 

Pièces jointes

  • CalendExemple.xls
    34.5 KB · Affichages: 57
  • CalendExemple.jpg
    CalendExemple.jpg
    44.1 KB · Affichages: 72

job75

XLDnaute Barbatruc
Re : Code VBA pour colorier des cellules à partir de trois critères

Bonjour NoodleDS, fohest, le forum,

Voyez le fichier joint avec cette macro dans le code de l'UserForm :

Code:
Private Sub Valid_Click()
Dim cel As Range, n As Byte, test As Boolean
If CB_nom.ListIndex = -1 Then _
  MsgBox "Vous devez choisir le nom...", 48: CB_nom.DropDown: Exit Sub
If CB_sem.ListIndex = -1 Then
  If MsgBox("Vous n'avez pas choisi les semaines, voulez-vous les effacer toutes ?", 4) = 7 _
    Then CB_sem.DropDown: Exit Sub
ElseIf CB_jour.ListIndex = -1 Then _
  If MsgBox("Vous n'avez pas choisi le jour, voulez-vous effacer les RTT ?", 4) = 7 _
    Then CB_jour.DropDown: Exit Sub
End If
With Feuil1 'CodeName de la feuille
  For Each cel In .Range("A6", .[A65536].End(xlUp))
    If cel Like "Sem.*" Then
      n = Replace(cel, "Sem.", "")
      test = n Mod 2 = CB_sem.ListIndex Or CB_sem.ListIndex = -1
    ElseIf cel = CB_nom And test Then
      If CB_sem.ListIndex = -1 Or CB_jour.ListIndex = -1 Then 'effacement
        Intersect(cel.EntireRow, .[B:C,F:G,J:K]).Interior.ColorIndex = xlNone
      Else 'coloration
        cel.Offset(, 1 + 4 * CB_jour.ListIndex).Resize(, 2).Interior.ColorIndex = 40
      End If
    End If
  Next
End With
'Unload UF_Planning 'si l'on veut fermer l'USF
End Sub
A+
 

Pièces jointes

  • CalendExemple(1).xls
    64 KB · Affichages: 55

job75

XLDnaute Barbatruc
Re : Code VBA pour colorier des cellules à partir de trois critères

Re,

S'il ne peut y avoir qu'un seul jour de RTT dans la semaine, utilisez :

Code:
Private Sub Valid_Click()
Dim cel As Range, n As Byte, test As Boolean
If CB_nom.ListIndex = -1 Then _
  MsgBox "Vous devez choisir le nom...", 48: CB_nom.DropDown: Exit Sub
If CB_sem.ListIndex = -1 Then
  If MsgBox("Vous n'avez pas choisi les semaines, voulez-vous effacer tous les RTT ?", 4) = 7 _
    Then CB_sem.DropDown: Exit Sub
ElseIf CB_jour.ListIndex = -1 Then
  MsgBox "Vous devez choisir le jour...", 48: CB_jour.DropDown: Exit Sub
End If
With Feuil1 'CodeName de la feuille
  For Each cel In .Range("A6", .[A65536].End(xlUp))
    If cel Like "Sem.*" Then
      n = Replace(cel, "Sem.", "")
      test = n Mod 2 = CB_sem.ListIndex Or CB_sem.ListIndex = -1
    ElseIf cel = CB_nom And test Then
      Intersect(cel.EntireRow, .[B:C,F:G,J:K]).Interior.ColorIndex = xlNone
      If CB_sem.ListIndex >= 0 Then _
      cel.Offset(, 1 + 4 * CB_jour.ListIndex).Resize(, 2).Interior.ColorIndex = 40
    End If
  Next
End With
'Unload UF_Planning 'si l'on veut fermer l'USF
End Sub
A+
 

Pièces jointes

  • CalendExemple(2).xls
    58.5 KB · Affichages: 82
  • CalendExemple(2).xls
    58.5 KB · Affichages: 60
  • CalendExemple(2).xls
    58.5 KB · Affichages: 53

NoodleDS

XLDnaute Nouveau
Re : Code VBA pour colorier des cellules à partir de trois critères

Bonjour fhoest, job75, le forum,

fhoest, job75, je vous remercie pour vos réponses très rapides. Ce qui n'a pas été mon cas. J'ai pu m'y remettre que très récemment...

fhoest, ton programme fonctionne très bien, mais celui-ci ne correspond pas exactement à ce que je souhaite.
Lorsque le calendrier est généré en début d’année, le choix de la semaine (paire ou impaire) et du jour (Lundi ou Mercredi ou Vendredi) est effectué par la personne. Celle-ci ne pourra pas en déroger en cours d’année. C’est pourquoi je souhaite que le programme puisse affecter en une seule fois le choix de la personne pour l’année.

job75, ta seconde réponse correspond plus à ce que je souhaite.
Ce qui est très bien c’est que l’on ne puisse pas mettre un autre jour RTT à une personne dans la même semaine. Par contre, si l'on change la semaine, le programme est capable de me mettre un autre jour RTT . Or, la même personne ne peut être en RTT en semaine paire et en semaine impaire. Peut-on gérer cela…
Autre souci, j’ai essayé de modifier ton programme pour qu’il puisse gérer également des semaines (tableaux) qui au lieu d’être uniquement en colonne sont également en ligne. Je n’y arrive pas. J’ai un souci au niveau de la sélection des plages…
Autre chose, peut-on trouver un moyen de supprimer en une seule fois le choix que l’on a pu appliquer (bouton "Effacer" supplémentaire dans le formulaire).

Je fournit donc un nouvel exemple (voir mon fichier : CalendExempleBIS.xls), ainsi que le dernier fichier de job75 qui contient son programme.

Je remercie encore fhoest et job75 pour leurs contributions respectives et demande à nouveau leur aide ainsi qu'à l'ensemble des membres du forum.
 

Pièces jointes

  • CalendExemple(2).xls
    58.5 KB · Affichages: 45
  • CalendExempleBIS.xls
    36 KB · Affichages: 42
  • CalendExemple(2).xls
    58.5 KB · Affichages: 35
  • CalendExempleBIS.xls
    36 KB · Affichages: 48
  • CalendExemple(2).xls
    58.5 KB · Affichages: 34
  • CalendExempleBIS.xls
    36 KB · Affichages: 45

fhoest

XLDnaute Accro
Re : Code VBA pour colorier des cellules à partir de trois critères

Bonjour NoodleDS,

par rapport au fichier que je t'ai donné il faudrait des textbox remplis par des cellules (semaine pair ou impair choisi par la personne ainsi que les jours souhaités)
revient avec un fichier qui contient les données d'une personne en exemple et je ferais le reste.
A+
 

NoodleDS

XLDnaute Nouveau
Re : Code VBA pour colorier des cellules à partir de trois critères

Bonjour fhoest, le forum,

fhoest, ma demande a un peu changé depuis ta contribution. Je souhaite si possible que le programme puisse gérer également des semaines (tableaux) qui au lieu d’être uniquement en colonne sont également en ligne. Je fourni donc un nouveau fichier pour cela (ton code sera présent dans ce fichier).
Sinon, je pense n'avoir pas donné l'information principale pour la réalisation du programme, qui est que la personne fait un choix tous les ans, en début d'année pour toute l'année. Une fois le choix effectué, celle-ci ne peut en déroger. Par exemple, Toto va prendre cette année :

Tous les Lundis des semaines impaires.

L'idée de départ est que le programme doit si possible colorier en une seule fois toutes les cellules concernées. De la même façon, si l'on s'est trompé, il doit permettre de tout effacer en une seule fois, pour pouvoir recommencer.
Ensuite, une fois que le choix est bien effectué et que les cellules sont coloriées, le programme doit empêcher d'effectuer un second choix pour la même personne.

Je te remercie encore fhoest de m'aider et demande à nouveau ton aide ainsi qu'à l'ensemble des membres du forum.
 

Pièces jointes

  • CalendExempleBIS.xls
    38 KB · Affichages: 36
  • CalendExempleBIS.xls
    38 KB · Affichages: 45
  • CalendExempleBIS.xls
    38 KB · Affichages: 42

Discussions similaires

Statistiques des forums

Discussions
312 510
Messages
2 089 148
Membres
104 051
dernier inscrit
jjouneau