Bonjour,
j'ai réalisé une macro dernièrment qui permet de colorier le choix que l'on fait dans un menu déroulant (datavalidation).
Il ne sagit pas de format conditionnel mais bien de Datavalidation avec dans certain cas l'emploi de la fonction "indirect" dans la datavalidation.

Cette macro fonctionne très bien mais quand le fichier est envoyé à l'étranger.
Elle bug uniquement quand la datavalidation utilise cette fameuse fonction "indirect".

Après analyse avec mes collègues Espagnol, la fonction indirect se traduit par "indirecto".

La ligne de commande que j'utilise interprète mal le tout puisque la fonction est comprise, je pense, en mode texte et non pas dynamique. La voici:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Set References = Range(ActiveCell.Validation.Formula1)
La solution de remplacer "indirect par indirecto" n'est pas pensable puisqu'il faudrait la traduire dans toutes les langues (puisque ces un fichiers WW).

Merci d'avance aux "king" de VBA-Excel de votre aide.

A toute fin utilse, voici la macro au complet:



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 
Dim Plage As Range, Noms As Range, CelNom As Range, Celcouleur As Range
On Error Resume Next 'Permet d'arreter la macro sans message en d'erreur
 
Set References = Range(ActiveCell.Validation.Formula1) 
If Sh.Name = ("Configurator") Then 'Feuille du classeur avec liste déroulante
    Set Plage = Range("D9:D25") 'Plage dans la feuille du classeur
 
Else: Exit Sub
End If
 
 
 
If Not Intersect(Target, Plage) Is Nothing Then
    For Each CelNom In Intersect(Target, Plage)
        For Each Celcouleur In References
 
               If CelNom = Celcouleur Then
                    CelNom.Interior.ColorIndex = Celcouleur.Interior.ColorIndex
                    CelNom.Font.ColorIndex = Celcouleur.Font.ColorIndex
                    Exit For
               End If
 
               If CelNom <> Celcouleur Then
                    CelNom.Interior.Color = 255
               End If
 
        Next Celcouleur
    Next CelNom
End If
 
End Sub