XL 2013 Modification code VBA

JHA

XLDnaute Barbatruc
Bonjour à tous,

J'ai un bout de code qui fonctionne si je rentre une donnée dans la plage "plan". Ce code renvoie une couleur de fond suivant l'intitulé de la cellule.
Le problème est que l'intitulé n'est plus inscrit à la main mais par formule et là plus rien ne s'affiche.
Avez vous une idée de la modification à apporter?

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([plan], Target) Is Nothing Then
On Error Resume Next
Target.Interior.ColorIndex =
Code:
.Find(Target, LookAt:=xlWhole).Interior.ColorIndex
  End If
End Sub

merci pour votre aide si possible.

JHA
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Modification code VBA

Bonsoir.
Il faut tester le changement des antécédents des formules, ou alors refaire tous les coloriages dans une Worksheet_Calculate. Ou alors utiliser les mises en formes conditionnelles.
 
Dernière édition:

JHA

XLDnaute Barbatruc
Re : Modification code VBA

Bonjour à tous,
Bonjour Dranreb:), Bonjour DoubleZero:),

Merci pour vos réponses mais le code proposé par DoubleZero ne met pas les couleurs sans saisir des données et c'est là mon soucis, les données sont déjà inscrites dans le tableau. J'avais fait des tas de MFC mais cela ralentissait fortement cet onglet voilà pourquoi j'essaie de passer par VBA.

table.jpg
Désolé de ne mettre qu'une image qui ne vous aide pas à travailler

JHA
 

Pièces jointes

  • table.jpg
    table.jpg
    26.7 KB · Affichages: 50
  • 00 - JHA - Couleurs.xlsm
    35.3 KB · Affichages: 53
  • 00 - JHA - Couleurs.xlsm
    35.3 KB · Affichages: 49

JHA

XLDnaute Barbatruc
Re : Modification code VBA

Re bonjour,

Merci DoubleZero pour ton code avec un bouton, cela fonctionne mais il faut environ 40 secondes pour traiter les données de la plage "plan" ($C$6:$NJ$79).

Avez vous un moyen d'accélérer le code?

JHA
 

Paf

XLDnaute Barbatruc
Re : Modification code VBA

Bonjour JHA, Dranreb, DoubleZero,

Si j'ai bien compris et comme le préconisait Dranreb on utilise le recalcul de la feuille pour tout mettre à jour:

A l'ouverture du classeur on charge les données de la feuille Couleurs dans un Dico
Code:
Private Sub Workbook_Open()
 Dim Montab, i
 Set Dico = CreateObject("Scripting.Dictionary")
 With Worksheets("Couleurs")
    Montab = .Range("A1:A17")
    For i = LBound(Montab) To UBound(Montab)
        Dico(Montab(i, 1)) = .Cells(i, 1).Interior.ColorIndex
    Next
 End With
End Sub

Chaque modification de cellule (issue de formule) déclenche l'événement Calculate:
dans le module de code de la feuille Feuil1:

Code:
Private Sub Worksheet_Calculate()
 Dim Cell
 For Each Cell In [plan]
    Cell.Interior.ColorIndex = Dico(Cell.Value)
 Next
End Sub

Dico est déclaré en public dans un module standard.

A+
 

JHA

XLDnaute Barbatruc
Re : Modification code VBA

Re bonjour à tous,

DoubleZero, toutes les cellules de la plage contiennent des formules

Paf, merci pour ton code mais je suis une bille en VBA, peux tu me donner la marche à suivre pour déclarer "Dico" en public dans un module standard car à l'ouverture du fichier le code s'arrête.

Dranreb, tu as certainement raison dans ton raisonnement mais je suis vraiment dans l'incapacité de modifier le code de Paf.

JHA

 

Paf

XLDnaute Barbatruc
Re : Modification code VBA

Re,

Dans un module standard ( par exemple Module1) tout au début de la feuille:

Public Dico

la mise à jour est presqu'instantanée sur l'exemple. si elle s'avérait trop longue en réel, je me pencherai sur la mise à jour individuelle.

A+

Edit : impossible d'ouvrir le classeur sans planter excel . une version xls ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Modification code VBA

Ce n'est pourtant pas difficile dans une Worksheet_Change de tester If Target.Column = x, avec x étant non pas la colonne dont on veut changer la couleur et contenant la formule, mais celle contenant la valeur dont cette formule dépend !
Maintenant je suis pratiquement sûr qu'on pourrait écrire une fonction personnalisée à laquelle on passerait une clé, une plage des clés et une colonne dans la même feuille des cellules à reproduire, valeur et couleur. La fonction ne pourrait changer elle même la couleur, mais elle pourrait stocker dans une collection une consigne de le faire, celle ci étant observée ultérieurement par une Worksheet_Calculate.
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
234

Statistiques des forums

Discussions
312 104
Messages
2 085 335
Membres
102 865
dernier inscrit
FreyaSalander