XL 2010 Macro qui ne fonctionne pas avec une MFC

Myst

XLDnaute Occasionnel
Bonsoir le forum
J'ai un petit problème avec mon fichier, actuellement tout fonctionne sauf la relation entre les macro et les MFC Je m'explique, dans les cellules de la colonne D en fonction du texte saisie celui-ci change de couleur par l'action d'une MFC, ensuite les macros devraient prendre le relais mais là ça ne fonctionne pas
Il faut que je donne la couleur manuellement au texte pour que la macro la prenne en comptes
Comment pourrai je faire ?
merci
 

Pièces jointes

  • Myst V1.xlsm
    135.8 KB · Affichages: 64

Staple1600

XLDnaute Barbatruc
Bonsoir à tous

Myst
Est-ce que tu essay (pour comprendre de tester la logique) dans un classeur vierger avec un userform et un Commandbutton
Et sur une feuille, deux boutons
Insères ensuite les codes que j'ai précédemment posté aux endroits idoines
(dans un module de classe, standard, dans le code de la feuille, de l'userform )
Une fois que cela est fait, clique sur un bouton de la feuille pour faire s'afficher l'adresse du tableau
Si tu suis bien les instructions, tu dois obtenir un truc de ce genre
Tu vois que selon le bouton sur lequel on clique on identifie bien le bon tableau.
Donc en partant sur cette base sur ton vrai fichier, au lieu d'afficher un MsgBox, il suffit de modifier avec ton code existant pour appliquer CouleurPolice.
moduleClass.jpg
 
Dernière édition:

Myst

XLDnaute Occasionnel
Bonjour Staple1600, le forum
Ci-joint le fichier, OK pour la sélection des couleurs de cellules en fonction de la colonne "D" dans les tableaux des différentes semaines, c'est la mise en couleur grise et rouge qui posent problème.
A la base les cellules "E3 a P23" doivent prendre la couleur de la police de la colonne "D", ça c'est OK
Les cellules "E3 a P23" doivent être grise si la couleur de police de "H2 a N2" est de couleur noir
Les cellules "E3 a P23" doivent être rouge si la couleur de police de "H2 a N2" est de couleur blanche
Les CommandButton ont été supprimés, l'affichage de l'Userform passe par un clique en colonne A
Merci a toi pour ta patience
 

Pièces jointes

  • V4.xlsm
    146.5 KB · Affichages: 44

Dranreb

XLDnaute Barbatruc
Boujour.
Vous étiez bien près du but il me semble. Je comprends d'autant moins que vous vouliez revenir au 52 UserForm ce qui m'avait un peu mis en colère.
Pas facile de comprendre ce que vous voulez faire avec un code faux.
Serait-ce bon comme ça ? :
VB:
'mise à jour de la couleur de police selon la colonne D
For I = 2 To lastLigne
  CouleurPolice = Plage.Cells(I, "D").Font.ColorIndex
  Plage.Cells(I, "E").Resize(, LastColonne - 4).Interior.ColorIndex = CouleurPolice
  Next I

'mise à jour de la couleur de cellule (gris) selon le contenu de la ligne 2
If Plage.Cells(1, 4).Font.ColorIndex = xlAutomatic Then
  Plage(2, 5).Resize(lastLigne - 1, lasccolonne - 4).Interior.ColorIndex = 16 'gris
  End If

' mise à jour en rouge des cellules vides  et police "blanc" en ligne 2
For J = 5 To LastColonne
  If Plage.Cells(1, J).Font.ColorIndex = 2 Then 'couleur blanc
  Plage(2, J).Resize(lastLigne - 1).Interior.ColorIndex = 3 'couleur Rouge
  End If
  Next J

Ah et puis je n'avais pas vu: dans la boucle sur les CheckBox, Cells(2, 7 + I) devrait être remplacé me semble-t-il par Plage(1, 7 + I)

En fait vous auriez pu reprendre le code d'origine pour la 1ère semaine et remplacer tous les "Cells(" par "Plage(-1+"
puis simplifier les expressions lignes. Mettre Plage.Cells seulement si la colonne est spécifiée en lettre.
 
Dernière édition:

Myst

XLDnaute Occasionnel
Bonjour,
Heuuu comment dire, ça marche pas
1-Au sujet des CheckBox, Cells(2, 7 + I) c'est bien la ligne 2 il me semble sinon pas d'interaction avec le texte blanc en ligne 2
2- Dans la sélection des autres semaine c'est toujours la ligne 2 qui réagit, alors que ce devrait être la ligne titre de la semaine sélectionné ( ligne 2 pour la semaine 1 ,ligne 24 pour la semaine 2, ligne 46 pour la semaine 3 etc...)
3- Après sélection de la semaine 3 j'ai une erreur d'exécution "1004"
3- Aucunes cellules ne passent en gris
Régles ;
- Couleur de cellule (gris) si le contenu de la ligne titre (ex; ligne 24 pour la semaine 2) est (noir)
- Couleur de cellule (rouge) si le contenu des cellules est vides et la police "blanc" dans la ligne titre de la semaine sélectionné
Ci dessous en exemple du résultat que je voudrais obtenir
merci

Sans titre.jpg
 

Dranreb

XLDnaute Barbatruc
Voulez vous dire qu'il faut remettre les CheckBox dans l'état lors de l'affichage de l'UserForm ?
Très facile. Ça nous donnerait donc, en remplaçant les I et J par L et C surtout pour éviter déjà la confusion I/l/1 :
VB:
Option Explicit
Private Plage As Range

Public Sub Afficher(ByVal Cible As Range)
Dim C As Long
Me.Caption = Cible(1, 1).Value
Set Plage = Cible.Resize(, 16)
For C = 1 To 7
  Me("CheckBox" & C).Value = Plage(1, C + 7).Font.ColorIndex = 2
  Next C
Me.Show
End Sub

Private Sub CommandButton1_Click()
Const LMax = 22, CMax = 16
Dim L As Long, C As Long
  For C = 1 To 7
     If Not Me("CheckBox" & C).Value Then
     Plage(1, C + 7).Font.ColorIndex = xlAutomatic
     Plage(1, C + 7).Interior.ColorIndex = 1
  Else
     Plage(1, C + 7).Font.ColorIndex = 2
     End If: Next C
 
'fermer l'userform
Me.Hide

'mise à jour de la couleur de police selon la colonne D
For L = 2 To LMax
  Plage(L, 5).Resize(, CMax - 4).Interior.ColorIndex = Plage(L, 4).Font.ColorIndex
  Next L

'mise à jour de la couleur de cellule (gris) selon le contenu de la ligne 2
If Plage(1, 4).Font.ColorIndex = xlAutomatic Then
  Plage(2, 5).Resize(LMax - 1, CMax - 4).Interior.ColorIndex = 16 'gris
  End If
 
' mise à jour en rouge des cellules vides  et police "blanc" en ligne 2
For C = 5 To CMax
  If Plage(1, C).Font.ColorIndex = 2 Then 'couleur blanc
  Plage(2, C).Resize(LMax - 1).Interior.ColorIndex = 3 'couleur Rouge
  End If
  Next C
End Sub

Private Sub CommandButton2_Click()
Me.Hide
End Sub
 
Dernière édition:

Myst

XLDnaute Occasionnel
Re
Non le fonctionnent des checkbox me convenait mais effectivement c'est mieux ainsi, par contre il doit manquer une condition dans la mise en couleur rouge des cellules , il faut que le titre soit en caractère blanc et que les cellules soient vide, aprés l'ajout de la ligne ci dessous ça ne fonctionne toujours pas
VB:
' mise à jour en rouge des cellules vides  et police "blanc" en ligne 2
For C = 5 To CMax
  If Plage(1, C).Font.ColorIndex = 2 Then 'couleur blanc
  If Plage(1, C).Font.ColorIndex = "" Then 'cellules vides
Plage(2, C).Resize(LMax - 1).Interior.ColorIndex = 3 'couleur Rouge
End If
  Next C
 

Dranreb

XLDnaute Barbatruc
Alors comme ça :
VB:
' mise à jour en rouge des cellules vides  et police "blanc" en ligne 2
For C = 5 To CMax
  If Plage(1, C).Font.ColorIndex = 2 Then 'couleur blanc
     On Error Resume Next
     Plage(2, C).Resize(LMax - 1).SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 3 'couleur Rouge
     On Error GoTo 0
     End If
  Next C
 

Myst

XLDnaute Occasionnel
Ok pour la couleur rouge, c'est parfait bien que le code soit un peu compliqué a cerner
Il reste la couleur grise, si le caractère de police est noir dans le ligne de titre alors les cellules sont grises dans la colonne correspondante
Comme dans l'image posté précédemment
 

Dranreb

XLDnaute Barbatruc
Ajouter juste avant le End If :
VB:
 Else
  Plage(2, C).Resize(LMax - 1).Interior.ColorIndex = 16 'gris
Cela ne ferait il pas double emploi avec du code raté plus haut, à supprimer ?

Et au lieu de For C = 5 To CMax ne faudrait-il pas se limiter aux colonnes couvertes par les CheckBox
donc For C = 8 To 14 ?
(auquel cas ça pourrait se simplifier en testant plutôt If Me("CheckBox" & C - 7).Value et en rectifiant aussi à cet endroit la couleur de police ligne 1. Le groupe d'instructions du début disparaitrait)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Ce qui donnerait :
VB:
Private Sub CommandButton1_Click()
Const LMax = 22, CMax = 16
Dim L As Long, C As Long
   
' Fermeture de l'UserForm
Me.Hide

' Préétablissement provisoire couleur de fond selon couleur de police colonne D
For L = 2 To LMax
  Plage(L, 5).Resize(, CMax - 4).Interior.ColorIndex = Plage(L, 4).Font.ColorIndex
  Next L
   
' Rectification couleurs titres, cellules vides anormales et colonnes non applicables.
For C = 8 To 14
  If Me("CheckBox" & C - 7).Value Then
     Plage(1, C).Font.ColorIndex = 2 'Blanc
     On Error Resume Next
     Plage(2, C).Resize(LMax - 1).SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 3 'Rouge
     On Error GoTo 0
  Else
     Plage(1, C).Font.ColorIndex = 1 'Noir
     Plage(2, C).Resize(LMax - 1).Interior.ColorIndex = 16 'Gris
     End If
  Next C
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87