[Résolu] Mise en forme cellule avec liaison extérieure

Max60150

XLDnaute Junior
Bonjour le forum !

Me voici de retour avec une nouveau projet !
Je vous fais un petit topo:
Alors sur mon fichier, j'ai des cellules qui vont récuperer leur valeur sur un autre classeur avec des liaisions.
Jusque là tout va bien.
L'idée que j'ai, serait que, si une cellule avec une liaison change de valeur (ce qui voudra dire que la cellule du classeur référence à été mise à jour), cette cellule soit surlignée, ou clignote, enfin peut importe, mais que ce soit visible à l'ouverture, ou au moins à l'impression !

Alors j'ai pensé à un bricolage du genre:
- Faire une copie des cellules avec liaisions extérieures sur la même page, planquées quelque part, à la fermeture du fichier, par exemple. Les cellules copiées récupèrent la valeur à l'instant T, et ne seront donc pas mise à jour si changement il y a dans le classeur référence.
- Lancer la MAJ des liaisons extérieures à l'ouverture du fichier.
- Comparé les cellules avec liaison et les copies faites à la précédente fermture du fichier.
- Si différence il y a, une simple mise en forme conditonnelle fera l'affaire.

Sur le papier ca marche, le problème c'est que c'est un peu compliqué.
Surtout pour mes collègues qui ne veulent pas avoir à farfouiller dans des macros du VBA ou autre joyeuseté.
Sur un fichier existant je peu bricoler, ils n'auront qu'a l'utiliser derrière.
Le problème c'est que je ne serais pas toujours là, et que si ils doivent créer un nouveau fichier, ils seront incapable de réfaire mon bricolage.

Donc voilà, est-ce qu'il existe une méthode plus simple que celle que je propose pour arriver au même résultat ?
En résumé, pouvoir mettre en forme une cellule, si la valeur s'y trouvant à l'ouverture n+1 est différente de la valeur qui s'y trouvait à l'ouverture n !?

J'aurais bien mis un fichier exemple, mais avec les liaison et tout c'est un peu galère !
Je reste cependant dispo pour d'éventuelles questions :)
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Mise en forme cellule avec liaison extérieure

Bonjour Max60150,

Oui il faut mémoriser, mais le mieux est d'utiliser des noms définis.

1) Nommez CelRef1 CelRef2 CelRef3 etc... chacune des cellules contenant des liaisons.

Pour les noms respectez majuscules et minuscules.

2) Placez ces 2 macros dans ThisWorkbook (Alt+F11) :

Code:
Private Sub Workbook_Open()
Dim nom As Name
For Each nom In Me.Names
  If nom.Name Like "CelRef*" Then
    If Evaluate(nom.Name) <> Evaluate("CelVal" & Split(nom.Name, "f")(1)) Then
      Evaluate(nom.Name).FormatConditions.Add xlExpression, Formula1:="=1"
      Evaluate(nom.Name).FormatConditions(1).Interior.ColorIndex = 3 'rouge
    End If
  End If
Next
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim nom As Name
For Each nom In Me.Names
  If nom.Name Like "CelRef*" Then
    Me.Names.Add "CelVal" & Split(nom.Name, "f")(1), Evaluate(nom.Name).Value
    Evaluate(nom.Name).FormatConditions.Delete
  End If
Next
Me.Save 'enregistrementautomatique
End Sub
3) Fermez le fichier et rouvrez-le après avoir modifié des cellules (en liaison) du fichier source.

Nota : sachez que les noms définis peuvent être masqués par macro, mais ici je n'en vois pas l'intérêt.

A+
 

Max60150

XLDnaute Junior
Re : Mise en forme cellule avec liaison extérieure

Bonjour job75,

Et merci, c'est exactement ce genre de solution que j'avais en tête mais je n'ai que que quelques notions en VBA !
Alors si je peux me permettre d'abuser, si tu as deux minutes dans les jours à venir, est-ce que tu pourras m'en dire plus sur ton code?
En quelques lignes, rapidement histoire que je puisse bidouiller, la j'ai un peu de mal à tout comprendre :)

Et sinon, penses tu qu'il soit possible de figer la mise en forme?
Pour une autre application ca me serait bien utile.
C'est à dire de conserver les cellules colorées d'une ouverture à l'autre?

Merci d'avance !
 

job75

XLDnaute Barbatruc
Re : Mise en forme cellule avec liaison extérieure

Re,

Quelques explications :

- voir d'abord dans l'aide VBA les mots Names, FormatConditions et Split

- à la fermeture la macro recherche les noms définis commençant par CelRef, crée les noms CelVal correspondants et efface les MFC des cellules nommées

- à l'ouverture, de nouveau elle recherche les noms définis, compare les valeurs et crée une MFC (très simple) par cellule.

Et sinon, penses tu qu'il soit possible de figer la mise en forme?

Quelle mise en forme ? Les MFC ?

Alors il est bien plus simple de les supprimer et de les recréer à chaque fois.

A+
 

job75

XLDnaute Barbatruc
Re : Mise en forme cellule avec liaison extérieure

Re,

Maintenant si vous voulez que les cellules gardent toujours leur coloration, eh bien plus de MFC :

Code:
Private Sub Workbook_Open()
Dim nom As Name
For Each nom In Me.Names
  If nom.Name Like "CelRef*" Then
    If Evaluate(nom.Name) <> Evaluate("CelVal" & Split(nom.Name, "f")(1)) _
      Then Evaluate(nom.Name).Interior.ColorIndex = 3 'rouge
  End If
Next
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim nom As Name
For Each nom In Me.Names
  If nom.Name Like "CelRef*" Then _
    Me.Names.Add "CelVal" & Split(nom.Name, "f")(1), Evaluate(nom.Name).Value
Next
Me.Save 'enregistrementautomatique
End Sub
Il vous appartiendra d'effacer manuellement les couleurs quand bon vous semblera.

A+
 

Max60150

XLDnaute Junior
Re : Mise en forme cellule avec liaison extérieure

Bonjour !

Rien à dire, précis et efficace !
Merci beaucoup pour votre aide encore une fois :)

Je vais m'atteler à la mise en place de ce système,
et je vais pouvoir bidouiller pour m'en servir sur d'autres applications !

Au plaisir !
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87